无等级的联合查找与路径压缩的复杂性


10

Wikipedia表示不进行路径压缩的按等级合并会产生的摊销时间复杂度,而通过等级压缩和路径压缩会产生的摊销时间复杂度(其中是Ackerman函数的反函数)。但是,它没有提到没有联合等级的路径压缩的运行时间,这就是我通常自己实现的时间。O α n αO(logn)O(α(n))α

如果没有路径压缩优化,那么使用路径压缩优化进行联合查找的摊还时间复杂度是多少?


5
注意是Ackerman函数的逆函数,而不是。此处的“逆”是指作为函数的逆,而不是倒数:即,如果,,而不是。1 / A n n f n = A n n α n = f - 1n 1 / f n α(n)1/A(n,n))f(n)=A(n,n)α(n)=f1(n)1/f(n)
DW

我了解这是一个相对较旧的问题,但是请参阅我的答案和相关文章:epubs.siam.org/doi/abs/10.1137/S0097539703439088。复制边界时,我可能会错过一两个细节。在这种情况下,请提出建议:-)
BearAqua

Answers:


4

Seidel和Sharir在2005年证明[1],在操作上使用带有任意链接的路径压缩的复杂度大约为。mO((m+n)log(n))

参见[1],第3节(任意链接):令表示具有操作和元素的联合查找的运行时。他们证明了以下几点:f(m,n)mn

索赔3.1。对于任何整数,我们都有。k>1f(m,n)(m+(k1)n)logk(n)

根据[1],设置得到 。k=m/n+1

f(m,n)(2m+n)logm/n+1n

Tarjan和van Leeuwen在[2]第3节中使用更复杂的方法给出了相似的界限:

[2]的引理7。假设。在使用任何形式的压缩和幼稚链接实现的任何设置操作序列中,查找路径上的节点总数最多为通过减半和幼稚链接,查找路径上的节点总数最多为。mn(4m+n)log1+m/nn(8m+2n)log1+m/n(n)

[2]的引理9。假设。在使用压缩和朴素链接实现的任何设置操作序列中,查找路径上的节点总数最多为。m<nn+2mlogn+m

[1]:R. Seidel和M. Sharir。自上而下的路径压缩分析。Siam J.Computer,2005年,第1期。34,第3号,第515-525页。

[2]:R. Tarjan和J. van Leeuwen。集并集算法的最坏情况分析。J. ACM,第 1984年4月31日,第2期,第245-281页。


2

我不知道是什么摊销运行时间,但我可以举一个可能的原因,在某些情况下,可能要同时使用,而不仅仅是路径压缩:运行每工作时间的最坏情况是,如果您仅使用路径压缩,这比同时使用按等级和路径压缩的并集要大得多。Θ(n)

考虑恶意选择的 Union操作序列来生成深度为的树(它只是节点的顺序路径,其中每个节点都是前一个节点的子节点)。然后在最深的节点上执行单个“查找”操作需要时间。因此,每个操作的最坏情况运行时间为。Ñ - 1 Θ Ñ Θ Ñ nn1Θ(n)Θ(n)

相比之下,采用按等级联合优化,每个操作的最坏情况运行时间为:没有任何一个操作会花费比更长的时间。对于许多应用程序而言,这无关紧要:仅所有操作的总运行时间(即摊销的运行时间)将很重要,而单个操作的最坏情况时间则无关紧要。但是,在某些情况下,每个操作的最坏情况时间可能很重要:例如,将每个操作的最坏情况时间减少为O log n O log n O(logn)O(logn)O(logn) 在交互式应用程序中,您要确保没有单个操作会导致长时间的延迟(例如,要确保没有单个操作会导致应用程序长时间冻结),这可能会很有用您想要确保始终满足实时保证的应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.