Algorithm 求散列函数的分摊复杂度

Algorithm 求散列函数的分摊复杂度,algorithm,hash,amortized-analysis,Algorithm,Hash,Amortized Analysis,我在准备期末考试时遇到了这个问题。 对于1a,我认为它的O(1)表示摊销复杂度,因为它需要x mod N,这是足够稀疏的,并且在失败时进行线性探测 然而,我不确定如何确切地陈述或证明这一点 对于1b,它将散列到同一个位置,因此每次插入时它将线性地探测更多,但我也不确定如何从中派生运行时 [编辑,我最初的分析是针对1a)h(x)=x mod N,N

我在准备期末考试时遇到了这个问题。
对于1a,我认为它的O(1)表示摊销复杂度,因为它需要x mod N,这是足够稀疏的,并且在失败时进行线性探测 然而,我不确定如何确切地陈述或证明这一点


对于1b,它将散列到同一个位置,因此每次插入时它将线性地探测更多,但我也不确定如何从中派生运行时

[编辑,我最初的分析是针对1a)h(x)=x mod N,N
对于1b),哈希表退化为链表。插入在大小上是线性的,有n个插入,因此总共有(n+1)*n/2个操作。也就是说,每次插入(n+1)/2。

1a,除了最后一次(n将与每个值冲突,即n将首先与0冲突,然后将值增加1,它将与1冲突,依此类推),总成本将为1+1+…+1+n=(n-1倍)+n=2n-1,摊销成本将为(2n-1)/n,它是O(1) 用大O表示法


1b,第i次插入将有(i-1)个冲突,加上插入操作,第i次操作的成本将是i。因此,总成本将是1+2+…+n-2+n-1+n=(n+1)*n/2,您插入了n次,摊销成本将是(n+1)/2.

1a.这是不正确的,因为N for将与0冲突,然后将值增加1,它将与1冲突,依此类推。它将总共冲突(N-1)次。啊,drats,开放寻址(又称闭合哈希)。Meh.你当然是对的。不过你应该澄清1a)(因为线性解析链来自封闭散列,而开放散列则是常数)。@mornfall开放寻址与封闭寻址不同吗?我认为它们是同义词:)开放寻址与封闭散列相同。闭合寻址与开放哈希相同。开放寻址意味着每个存储桶有一个密钥,冲突根据探测序列存储在其他位置。闭合寻址指的是链表或其他在单个存储桶中存储多个键的方式。