繁体   English   中英

哈希表的复杂度搜索时间是O(n ^ 2)还是O(log n)?

[英]Is the complexity search time of hash table O(n^2) or O(log n)?

我实现了哈希表,其中由26个字母字符表示的键和由数组表示的值与每个键相对应,该数组包含所有以相应字符开头的单词。 因此,要在该哈希表中搜索特定单词,我应该在关键字中搜索该单词的第一个字符,一旦找到对应的数组中的搜索即可找到该特定单词。 是用O(n ^ 2)作为关键字在键中搜索特定字符并在相应数组中搜索特定单词。 还是需要O(log(n))?

您没有发布任何代码,因此我将作一些假设。 您说您有一个带有26个键的哈希表(预先知道),所以我假设这是由26个元素组成的数组的最佳实现,该数组通过键将O(1)访问到该数组中。 然后,您说每个元素都有一个数组,其中包含以该字母开头的所有元素。 随着散列函数的发展,它相当薄弱,但无疑是有效的。

因此,当我们要搜索特定值时,我们需要根据第一个字母(取O(1) )查找适当的bin,然后线性搜索该bin( O(n) )。 因此,总的来说,复杂度为O(n) ,再次假设您的顶级哈希表数据结构得到了有效实现。

现在,由于您说的是“首字母”,因此我假设您正在处理字符串,这为优化提供了可能性。 字符串具有很好的属性,因为可以轻松地对它们进行排序。 因此,如果确保您的垃圾箱始终按字典顺序排序,则可以使用二进制搜索而不是线性搜索来进行O(log n)查找。 请注意,此更改将插入函数从(摊销后的) O(1)变为O(n) ,因此您应该考虑是否要更频繁地插入或搜索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM