2014-10-19 22 views
0

所以當引入散列表或散列函數時,一個非常流行的例子就是John Smith和其他人的電話簿例子。爲什麼在這些散列表示例中John Smith和Sandra dee之間會發生衝突?

我的問題是爲什麼John Smith和Sandra Dee之間會發生碰撞?

望着這個例子

http://commons.wikimedia.org/wiki/File:Hash_table_5_0_1_1_1_1_0_SP.svg

我想(521 + 1234)mod256是152,那是遙遠(這是219)。我明白這是爲了展示一個碰撞,但爲什麼有一個呢?哈希函數裏面的公式是什麼?

編輯:還有另一個例子,他們都映射到2代替。

http://en.wikipedia.org/wiki/Hash_function#mediaviewer/File:Hash_table_4_1_1_0_0_1_0_LL.svg

回答

1

有在這些例子中沒有散列函數,它們只是人爲的例子。哈希完全組成。

生成您的first example的源代碼是here

如果你看的choose_keys_and_hashes裏面你會看到一行:

tb.key_hsh = [ 152, 001, 254, 154, 153 ] 

所以哈希只是存儲在數組中。接着是行:

if op.collisions : 
    # Make "Sandra Dee" collide with "John Smith": 
    tb.key_hsh[3] = tb.key_hsh[0] 

因此,「碰撞」是完全假的。第二個例子似乎是從nkeys = 4的同一個腳本生成的。

僞裝它比找到輸入要容易得多,並且提供了一個給你所需輸出的散列函數。

相關問題