我正在審查我的數據結構期末考試,並且在過去一年的決賽中我遇到了一個問題。在過去的三個小時裏一直工作,除了通過試驗和錯誤之外,我仍然無法找出解決辦法。這裏的問題:查找散列表中的衝突
「假設你的哈希表的大小爲31,常數G也是31,和您使用以下哈希碼
int hash = 0;
int n = s.length();
for (int i = 0; i < n; i++)
hash = g * hash + s.charAt(i);
和使用分離鏈解決列出五個不同的名字,這些名字將散列到表格中的相同位置。「
我認爲必須有一些技巧,可能涉及模運算符,以解決這個問題,考慮到散列表的大小是31,這是常數g相同。對不起,如果我聽起來像這樣,但我不是要求代碼或任何東西,只是對問題的一些想法/提示。任何評論非常感謝。感謝
有趣!非常感謝您指出這一點。 –
很高興幫助... –
順便說一下,哈希的這種實現將Java留給了DoS攻擊!見http://www.ocert.org/advisories/ocert-2011-003.html,http://cryptanalysis.eu/blog/2011/12/28/effective-dos-attacks-against-web-application-plattforms -hashdos /或Google使用哈希映射進行DoS攻擊。 – yshavit