不相交集森林的最佳案例表现,并证明算法的下限

时间:2011-03-17 23:22:09

标签: data-structures theory adt disjoint-sets

有一个关于今天到期的任务的问题,已经发布了解决方案,我不明白正确的答案。该问题涉及disjoint set forests形式的不相交集的最佳情况表现,它利用加权联合算法来提高性能(较小的树的根作为子节点连接到较大的根的根)两个树)但没有使用路径压缩算法。

问题是在n个单独节点上执行(n-1)联合运算的最佳情况表现和m> = n以任何顺序查找操作是否为Omega(m * logn),解决方案确认这是正确的,如下所示:

  

存在n-1个联合的序列S,其后是m> = n找到需要Omega(m log n)时间的。序列S以序列n-1 Unions开始,这些Unions构建具有深度Omega(log n)的树。然后它有m> = n Finds,每一个都是该树的最深叶子,所以每个都需要   (记录n)时间。

我的问题是,为什么证明下限是Omega(m * logn)是正确的?这不仅仅是一个孤立的例子,当绑定将是Omega(m * logn)时,它不能证明所有输入?我确信只需要在反驳声明时只显示一个反例,但需要证明所有可能输入的谓词以证明其正确性。

在我的回答中,我指出了一个事实,即你可以通过将两个单独的节点连接在一起开始。然后,您将另一个单例连接到该2节点树,其中3个节点共享同一个父节点,然后是另一个节点等,直到您将所有n个节点连接在一起。然后,您有一棵树,其中n-1个节点都指向同一个父节点,这实际上是您使用路径压缩时获得的结果。然后每个FIND在O(1)时间内执行。因此,(n-1)个联合的序列和m> = n Finds最终为Omega(n-1 + m)= Omega(n + m)= Omega(m)。

这是否意味着Omega(m * logn)绑定并不严格,因此声称不正确?我开始怀疑我是否完全不了解Big-O / Omega / Theta:/

编辑:修正问题以使其更清晰

EDIT2:这是original question呈现的方式和solution(我花了一点时间才意识到Gambarino和另一个人已经完全弥补了;意大利硬核教授)< / p>

1 个答案:

答案 0 :(得分:2)

似乎我确实误解了Big-Omega的概念。出于一些奇怪的原因,我认为Big-Omega等同于“函数的输入是什么导致了最佳性能”。实际上,对于读者而言,最令我不高兴的是,Big-Omega只是描述了函数的下限。而已。因此,最坏情况输入将具有下限和上限(big-O和omega),因此最佳输入也是如此。在这里有大欧米茄的情况下,我们所要做的就是想出一个场景,我们根据最坏情况的限制选择“最佳”输入,即有一些大小的输入n将采用算法至少 m * logn步骤。如果存在这样的输入,则下限很紧。