雜湊表的大小為什麼最好是素數

2021-07-15 23:09:24 字數 616 閱讀 1535

我也是總結了這篇帖子的主要內容。

首先在說明為什麼雜湊表的大小最好為素數之前,先說一下若大小取2的整數冪的問題,對於x mod m這樣的函式,m即為雜湊表的大小,其中的好壞應該取決於x的生成法師和m的值。比如乙個字串「abc」,如果把字串當成乙個128進製的整數,寫成「abc」 = 128 * 128 * 65 + 128 * 66 + 67,這種形式中,若m = 128,那麼只要根據最後乙個字元是否相同就可以判斷是否會衝突,也就是說結果取決於最後乙個字元,便會造成不均勻。

對於雜湊表最好為素數這個問題也是有爭議的。這裡也只能說按照x mod m這種最普遍的雜湊函式來解釋,如果想讓雜湊做好衝突小,效率高的效果,還是要從雜湊函式來分離資料的特徵的。

恰好等於或接近2的整數冪都只是暴露原值。素數才能用來避免衝突,如果種子用合數,那麼很可能對合數的某個因數取餘,所得到的餘數仍然是一樣的。帖子中舉例說:對4取餘如果餘1,那麼對2取餘仍然餘1.開始覺得還挺對的,後來想想對4取餘跟對2取餘啥關係,當雜湊表大小為4時,誰會再對2取餘呢?

自我感覺如果還是x mod m這種雜湊函式,想要讓衝突小,那就只有讓雜湊表的大小越大越好,衝突自然就小了,至於素數的問題發現還是無果。如果有朋友對這方面有高見,還請跟我交流(郵箱[email protected]

為什麼是雜湊表?!

為什麼是雜湊表?1 提出問題 這裡有乙個大的跨國公司,公司中的職員資訊全部儲存在資料庫中。對於其中的任何乙個職員來說,他們的唯一標識就是員工號,而這個公司的員工號是按照職員工作的地點以及部門及工作開始時間確定的,比如01 20 09 24 3,這乙個職工編號 純屬杜撰,但也有實際作用,因為在像群體查...

演算法分析 雜湊表的大小為何是素數

3結論 最近看到了雜湊表的問題,網上也看到了一些解釋,不過並沒有講的很清楚,正好順便來 一下,如有不足之處,還請指出。最簡單的雜湊演算法可以用取模運算,模一般設定為素數,雖然很多書上講使用素數能夠減小衝突,但是並沒有講為什麼會減小衝突,下面通過幾個例項來說明一下。選取模為6,7 6為合數,有因子1,...

什麼是雜湊表

1 基本原理 我們使用乙個下標範圍比較大的陣列來儲存元素。可以設計乙個函式 雜湊函式,也叫做雜湊函式 使得每個元素的關鍵字都與乙個函式值 即陣列下標 相對應,於是用這個陣列單元來儲存這個元素 也可以簡單的理解為,按照關鍵字為每乙個元素 分類 然後將這個元素儲存在相應 類 所對應的地方。但是,不能夠保...