2013-02-14 55 views
1

所以我已經讀了Hash functions上的維基百科頁面,因爲我目前正在玩一些。 在這個頁面和我讀過的其他來源都提到數據的分佈會影響散列函數。瞭解數據分佈對散列的影響

儘管有一些解釋,我仍然不清楚這些影響究竟是什麼,也許是爲什麼。所以我的問題:

  1. 只是爲了確保我已經得到了它的權利,當他們提到 分佈,這是每個單詞的輸入數據 集的頻率是多少?
  2. 輸入數據的分佈對散列 函數有什麼影響?特別感興趣的是,散列算法產生的輸出的速度和均勻性方面的散列性能。

編輯1: 我從一個更有活力的來源特別是維基百科英語語料庫VS數據的思維,Twitter的鳴叫例子。

回答

2

通常,您沒有儘可能多的輸入數據集,因爲您有可能的輸入。因此,分配更具有可行性,即具有某些特徵的特定輸入將被挑選出來。 (基本上與你所說的相同,但是對於每個單詞而不是一些計數n> 1)。如果您知道,輸入的第一位始終爲1,那麼數據不是均勻分佈的。

如果你的散列非常簡單,例如。通過僅將第一個字節作爲「散列」,那麼這種非均勻分佈將導致比預期更多的衝突。 (即使您預計會得到256個不同的值,也只能有128個值)

您可能通過名稱知道的大多數(密碼學)散列函數都足夠好,因此您不必關心這一點。對於密碼學來說,它甚至是一個明確的條件:只需查看哈希的差異,就不能判斷輸入中有多少位。這並不意味着這是不可能的。我可以隱約記得一篇論文,指出只有ascii字母和數字被散列時,md5的碰撞率會增加。我現在無法找到它,所以請小心使用這些信息 - 但即使我混淆了某些東西,這種情況也很容易實現。不管是md5還是其他算法,如果你確實有這樣的關係,那麼當然你的輸入數據集的分佈又是相關的。

+0

謝謝,這確實有幫助。當你提到數據的類型時,我更新了這個問題。 – zcourts 2013-02-14 19:20:12