【问题标题】:understanding Universal hashing chapter on CLRS了解 CLRS 上的通用哈希章节
【发布时间】:2011-12-18 21:32:35
【问题描述】:

您好,我正在阅读关于 CLRS 上的通用散列的章节。

在第 234 页

推论 11.4

通过链接使用通用散列和冲突解决 具有 m 个插槽的表,需要预期时间 Theta(n) 来处理任何 包含 O(m) 的 n 个 INSERT、SEARCH 和 DELETE 操作序列 插入操作。

我有点明白,但我很难理解这个英文句子。结尾“包含O(m)次INSERT操作”是什么意思?

这是否意味着已经执行了 n = O(m) 插入。然后,....我不知道。我无法解析这句话。 1st INSERT 和 2nd INSERT 有什么区别?

我想听听你的意见。

谢谢!

【问题讨论】:

    标签: algorithm hash clrs universal-hashing


    【解决方案1】:

    我认为n个插入、搜索和删除操作只有一个序列,但是参数m用于限制允许在这n个操作中放入的插入操作的数量。假设您有一个大小为 10 的表,因此 m=10,然后设置 n=1 000 000,前 500 000 次操作插入,接下来的 500 000 次搜索不在表中的项目。那么性能会很差,因为该表的链大约有 100 000 个项目。

    所以如果你有一个有m个槽的表,这个定理只允许你大约m个插入操作,这样表就永远不会超过大约m个项目,链也不会变得太长,所有的操作都是几乎 O(1) - 在上面的示例中,您只能进行大约 10 个插入操作,因此其他 999 990 个操作必须是搜索或删除。

    【讨论】:

    • 非常感谢!我想这对我来说更有意义。
    【解决方案2】:

    说“O(m)”INSERT操作表示序列中有C*m+BINSERT操作,其中m是槽数。

    你在一张有 m 个槽的表上有一系列 n 次操作。 INSERT 操作的数量与槽的数量成正比(无论序列的长度如何),而不是与操作的数量成正比。

    换句话说,只有当插入次数不是 n 的某个函数(例如,序列中的一半操作是插入)而是槽数的线性函数时,预期时间才是 theta(n) ,并且它不会随着序列的长度而增长。

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 2011-06-07
      • 2018-03-31
      • 2014-12-02
      • 2023-03-18
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多