【问题标题】:How is T(n) of the code O(nlog(n))? [duplicate]代码 O(nlog(n)) 的 T(n) 怎么样? [复制]
【发布时间】:2014-11-29 21:23:45
【问题描述】:

我没有得到第二个 for 循环的 T(n) 是 log(n) 的部分。两个回路通过以下方式连接 i 和它令人困惑。代码 O(nlog(n)) 的 T(n) 是如何使用基本乘积规则的?

for(i = 1; i <= n; i++)
{
   for(j = 1; j <= n; j = j + i)
   {
      printf("Hi");
   }
}

【问题讨论】:

标签: c algorithm loops


【解决方案1】:

对于i=1,内部循环执行n 次。对于i=2 内部循环执行n/2 次等等。运行时间为T(n) = n + n/2 + n/3 + ... + n/n。这等于n(1 + 1/2 + 1/3 + ...+ 1/n) = nH(n),其中H(n) 是第n 个谐波数。 H(n) ~ lg n 因此O(n lg n) 的运行时间。

【讨论】:

  • 太棒了!但是你能帮我解决如何使用找到 T(n) 的产品规则来解决这个问题吗? @saadtaame
  • 这是一个产品!第二个因素与您习惯的略有不同。例如,如果内部循环执行m 次,您将编写m + m + ... + mm 出现n 次。有意义吗?
【解决方案2】:
for(i = 1; i <= n; i++)  // Executes n times
{    
    for(j = 1; j <= n; j = j + i)
    {   // This loop executes j times with j increases by rate of i
        printf(“Hi”);
    }
}

内部循环对i 的每个值执行n/i 次。它的运行时间是nxSum(n/i) for all i in [1,n]

=> O(nlogn)

【讨论】:

    猜你喜欢
    • 2019-10-23
    • 2021-04-24
    • 1970-01-01
    • 2020-06-25
    • 2022-06-28
    • 2021-06-18
    • 2011-12-12
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多