请帮助解释维基百科中描述的生日效果:
生日攻击的工作原理如下:
- 选择任何消息m并计算h(m)。
- 更新清单L.检查h(m)是否在列表L中。
- 如果(h(m),m)已经在L中,则找到了冲突消息对。 否则保存对(h(m),m) 列出L并返回步骤1.
醇>从生日悖论中我们知道我们可以期待找到一个 匹配条目,执行后约 2 ^(n / 2)个哈希评估。
以上是否意味着通过上述整个循环的2 ^(n / 2)次迭代(即2 ^(n / 2)返回到步骤1),或者它是否意味着对各个项目的2 ^(n / 2)次比较已经在L?
答案 0 :(得分:4)
这意味着循环中的2 ^(n / 2)次迭代。但请注意,此处L
不是正常列表,而是将h(m)
映射到m
的哈希表。因此,每次迭代平均只需要一个常数(O(1))的比较,总共会有O(2 ^(n / 2))个比较。
如果L是正常数组或链表,则比较次数会大得多,因为您需要在每次迭代时搜索整个列表。但这对于实现此算法来说是一种糟糕的方式。