2009-07-15 146 views
5

所以我正在閱讀哈希表,哈希函數等。我很想知道維基百科關於「動態完美散列」如何使用第二個散列表作爲數據結構來存儲特定存儲區中的多個值的信息。動態完美哈希和通用哈希函數 - 解釋請嗎?

但是在那裏我迷失了方向,是關於如何選擇通用散列函數來執行第二個散列表的散列。任何人都可以解釋這個通用哈希函數是如何從存儲在桶中的值中確定的?我依稀遵循維基百科的「通用散列函數」頁面中的推理和邏輯,但我一直在努力擁有任何直覺。特別是,這些功能如何保證不發生衝突?或者至少,如果他們被處置掉了,而且如果發現了衝突,就會產生一個新的衝突,那麼我們怎麼知道這可以在現實的時間內完成呢?

瓢蟲書說明請?

回答

4

完美的散列表示即使在最壞的情況下,讀取訪問也需要一定的時間。

對於插入密鑰,沒有最壞情況下的保證,時間範圍只有平均值(或者可能是分期償還)。

爲了使插入足夠快,第二級散列表被選擇爲非常大的密鑰數量(k ),足夠大以至於碰撞變得不太可能。這不是一個問題w.r.t.大小,因爲第一級哈希均勻分配鍵,因此平均二級哈希表仍然很小。

第二級表的哈希函數是從一組參數化哈希函數中隨機選擇的。

+0

謝謝 - 有助於知道插入性能沒有「保證」。這是你最後一次感受,涉及到我試圖理解的東西 - 參數化哈希函數的自動/隨機選擇過程 - 你知道一個例子/你能解釋一個維基百科嗎? – Ray 2009-07-16 08:13:39