1. 程式人生 > 遊戲 >模擬新作《槍支維修店》上架Steam 支援中文配音

模擬新作《槍支維修店》上架Steam 支援中文配音

阿西雜湊函式的設計

看下面的一組資料,如果是用紅黑二叉樹進行儲存,效能在O(longn),但是如果將這些數字直接放到記憶體中,比如這組資料中最大的是940,那就開闢一個940的大小的記憶體,每個數字都在對應的位置上,數字本身就是在記憶體上的索引,這樣的話查詢資料的話時間複雜度為O(1),但是這損失了空間。

為了解決上面的問題,可以通過取餘來解決:比如將正整數與一定的數M進行相除,比如100,那麼所得的餘數便作為他們的鍵值,這樣記憶體的開銷就會小了很多,但是也會出現取餘之後出現數字相同的情況,這叫雜湊衝突,不能解決,只能避免。

素數: 就是除了1和它自身外,再沒有其它因子的自然數。如果把1也看作一個特殊的素數,寫出來素數的集合為{1,2,3,5,7,11,13,17,19,23,......}

為了避免上述情況M最好為素數,比如97。可以看到分步更為均勻了,但是還是無法避免雜湊衝突。

當然你不可能只儲存正整數,可能還有浮點數和字串,比如下面字串也是轉為二進位制,其中a的ASCII碼為97,b的ASCII碼為98,c的ASCII碼為99,但是你呼叫內建的GetHashCode函式得到的結果很可能與左邊算的不一樣,這是因為內部實現上不一樣,不必管。