2015-10-05 60 views
0

給定一組完整的散列函數S,可以計算S中包含的整數,即如果整數不在S中,可以在不讀取散列表本身,如果一個整數是S,你能不告訴散列表嗎?假設我們有一個最小的完美散列函數。所以哈希表的大小是n,S的大小是m,n = m。我很抱歉,如果這是顯而易見的。給定了一個完美的散列函數,計算包含

+0

如果散列函數是「超過一組整數S」,那麼如何確定「i」不在'S'中?你會期望哈希例程爲「不在S」中拋出異常嗎?返回一個特殊的標誌值? –

+0

我想任何布爾返回值都可以工作,我只是不想讀哈希表。 – nexpert

回答

0

不,您不能,因爲完美的散列函數會將每個可能的整數映射到索引。

您可以做的是:對於每個密鑰,僅存儲一些附加信息,例如該密鑰的哈希碼的最後幾位。這樣,你可以說(以一個可配置的概率;它取決於你存儲多少數據)整數是否爲可能在集合中。這與bloom過濾器基本相同(您可以獲得誤報,但不會產生誤報)。

+0

我沒有考慮像bloom濾波器,在我特殊的GPU應用程序中bloom濾波器將適用於共享內存,所以這非常好。感謝您花時間回答,爲延誤道歉,從未收到通知。 – nexpert

相關問題