【问题标题】:AVL vs Hashtable with ChainingAVL 与链式哈希表
【发布时间】:2014-04-06 19:53:31
【问题描述】:

我知道 avl 树的最佳情况和最坏情况是登录以进行查找、插入和删除。但是,对于带有链接的哈希表,最好的情况和最坏的情况是什么?如果给定两个神秘的数据结构,我将如何区分这两者?

【问题讨论】:

    标签: hashtable avl-tree


    【解决方案1】:

    对于带有链接的哈希表,最好和最坏的情况是什么?

    查找、插入、删除操作的最佳时间是 O(1) 或常数时间。最糟糕的时候,

    • 插入:O(1),假设链接是通过添加到链的末尾来完成的
    • 删除:O(k),其中 k = 最长链上的元素数。 k == n 当散列函数很差并且所有 n 值映射到同一个条目并被链接时。因此,绝对最坏的情况是 O(n)。
    • 查找:O(n),使用与删除相同的推理

    如果给定两个神秘的数据结构,我将如何区分这两者?

    只是一个想法:

    • 在两个结构中插入数据并绘制插入操作的插入时间与 n 的关系。选择数据以使模拟成为 AVL 树的最坏情况(即,如果是整数,则按 1000000、99999、999998... 的顺序插入)但不是哈希表。
    • 注意正在生成的绘图。 AVL 树从一开始就会有插入时间 log​​(n),而这对于哈希表来说应该是相当恒定的。大约第 1000 个插入 ALV 树将花费 10 倍的时间进行插入(假设发生最坏情况的插入)。但是对于哈希表,插入时间应该与以前几乎相同。假设哈希表有足够的容量,并且哈希函数还不够傻,不会与诸如“1000000、99999、999998...”之类的顺序数据发生冲突
    • 如果仍然不确定,则通过插入轰炸这两个结构,希望填满哈希表并强制它开始链接。多次插入后,注意图。 AVL 仍会保持 log(n) 曲线,但 hashtable 会显示不同的曲线,例如:常数时间具有较高的常数值。

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 2011-02-03
      • 2020-09-03
      • 2013-05-14
      • 2015-12-31
      • 2015-07-05
      • 1970-01-01
      • 2012-02-08
      • 2015-04-11
      相关资源
      最近更新 更多