我实现哈希表,其中由26个字母字符表示的键和由数组表示的值与每个键相对应,该数组包含所有以相应字符开头的单词。因此,要在该哈希表中搜索特定单词,我应该在关键字中搜索该单词的第一个字符,一旦找到对应的数组中的搜索即可找到该特定单词。是用O(n ^ 2)作为关键字在键中搜索特定字符并在相应数组中搜索特定单词。还是需要O(log(n))?
答案 0 :(得分:1)
您没有发布任何代码,因此我将作一些假设。您说您有一个带有26个键的哈希表(预先知道),因此我假设这是由26个元素组成的数组的最佳实现,它可以通过键O(1)
对该数组进行访问。然后,您说每个元素都有一个数组,其中包含以该字母开头的所有元素。随着哈希函数的发展,它相当弱,但它肯定是有效的。
因此,当我们要搜索特定值时,我们需要根据第一个字母(取O(1)
)在相应的bin中查找,然后线性搜索该bin(O(n)
) 。因此,总体而言,复杂度为O(n)
,再次假设您的顶级哈希表数据结构得到了有效实现。
现在,由于您说的是“首字母”,因此我假设您正在对字符串进行操作,这为优化提供了可能性。字符串具有很好的属性,因为可以轻松地对它们进行排序。因此,如果确保您的垃圾箱始终按字典顺序排序,则可以使用二进制搜索而不是线性搜索来进行O(log n)
查找。请注意,此更改将您的插入功能从(摊销后的)O(1)
变为O(n)
,因此您应该考虑是要更频繁地插入还是搜索。