【问题标题】:What is the (worst-case) time analysis for the following loop?以下循环的(最坏情况)时间分析是多少?
【发布时间】:2014-06-12 01:14:32
【问题描述】:

以下是整数变量 n 的一些代码:

while (n > 0)     
    {         
        n = n/10; // Use integer division     
    } 

我正在尝试找到此循环的最坏情况时间分析。 O(n) 对我来说是新的,我遇到了困难。这不会只是 O(n) 吗?

【问题讨论】:

  • 如果循环按预期工作,它平均会在O(log_10 n) 上,在最坏的情况下,这还不错O(n)。话虽如此 - 不确定是否有一些病态的边缘情况出现问题......
  • 在什么情况下这可以扩展为 O(n)?

标签: java time big-o analysis


【解决方案1】:

实际上该算法是 O(log(n))。您正在除以 10(每次通过循环敲掉一个 0)。

一般来说,如果算法随 n 的大小线性缩放,则算法为 O(n),但为此,如果将 n 的大小增加 10 倍,则只需要多一次迭代,而不是 10 倍通过循环迭代。


根据要求,这里有几个带有简短入门的网站。一个快速的谷歌搜索会出现更多:

http://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ http://www.daveperrett.com/articles/2010/12/07/comp-sci-101-big-o-notation/

【讨论】:

  • 是以 2 为底数还是以 10 为底数?在数学中,plain log 通常表示后者,但在 cs 中,表示前者。
  • 通常在大 O 表示法中你不关心基数。
  • 你知道有什么地方可以让我进一步阅读“Big O of n”来加深我的知识。我理解它背后的想法,但实际上确定时间案例分析是什么让我失望。我觉得我可能想多了。我是 Java 新手,但我已经完成了 Java 1、Java 2,并且上周完成了算法。
  • 因为 log_2(x)=log_10(x)*3.3219 在 Big-o 表示法中是 log2 还是 log10 都没有关系。
  • 感谢大家的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
相关资源
最近更新 更多