【问题标题】:What is meant when it's said that the union-find data structure will be "linear in the real world?"当说 union-find 数据结构将“在现实世界中是线性的”时,这是什么意思?
【发布时间】:2014-10-01 11:00:44
【问题描述】:

我正在承接algorithms course on Coursera,有一段作者提到了以下内容

带路径压缩的加权快速联合的运行时间为 在现实世界中是线性的,实际上可以改进为 甚至还有一个更有趣的函数,称为 Ackermann 函数,它 比lg增长还要慢。还有一点关于这个 这似乎是如此接近于线性,即时间与 N 成正比,而不是时间与 N 倍成正比 N中缓慢增长的函数。是否有一个简单的算法是 线性?人们为此寻找了很长时间,实际上它 事实证明,我们可以证明不存在这样的情况 算法。 (强调)

(你可以找到整个transcript here

在包括Wikipedia在内的所有其他来源中,当时间与输入大小成比例增加时,使用“线性”,而在带有路径压缩的加权快速联合中,情况肯定不是这样。

这里的“现实世界中的线性”到底是什么意思?

【问题讨论】:

  • “现实世界中的线性”是对 big-O 表示法的实际动机的观察,而不是关于 union-find 复杂性的正式声明。

标签: algorithm data-structures time-complexity union-find


【解决方案1】:

在路径压缩和秩并集的联合查找数据结构上执行 m 次操作的运行时间为 O(mα(m)),其中 α(m) 是反阿克曼函数。这个函数的增长非常缓慢,以至于你无法用科学计数法表示输出为 6 的输入。换句话说,对于适合宇宙的任何可能的 m 值(或者甚至具有大约 2宇宙中的 num 个原子),我们有 α(m) ≤ 5。因此,对于任何“合理”的输入,m 次操作的成本都是 O(m · 6) = O(m),这是线性的。

当然,运行时间不是线性的,因为 α(m) 确实会增长,只是非常非常缓慢。但是,将运行时间近似为 O(m) 通常很好,因为您不可能注意到函数的运行时间偏离简单的线性函数。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    以下是成绩单中的部分内容:

    证明了什么 Hopcroft Ulman 和 Tarjan 认为,如果 你有 N 个对象,M 的任意序列 union 和 find 操作会触及 数组最多 a c (N + M lg star N) 次。 现在,lg N 是一个有趣的函数......

    还有一点 大概是这样的 好像是这样的 如此接近线性,是时候了 与 N 成正比,而不是与时间成正比 与缓慢增长的 N 倍成正比 N中的函数。

    (结束引用)

    您指出单个操作的成本随着对象数量的增加而增长非常缓慢,但他们正在研究多个操作的总成本如何随着所涉及的对象数量而增长,因此 N 次随 N 增长非常缓慢的运营成本在 N 中仍然刚刚超过线性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-19
      • 2015-04-03
      • 2010-09-15
      • 2021-02-15
      • 2011-01-10
      • 1970-01-01
      • 2014-12-24
      • 2019-02-20
      相关资源
      最近更新 更多