哪一個在散列表或排序列表中找到一個項目更快?哪一個在散列表或排序列表中找到一個項目更快?
回答
算法的複雜性是一件好事,知道哈希表已知爲0(1),而排序的向量(在你的情況下,我想最好是使用有序數組而不是列表)將提供0(日誌n)訪問時間。
但是你應該知道,複雜符號爲你提供了訪問無限時間的訪問時間。這意味着如果您知道您的數據將繼續增長,複雜表示法會爲您提供一些關於要選擇的算法的提示。
當你知道你的數據將保持一個相當低的長度時:例如你的數組/哈希表中只有少數條目,你必須使用你的手錶和度量。所以有一個測試。
例如,在另一個問題:排序數組。對於幾個條目氣泡排序,而O(N^2)可能比..快速排序,而它是(N日誌)..
此外,相應於其他答案,並根據您的項目,你必須嘗試爲你的散列表實例找到最好的散列函數。否則,它可能會導致在你的哈希表中查找顯着的糟糕性能(正如Hank Gay的答案中所指出的那樣)。
編輯:看看這篇文章瞭解the meaning of Big O notation。
除非哈希算法是極其慢(和/或不好),哈希表將會更快。
更新:正如評論者指出的那樣,您可能也會因爲太多的碰撞而導致性能下降,這並不是因爲您的哈希算法不好,而僅僅是因爲哈希表不夠大。大多數庫實現(至少在高級語言中)會在後臺自動增加散列表 - 這會導致插入方式的性能低於預期,從而觸發增長 - 但是如果你自己推出,那肯定是某種東西考慮。
假設「排序列表」的意思是「隨機訪問,排序後的集合」。列表的屬性只能遍歷元素,這會導致O(N)的複雜性。
查找排序可索引集合中元素的最快方法是通過N元搜索O(logN),而沒有colliss的散列表的查找複雜度爲O(1)。
在某些情況下,它取決於集合的大小(以及較小程度的實現細節)。如果你的名單很小,可能會有5-10個項目,我猜這個名單會更快。否則xtofl就是對的。
對於包含10個以上項目的列表,HashTable會更有效。如果列表中的項目少於10個,則由於哈希算法的開銷將更大。
如果您需要快速字典,但還需要以有序方式保存項目,請使用OrderedDictionary。 (.Net 2.0起)
中的get
操作是O(log n)
,而相同的操作e HashTable是O(1)
。所以,通常,HashTable
會快得多。但是,這取決於許多因素:
- 列表的大小
- 散列算法的性能
- 碰撞次數/散列算法的質量
這取決於完全取決於您存儲的數據量。
假設你有足夠的內存來拋出它(所以哈希表足夠大),哈希表將定位目標數據的時間固定,但需要計算哈希將添加一些(也固定)開銷。
搜索已排序的列表將不會產生散列開銷,但執行實際定位目標數據所需的時間將隨着列表增長而增加。
因此,一般來說,對於小數據集,排序列表通常會更快。 (對於頻繁更改和/或不常搜索的極小數據集,排序列表可能會更快,因爲它避免了進行排序的開銷。)隨着數據集變大,列表的增長搜索時間掩蓋了哈希的固定開銷,並且哈希表變得更快。
斷點的位置會因特定的散列表和排序列表搜索實現而異。在許多通常大小的數據集上運行測試和基準性能,以查看哪些在您的特定情況下實際執行得更好。 (或者,如果代碼已經「足夠快地運行」,則不要,只要使用你更熟悉的那個,不用擔心優化不需要優化的東西)。
- 1. 列表查找,Hashset或Linq哪一個更好在列表中
- 2. 刪除項目從一個排序列表到另一個
- 3. 查找列表中的項目存在於另一個列表
- 4. 從一個排序列表拖動到另一個列表4
- 5. 快速在榛樹列表中找到一個條目
- 6. 將項目從一個列表移動到另一個列表
- 7. 將項目從一個列表移動到另一個列表
- 8. Python查找另一個列表中的列表中的項目
- 9. 從另一個列表中查找列表中排名最高的項目
- 10. 在sencha觸摸列表中禁用一個項目的排序
- 11. 哪一個是關鍵字,哪個是關鍵字散列表的項目?
- 12. Python從另一個列表中排序一個列表
- 13. 哪一個是更快的字符串[]或列表<string>
- 14. 附加或插入一個項目列表的列表在python
- 15. 通過另一個散列表更新散列表?
- 16. 按另一個列表的順序對一個列表排序
- 17. 排序一個json列表?
- 18. 如何將列表項目從一個列表移動到另一個列表?
- 19. 在任一個散列或散列
- 20. 排序一個列表另一個
- 21. 找到另一個項目在python中最接近的列表中哪兩個元素的最快方法
- 22. 在另一個列表中查找所有列出的項目
- 23. PseudoCode for Python:在列表中找到一個項目
- 24. 使用已知索引在列表中找到一個項目
- 25. Python:在列表中找到一個項目
- 26. 列表給另一個列表,在列表中每個項目給另一個列表,需要在Excel
- 27. 檢索其中一個項目列表中存在項目的項目列表
- 28. 如何對列表進行排序(使用散列表查找項目)
- 29. 排序三個列表成一個單一的列表中給出,每個列表進行排序
- 30. UWP:顯示列表視圖項目排列在一個圓圈
此外,應該足夠大。 – 2009-05-18 09:52:19
是的!非常重要的 - 如果你的散列表由於散列算法不好或空間不足而導致很多衝突,那麼它的性能會明顯下降! – sanbikinoraion 2009-05-18 09:57:17