我正在存儲數字(範圍從1到小於100,000),然後以一個數字作爲參數進行調用,並且必須將其用作查找中的鍵。在過去,當獲取短char *字符串作爲查找鍵時,我使用了一個trie實現。我想知道我是否也應該使用一個數字,如果也許有一些更快的方式來研究/考慮/調查?查找數字最快的方法是什麼?
回答
這真的取決於你想要做什麼。
如果你有很多內存,你可以建立一個包含100,000個元素的數組,並且只需要在查看錶時使用該數字作爲索引。這可能是最快的方法(查找都是具有極低常數因子的O(1)),儘管它並不是最高的內存效率。如果內存稀少,一個標準的哈希表將是一個很好的折衷;您將獲得所有操作的預期O(1)運行時間。
如果您需要能夠執行「什麼數字最接近x?」形式的查詢,那麼您可能需要使用一個平衡二叉搜索樹來保存整數。這可以讓你在時間O(log n)中進行後繼和前任搜索和查找。如果您有興趣嘗試更復雜的數據結構,則可以使用van Emde Boas tree,它可以在時間O(log log U)中進行插入,刪除,查找,前置和後繼搜索,其中U是可能的最大值值。
希望這會有所幫助!
我會建議使用散列表。每個值都將放置在一個可以使用密鑰引用的獨特存儲區中。如果您的數據可以按照這種方式進行組織,這將是最快的查找方式。
事情是散列的代價是非平凡的,即使我使用超快速哈希像FNV,而通常與短的字符串或知道我的密鑰的屬性(他們是小數字)我可以利用小試避免緩存未命中的跳轉很少 –
散列表版本之一是直接尋址表,其中「散列」成本實際上是微不足道的。它可以正常工作,除非有多個對象具有相同的密鑰的可能性很高。 – 3yakuya
價值的關鍵是獨一無二的,直接尋址表是一樣的上述答案是的,我同意將是最快的方式 –
- 1. 在桶中查找數字的最快方法是什麼?
- 2. 找到n個數字的gcd最快的方法是什麼?
- 3. 檢查號碼重複數字的最快方法是什麼?
- 4. 使用R查找大量值的最快方法是什麼?
- 5. 尋找數組中n個最小數字的最快方法是什麼?
- 6. 使用位移查找整數平方根的最快方法是什麼?
- 7. Tcl:什麼是檢查空白字符串的最快方法
- 8. 查找數組之間匹配數目的最快方法是什麼?
- 9. 查找數字是否在範圍內的最快方法
- 10. 用LINQ查詢數據庫的最快方法是什麼?
- 11. 檢查兩個給定數字是否互反的最快方法是什麼?
- 12. 使用Selenium Webdriver查找元素的最快和最慢的方法是什麼?
- 13. ReadProcessMemory最快的方法是什麼?
- 14. 什麼是寫XML的最快方法
- 15. 什麼是在SQL Server CE中查找數據的最快方法Winforms
- 16. 什麼是查找排序範圍內元素數量的最快方法?
- 17. 排序這些n^2數字的最快方法是什麼?
- 18. 什麼是最快的方式來查找和刪除文件?
- 19. 什麼是檢查文件是否改變的最快方法?
- 20. 算法:什麼是檢查集合包含的最快方法?
- 21. 找到NSString中空格的最快方法是什麼?
- 22. 什麼是找到連續日期列表的最快方法
- 23. 什麼是找到時間差異最快的方法
- 24. 尋找瓶頸/優化Magento的最快方法是什麼?
- 25. 什麼是MySQL的最快的方法來檢查外國REFFERENCE
- 26. 做整數除法的最快方法是什麼?
- 27. 什麼是檢查mongodb文檔存在的最快方法?
- 28. 爲新行查詢MySQL表的最快方法是什麼?
- 29. 在Python中檢查重複項的最快方法是什麼?
- 30. 檢查SQL Server可用性的最快方法是什麼?
哦直線陣列不是一個壞主意!我其實知道100000是一個合理的上限 –
你必須考慮到,如果多個對象有一個共同的密鑰,碰撞解決的成本可能會相當大。 – 3yakuya
哦不,這是不是這種情況..對象的鑰匙是唯一的 –