【问题标题】: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) ,并且它不会随着序列的长度而增长。