Wikipedia表示不进行路径压缩的按等级合并会产生的摊销时间复杂度,而通过等级压缩和路径压缩会产生的摊销时间复杂度(其中是Ackerman函数的反函数)。但是,它没有提到没有联合等级的路径压缩的运行时间,这就是我通常自己实现的时间。O (α (n ))α
如果没有路径压缩优化,那么使用路径压缩优化进行联合查找的摊还时间复杂度是多少?
Wikipedia表示不进行路径压缩的按等级合并会产生的摊销时间复杂度,而通过等级压缩和路径压缩会产生的摊销时间复杂度(其中是Ackerman函数的反函数)。但是,它没有提到没有联合等级的路径压缩的运行时间,这就是我通常自己实现的时间。O (α (n ))α
如果没有路径压缩优化,那么使用路径压缩优化进行联合查找的摊还时间复杂度是多少?
Answers:
Seidel和Sharir在2005年证明[1],在操作上使用带有任意链接的路径压缩的复杂度大约为。
参见[1],第3节(任意链接):令表示具有操作和元素的联合查找的运行时。他们证明了以下几点:
索赔3.1。对于任何整数,我们都有。
根据[1],设置得到
。
Tarjan和van Leeuwen在[2]第3节中使用更复杂的方法给出了相似的界限:
[2]的引理7。假设。在使用任何形式的压缩和幼稚链接实现的任何设置操作序列中,查找路径上的节点总数最多为通过减半和幼稚链接,查找路径上的节点总数最多为。
[2]的引理9。假设。在使用压缩和朴素链接实现的任何设置操作序列中,查找路径上的节点总数最多为。
[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页。
我不知道是什么摊销运行时间,但我可以举一个可能的原因,在某些情况下,可能要同时使用,而不仅仅是路径压缩:运行每工作时间的最坏情况是,如果您仅使用路径压缩,这比同时使用按等级和路径压缩的并集要大得多。
考虑恶意选择的 Union操作序列来生成深度为的树(它只是节点的顺序路径,其中每个节点都是前一个节点的子节点)。然后在最深的节点上执行单个“查找”操作需要时间。因此,每个操作的最坏情况运行时间为。Ñ - 1 Θ (Ñ )Θ (Ñ )
相比之下,采用按等级联合优化,每个操作的最坏情况运行时间为:没有任何一个操作会花费比更长的时间。对于许多应用程序而言,这无关紧要:仅所有操作的总运行时间(即摊销的运行时间)将很重要,而单个操作的最坏情况时间则无关紧要。但是,在某些情况下,每个操作的最坏情况时间可能很重要:例如,将每个操作的最坏情况时间减少为O (log n )O (log n ) 在交互式应用程序中,您要确保没有单个操作会导致长时间的延迟(例如,要确保没有单个操作会导致应用程序长时间冻结),这可能会很有用您想要确保始终满足实时保证的应用程序。