具有字符串键的HashMap是否真的比Trie的时间复杂度更低?

艾哈迈德·费西(Ahmed Fathy)

假设我要存储字符串字典,并且想知道某个字符串是否存在。我可以使用Trie或HashMap。HashMap的时间复杂度为O(1)的可能性很高,而在这种情况下,Trie的时间复杂度为O(k),其中k是字符串的长度。

现在我的问题是:计算字符串的哈希值是否不具有O(k)的时间复杂度,从而使HashMap的复杂度相同?如果没有,为什么?

我看到的方式是,在Trie中查找字符串的时间复杂度要比HashMap低,因为HashMap(除了计算哈希值之外)还可能会发生冲突。我想念什么吗?

更新:构建字典时,您将使用哪种数据结构来优化速度?

凯达尔·马斯瓦德(Kedar Mhaswade)

除了实现Trie的复杂性之外,在hashCode确定哈希表中存储桶方法的实现中还进行了某些优化对于java.lang.String,一个不可变的类,这是JDK-8的作用:

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
} 

因此,它被缓存了(并且是线程安全的)。一旦计算完,字符串的哈希码就不需要重新计算了。这使您不必花O(k)时间在哈希表(或哈希集,哈希图)上。

在实施字典时,我认为尝试会发光,使您对可能的部分匹配而不是精确匹配更感兴趣。一般来说,在完全匹配的情况下,基于哈希的解决方案效果最佳。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有字符串键的HashMap是否真的比Trie的时间复杂度更低?

来自分类Dev

为什么Javascript === / ==字符串相等有时具有恒定的时间复杂度,有时却具有线性的时间复杂度?

来自分类Dev

字符串切片的时间复杂度

来自分类Dev

反转C ++字符串的时间复杂度

来自分类Dev

了解生成字符串的算法的时间复杂度

来自分类Dev

字符串分割图组合的时间复杂度

来自分类Dev

字符串置换算法的时间复杂度

来自分类Dev

改善给定字符串所有排列的时间复杂度

来自分类Dev

带有for in的python字符串迭代的时间复杂度

来自分类Dev

具有空间复杂度O(1)的字符串到char数组

来自分类Dev

在无序字符串集中查找字符串的时间复杂度

来自分类Dev

程序的时间复杂度,确定两个字符串是否彼此置换

来自分类Dev

是否存在具有线性时间复杂度和O(1)辅助空间复杂度的排序算法?

来自分类Dev

Python字典,以复杂度恒定的方式返回dict中的所有键包含某些字符串

来自分类Dev

与列表相比,“ in”运算符在字符串上的时间复杂度是否有所不同?

来自分类Dev

将字符串分解为有效单词的时间复杂度是多少?

来自分类Dev

具有O(log(N))时间复杂度运算的HashMap

来自分类Dev

是否可以在没有分配的情况下实现线性(或接近)复杂度的串联字符串?

来自分类Dev

是否可以在没有分配的情况下实现线性(或接近)复杂度的串联字符串?

来自分类Dev

没有嵌套循环,是否有可能具有二次时间复杂度?

来自分类Dev

这两个嵌套循环真的具有相同的二次时间复杂度吗?

来自分类Dev

Python字符串'in'运算符实现算法和时间复杂度

来自分类Dev

反转Python中的字符串和回文时间复杂度

来自分类Dev

比较两个字符串的时间复杂度

来自分类Dev

什么是如果很长的字符串作为钥匙,快译通搜索的时间复杂度?

来自分类Dev

在C ++中修改字符串的BigO时间复杂度是多少?

来自分类Dev

不可变的字符串Python?编制索引时的时间复杂度?

来自分类Dev

将字符串插入C ++ Stl集的时间复杂度

来自分类Dev

将 int 转换为字符串可降低计算其长度的时间复杂度

Related 相关文章

  1. 1

    具有字符串键的HashMap是否真的比Trie的时间复杂度更低?

  2. 2

    为什么Javascript === / ==字符串相等有时具有恒定的时间复杂度,有时却具有线性的时间复杂度?

  3. 3

    字符串切片的时间复杂度

  4. 4

    反转C ++字符串的时间复杂度

  5. 5

    了解生成字符串的算法的时间复杂度

  6. 6

    字符串分割图组合的时间复杂度

  7. 7

    字符串置换算法的时间复杂度

  8. 8

    改善给定字符串所有排列的时间复杂度

  9. 9

    带有for in的python字符串迭代的时间复杂度

  10. 10

    具有空间复杂度O(1)的字符串到char数组

  11. 11

    在无序字符串集中查找字符串的时间复杂度

  12. 12

    程序的时间复杂度,确定两个字符串是否彼此置换

  13. 13

    是否存在具有线性时间复杂度和O(1)辅助空间复杂度的排序算法?

  14. 14

    Python字典,以复杂度恒定的方式返回dict中的所有键包含某些字符串

  15. 15

    与列表相比,“ in”运算符在字符串上的时间复杂度是否有所不同?

  16. 16

    将字符串分解为有效单词的时间复杂度是多少?

  17. 17

    具有O(log(N))时间复杂度运算的HashMap

  18. 18

    是否可以在没有分配的情况下实现线性(或接近)复杂度的串联字符串?

  19. 19

    是否可以在没有分配的情况下实现线性(或接近)复杂度的串联字符串?

  20. 20

    没有嵌套循环,是否有可能具有二次时间复杂度?

  21. 21

    这两个嵌套循环真的具有相同的二次时间复杂度吗?

  22. 22

    Python字符串'in'运算符实现算法和时间复杂度

  23. 23

    反转Python中的字符串和回文时间复杂度

  24. 24

    比较两个字符串的时间复杂度

  25. 25

    什么是如果很长的字符串作为钥匙,快译通搜索的时间复杂度?

  26. 26

    在C ++中修改字符串的BigO时间复杂度是多少?

  27. 27

    不可变的字符串Python?编制索引时的时间复杂度?

  28. 28

    将字符串插入C ++ Stl集的时间复杂度

  29. 29

    将 int 转换为字符串可降低计算其长度的时间复杂度

热门标签

归档