为什么我们使用散列进行搜索?在二叉搜索树上使用散列有什么优点?为什么我们在哪里使用哈希?
回答
维基百科解释说得好:
http://en.wikipedia.org/wiki/Hash_table#Features
摘要:插入一般都是缓慢的,读取比树木快得多。对于Java:任何时候当你有一些读/写很多的键/值对,并且一切都很容易写入RAM时,使用HashTable进行快速读取访问和难以置信的简单代码维护。
散列通常是一个常数时间的操作而二叉树具有对数时间复杂度。
因为散列不是基于要搜索的集合中,但关于该项目的项目的数量来计算集合的大小上有需要找到一个项目的时间没有关系。然而,大多数散列算法会产生冲突,从而增加了时间复杂度,因此很难获得完美的恒定时间查找。
用二叉树,你必须做的最多log2N比较可以发现该项目之前。
可是啊(log2(n))来确认项目不存在,而不是接近O(1)以进行有效的哈希查找。 – 2011-02-25 13:52:26
散列意味着使用一些函数或 算法将对象数据映射到一些代表性的整数值。这 所谓的散列码(或简称为散列) 可以被用来作为一种寻找地图中的 项目时缩小 了我们的搜索。
如果需要使用的算法的 快速用于查找信息 ,你需要那么哈希表是 最合适的算法使用,因为 它只是生成您 密钥对象的哈希和使用那要访问 的目标数据 - 它是O(1)。 其他是O(N)(大小为 的链接列表N - 您必须逐个遍历一个列表,平均为N/2个)和O(log N)(二叉树 - 您的 减半每次迭代 搜索空间 - 只有当树 的平衡,这取决于你的 实现,一个不平衡的树可以 具有性能显著恶化)。
哈希表是最好的用于搜索(=)如果具有较低的插入和均匀的时隙分布。时间复杂度为O(n + k) - 线性。
他们不是一个好主意,如果你想要做的比较操作(<,>)
...或有排序的集合。 – 2011-02-25 13:53:03
- 1. 我们可以把哈希表放在哈希表里面吗?
- 2. 我们在哪里以及为什么使用界面? C#
- 3. 为什么我们在HashTable中使用哈希代码而不是索引?
- 4. 为什么我们需要在哈希导航URL中使用爆炸标记?
- 5. 为什么我们需要在extjs中使用childEls - 在哪里使用?
- 6. 为什么我的哈希不是undef?
- 7. 什么是指导自动化,我们在哪里使用...?
- 8. 什么是PEGA工具,我们在哪里使用它?
- 9. 为什么Perl警告我使用伪哈希?
- 10. 我应该使用什么作为null的哈希码?
- 11. 在哪里可以使用分布式哈希表代替BitTorrent?
- 12. 为什么GetHashCode很重要,我们可以在哪里使用它?
- 13. 从哪里开始 - 密码哈希
- 14. 我们在哪里使用JAAS
- 15. 为什么我们不用哈希表的项目存储AVL树?
- 16. 我在哪里可以找到Windows 7 iso md5和sha1哈希?
- 17. Ruby使用什么哈希函数?
- 18. 我为什么要在VB.net中使用哈希表作为下拉列表
- 19. 为什么我们在这里使用接口实现?
- 20. 为什么我们在这里使用ephemeralSessionConfiguration?
- 21. 为什么我的两个MD5哈希方法产生不同的哈希?
- 22. 为什么要清除我的哈希,也清除哈希数组?
- 23. 它为什么包含“使用哪里”?
- 24. 当我在哪里不工作时使用date_add,为什么?
- 25. 我误解了哈希盐是什么?
- 26. 为什么Django会在我的网站上添加哈希?
- 27. 为什么base64 sha1/sha256哈希?
- 28. 为什么我们在jQuery中使用“({})”?
- 29. Perl中的哈希和哈希引用有什么区别?
- 30. 雄辩 - 结合用户::在哪里与哈希::检查
http://www.cs.auckland.ac.nz/~jmor159/PLDS210/hash_tables.html – 2011-02-25 13:29:26