有一个关于今天到期的作业的问题已经发布了解决方案,我不明白正确的答案。该问题以不相交集合森林的形式处理不相交集合的最佳情况性能,该森林利用加权联合算法来提高性能(较小的树的根作为子节点连接到两棵树中较大的树的根) 但不使用路径压缩算法。
问题是在 n 个单例节点上执行 (n-1) 联合操作和 m>=n 以任何顺序查找操作的最佳情况是否是 Omega(m*logn) 解决方案确认是正确的,如下所示:
有一个由 n-1 个联合组成的序列 S,后跟 m >= n 的查找需要 Omega(m log n) 时间。序列 S 以序列 n-1 Unions 开始,该序列构建一棵深度为 Omega(log n) 的树。然后它有 m>=n 查找,每个查找该树的最深叶子,因此每个查找都需要 (log n) 时间。
我的问题是,为什么这证明下限是 Omega(m*logn) 是正确的?这不只是一个孤立的例子,当界限是 Omega(m*logn) 时,它不能证明所有输入的情况?我确信在反驳一个主张时只需要展示一个反例,但需要为所有可能的输入证明一个谓词以证明其正确性。
在我的回答中,我指出了这样一个事实,即当您开始将两个单例节点连接在一起时,您可能会有一个案例。然后,您将另一个单例加入到该 2 节点树中,其中 3 个节点共享同一个父节点,然后是另一个节点,等等,直到您将所有 n 个节点连接在一起。然后,您有一个树,其中 n-1 个节点都指向同一个父节点,这本质上是您使用路径压缩获得的结果。然后每个 FIND 在 O(1) 时间内执行。因此,一系列 (n-1) 个并集和 m>=n 发现最终成为 Omega(n-1+m) = Omega(n+m) = Omega(m)。
这是否意味着 Omega(m*logn) 界限不严格,因此主张不正确?我开始怀疑我是否不完全了解 Big-O/Omega/Theta:/
编辑:将问题解决得更清楚一点