如果我有50 000個,並有發言權,10個可用的哈希表。 如果不使用LinkedLists以便數組永遠不會溢出,那麼爲每個索引選擇適當的桶數組大小的最佳方式是什麼?多餘的30%是否合適?哈希表鬥陣
哈希表鬥陣
回答
一些語言支持陣列(無需聲明數組的大小)動態大小。數據決定動態數組的大小。並且需要大小的語言也支持動態數組。
我不知道你在哪裏得到的「大多是」從。當然,在我使用的語言(Java,C#,C,C++)中,數組在創建後的大小是固定的。當一種語言支持通常涉及複製的「動態大小調整」時,所以仍然值得嘗試獲得適當的大小。 – 2011-05-10 10:30:13
在obj-c數組是動態的,我也使用java,c#,c和C++,但沒有使用動態數組的概念,但我想我讀了大學水平的c和C++。當然,我在obj-c工作,這就是爲什麼我給了這種類型的答案。我已經從你的書看到C#,所以我不能說別的任何事情,所以我要刪除主要單詞。 – Ishu 2011-05-10 10:43:59
肯定更好:) – 2011-05-10 10:51:01
如果您使用的是固定大小的數組爲你的水桶,再有就是小於50,000沒有桶的大小,可以保證永遠不會溢出,除非你對鍵在50000分佈的附加信息(例如,如果你知道他們是整數1 ... 50,000,那麼它將是微不足道的)。
但一般你不希望依靠大水桶,因爲這是O(n)搜索桶。相反,使用可變大小的表和可變大小的桶是更好的主意。桶可以簡單地是數組,每次填滿時您的大小就會增加一倍。類似地,哈希表的大小每增加90%就可以加倍。這是一種標準類型的方法。由以前的海報提到
爲,無論是通過數組或鏈表列表的大多數實現你當列表已滿自動重新分配存儲。
如果您知道密鑰先驗,您可以計算minimal perfect hash。因此,如果你知道密鑰並且可以定製哈希函數,那麼一個桶的大小就足夠了。
如果您事先不知道密鑰 - 或者知道密鑰,但不能改變哈希函數 - 那麼攻擊者可以選擇最差情況下的一組密鑰(即密鑰所有哈希到同一個桶)。爲了保證桶不溢出,你需要一個桶大小等於桶的數量。如果您願意容忍溢出的機會,則可以進行更復雜的分析來選擇涵蓋大多數情況的桶大小。
- 1. Powershell陣列或哈希表?
- 2. 哈希表和桶陣列
- 3. Rails哈希陣列哈希如何?
- 4. 哈希散列與陣內哈希
- 5. 在哈希陣列
- 6. 哈希陣列(autovivification ??)
- 7. 哈希表vs哈希列表與哈希樹?
- 8. Powershell陣列與單哈希表
- 9. 循環通過陣列從哈希表
- 10. 哈希表在陣列....和JSON
- 11. 如何比較哈希表的屬性與Powershell中的哈希表陣列
- 12. 比較哈希陣列陣列和outputing哈希值的新陣列
- 13. PHP哈希鍵陣列
- 14. 遍歷軌哈希陣列
- 15. Perl轉儲哈希陣列
- 16. 在哈希存儲陣列
- 17. 哈希轉換陣列JSON
- 18. 在Perl中哈希陣列
- 19. Perl哈希陣列大小
- 20. 哈希操作陣列
- 21. Rails哈希/陣列關係
- 22. 陣列哈希散列
- 23. JavaScript中的哈希陣列
- 24. 與許多陣列哈希
- 25. 哈希表中的搜索哈希
- 26. 哈希打印表哈希perl
- 27. 哈希表addFunction
- 28. Python哈希表
- 29. 按陣列鍵排列哈希陣列
- 30. Perl哈希哈希
一個就夠了我想,最好的也 – 2011-05-10 10:28:05