【问题标题】:Time complexity of the following function [closed]以下函数的时间复杂度[关闭]
【发布时间】:2017-09-11 19:19:05
【问题描述】:

请帮我分析一下下面函数的时间复杂度。

function (n)
{
    for( i = 1 ; i <= n ; i + + )
       {
            for( j = 1 ; j <= n ; j+ = i )
                {
                   print( “*” ) ;
                }
       }
}

【问题讨论】:

  • StackOverflow 不是一个家庭作业解决网站。我们期待一些基本知识的演示或尝试解决方案。我们会帮助你,但我们不会给你答案。见meta.stackoverflow.com/a/334823/3141234
  • 我投票决定将此问题作为题外话来结束,因为这是一个家庭作业问题,并未展示任何解决方案的尝试
  • n + n/2 + n/3 + n/4 + ... = ?
  • 正如stackoverflow.com/help/on-topic 所说:“要求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作的总结,以及您在解决问题时遇到的困难的描述。 " (此外,大 O 分析通常是理论计算机科学,它有自己的 StackExchange 站点;我们在这里的权限仅限于实际问题)。
  • 感谢您的回答。我还计算出答案是 O(nlogn) 为 (1+1/2+1/3+1/4+....+1/k) = logn 。但我是从这个link 练习这个问题的。在这里他们计算出运行时间是 O(n√n) ,这就是为什么,我很困惑。

标签: performance time-complexity asymptotic-complexity


【解决方案1】:

我觉得应该是 n + n*log(n)。

  1. 一个周期是 O(n);
  2. 循环内循环 O(n^2);
  3. 这种情况应该是:n*log(n) - as (n/1 + n/2 + n/3 + … + n/n) 每个迭代次数都在减少(n 除以 n),加上n,因为这也是第一个迭代周期;

所以,最终答案是:n + n*log(n)。

用简单的测试和一些数字检查了我的假设,看起来不错。

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    相关资源
    最近更新 更多