【问题标题】:How to calculate O(log n) in big O notation?如何以大 O 表示法计算 O(log n)?
【发布时间】:2015-01-22 10:17:57
【问题描述】:

我知道O(log n) 是指通过问题集N(大 O 表示法)的固定比率的迭代减少,但我如何实际计算它以查看具有@987654323 的算法的迭代次数@complexity 必须在问题集N 完成之前执行(还剩下一个元素)?

【问题讨论】:

  • O(log n) 可以通过任何固定比率迭代减少问题大小,而不仅仅是减半。
  • @Patricia Shanahan 嗯...没错...解决了这个问题:)

标签: algorithm array-algorithms


【解决方案1】:

你不能。您无需使用 BigO 计算确切的迭代次数。

当您有精确的迭代次数公式时,您可以“推导出”BigO。

BigO 仅提供信息迭代次数如何随着 N 的增长而增长,并且仅适用于“大”N。

不多也不少。有了这个,你可以得出结论,如果你有一些样本运行,算法将花费多少操作/时间。

【讨论】:

  • 是的,感谢您的回答。正如您所说,在您知道问题集减少的确切比例的情况下,您可以推导出它,但是有没有比在 while 循环中运行计算更有效的方法,例如:while(N > 1){ N=N/2} 或类似的东西?换句话说,考虑到每次迭代的问题集的精确减少,您是否可以在计算器上进行计算,以准确计算需要多少次迭代?谢谢。
  • 不不,你不做任何循环。您将循环转换为求和和其他数学公式,然后,是的,您可以计算操作数。例如,您有一个 INSERT 操作,该操作采用 O(log SIZE) 来完成数据结构,例如添加元素。你有算法需要从 N 元素构造这样的数据结构,你决定将它们一一插入,你将拥有 Sum over i from 0 to N-1: O(INSERT(i)) => Sum over i from 0 to N-1: O(log(i)) => 从 O 属性你可以“把它带到外面”O( Sum over i from 0 to N-1: log(i) ) .
【解决方案2】:

用 Tim Roughgarden 在他的算法课程中的话表达:

big-Oh 表示法试图为高级算法推理提供最佳位置

这意味着它旨在描述算法执行时间与其输入大小之间的关系,避免依赖于系统架构、编程语言或选择的编译器。

想象一下 big-Oh 表示法可以提供准确的执行时间,这意味着对于任何知道其 big-Oh 时间复杂度函数的算法,您都可以预测它在任何机器上的行为。

另一方面,它以渐近行为为中心。也就是说,它的描述对于大 n 值更准确(这就是为什么在大哦符号中忽略算法时间函数的低阶项)。可以推断,较低的 n 值并不要求您努力提高算法性能。

【讨论】:

    【解决方案3】:

    Big O 表示法仅显示一个数量级 - 而不是算法将执行的实际操作数。如果您需要计算循环迭代或基本操作的确切次数,则必须手动完成。然而,在大多数实际用途中,确切的数字是无关紧要的——O(log n) 告诉你 num。的操作将随着n 的加薪对数上升

    【讨论】:

      【解决方案4】:

      从大 O 表示法中,您无法准确判断算法将进行多少次迭代,这只是估计。这意味着对于较小的数字,log(n) 和实际迭代次数之间的差异可能会有显着差异,但越接近无穷大,差异就越不显着。

      【讨论】:

        【解决方案5】:

        如果您做出一些假设,您可以将时间估计为一个常数因子。最大的假设是,当规模趋于无穷大时,限制行为与您关心的问题规模的实际行为相同。

        在该假设下,对于某个常数C,大小N 问题的时间上限是C*log(N)。该常数将根据您用于计算对数的底数而变化。只要您对此保持一致,基础就无关紧要。如果您有一种尺寸的测量时间,您可以估计 C 并使用它来估计不同尺寸的时间。

        例如,假设大小为 100 的问题需要 20 秒。使用常用对数,C 为 10。(100 的常用对数为 2)。这表明大小为 1000 的问题可能需要大约 30 秒,因为 1000 的常见日志是 3。

        但是,这非常粗糙。该方法对于估计算法是否可用于解决大问题最有用。在这种情况下,您还必须注意内存大小。一般来说,设置问题的规模至少是线性的,因此它的成本会比O(log N) 操作增长得更快。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-03
          • 2020-12-29
          • 2013-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-10
          • 2011-12-12
          相关资源
          最近更新 更多