【问题标题】:Best-case performance of disjoint set forests, and proving lower bounds of algorithms不相交集森林的最佳情况性能,并证明算法的下限
【发布时间】:2011-03-17 23:22:08
【问题描述】:

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

问题是在 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) 并不能证明 all 输入吗?我确信在反驳一个主张时只需要展示一个反例,但需要证明 所有 个可能输入的谓词以证明其正确性。

在我的回答中,我指出了这样一个事实,当您开始将两个单例节点连接在一起时,您可能会有一个案例。然后,您将另一个单例加入到该 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:/

编辑:把问题解决得更清楚一点

EDIT2:这是 original question 的呈现方式和 solution(我花了一点时间才意识到 Gambarino 和其他人完全是虚构的;铁杆意大利教授)

【问题讨论】:

    标签: data-structures theory adt disjoint-sets


    【解决方案1】:

    看来我确实误解了Big-Omega的概念。出于某种奇怪的原因,我假设 Big-Omega 等同于“导致最佳性能的函数的输入是什么”。实际上,对于读者来说很可能并不奇怪,但对我来说却是一个启示,Big-Omega 只是描述了一个函数的下限。就是这样。因此,最坏情况输入将具有下限和上限(big-O 和 omega),最佳输入也将如此。对于大欧米茄,我们所要做的就是想出一个场景,考虑到最坏情况的限制,我们选择“最佳”输入,即有 some 大小的输入n 将采取算法至少 m*logn 步。如果存在这样的输入,则下限是严格的。

    【讨论】:

    • 一种更简单的思考方式:这是“最坏中最坏的”情况,即导致算法完成最多工作的最坏输入。
    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2016-04-04
    相关资源
    最近更新 更多