我们为什么以及在哪里使用哈希?

时间:2011-02-25 13:25:13

标签: java

为什么我们使用哈希进行搜索?在二叉搜索树上使用散列有什么好处?

4 个答案:

答案 0 :(得分:5)

散列通常是一个恒定的时间操作,而二叉树具有对数时间复杂度。

因为哈希的计算不是基于集合中的项目数,而是基于要搜索的项目,所以集合的大小与查找项目所花费的时间无关。然而,大多数散列算法会产生冲突,从而增加了时间复杂度,因此不太可能获得完美的恒定时间查找。

使用二叉树,您必须在找到项目之前进行log2N比较。

答案 1 :(得分:2)

维基百科解释得很好:

http://en.wikipedia.org/wiki/Hash_table#Features

总结:插入通常很慢,读取速度比树快。

对于Java:只要你有一些键/值对,你经常阅读并且不经常写,而且一切都很容易适合RAM,使用HashTable进行快速读取访问和令人难以置信的代码维护。

答案 2 :(得分:0)

  

散列意味着使用某些功能或   将对象数据映射到某些算法的算法   代表性整数值。这个   所谓的哈希码(或简称哈希)   然后可以用来缩小范围   在寻找时我们的搜索   地图中的项目。

     

如果需要使用的算法   快速查找信息   你需要的是HashTable   最合适的算法,如   它只是生成你的哈希   密钥对象并使用它来访问   目标数据 - 它是O(1)。该   其他是O(N)(大小的链接列表   N - 你必须遍历   一次列出一个,平均为N / 2   时间)和O(log N)(二叉树 - 你   每个搜索空间减半   迭代 - 仅当树是   平衡,所以这取决于你   实现,不平衡的树可以   表现明显更糟糕。)

答案 3 :(得分:0)

如果您有较低的插入次数和统一的插槽分布,则哈希表最适合搜索(=)。时间复杂度为O(n + k) - 线性。

如果您想进行比较操作(<,>)

,这不是一个好主意