【问题标题】:What is the time complexity of the following nested loop dependency?以下嵌套循环依赖的时间复杂度是多少?
【发布时间】:2017-09-04 19:35:57
【问题描述】:
count=0;
for(i=1;i<=n;i*=5)
  for(j=1;j<=i;j++)
      count++;

根据我目前所了解的情况,内循环将增加 5 的幂,如下表所述,即当 i=1、j=1、当 i=5、j=5 时等等.


我 | 1 | 5 |25 |125 |


j | 1 | 5 |25 |125 |


这使得 j 增加,如 5^0、5^1、5^2、5^3 等等。使用高斯技巧,1+2+3+4...+n = (n² + n)/2 = n²/2 + n/2,这给出了 5^((n² + n) 的总迭代次数/2)。

这是否使总运行时间为 O(log base(5) n)?

【问题讨论】:

    标签: for-loop time-complexity big-o nested-loops


    【解决方案1】:

    我们将考虑内部循环的迭代次数与外部循环的索引值无关的循环

    然后我们将尝试n 的不同情况来找出正确的模式:

    n = 5 
    

    外:1 5

    内部:

    i = 1 : 1 次

    i = 5:5 次

    1 + 5 = 6 次,k = 2

    n = 25
    

    外:1 5 25

    内部:

    i = 1 : 1 次

    i = 5 : 5 次

    i = 25:25 次

    1 + 5 + 25 = 31 次,k = 3

    n = 125
    

    外层:1 5 25 125

    内部:

    1 + 5 + 25 + 125 = 156 次,k = 4

    内部:

    (1 + ... + n/5^2 + n/5^1 + n/5^0)
    
    n(1/n + ... + 1/5^2 + 1/5^1 + 1/5^0)
    
    n(1/5^k-1 + ... + 1/5^2 + 1/5^1 + 1/5^0)
    
    O(n(1/5^k-1 + ... + 1/5^2 + 1/5^1 + 1/5^0))
    

    = O(n)

    最后你可以从我们计算时间复杂度的模式中看到O(n)

    链接到几何级数的时间复杂度解决方案证明: https://justpaste.it/15fhs

    【讨论】:

    • 在您的最后一行代码中,很高兴看到括号中的因子是一个常数
    • 你能用几何级数的公式向我解释一下它是如何变成 O(n) 的吗?
    • 是的,您可以从几何级数得出时间复杂度的结论,请参见更新的答案链接。
    • 这个视频对理解大O计算很有帮助:youtube.com/watch?v=13Qb0GUo4Oc
    【解决方案2】:

    您不能在此处直接应用公式1 + 2 + … + n = n(n+1)/25^0 + 5^1 + … + 5^m5^(0 + 1 + … + m) 是两个完全不同的东西。

    系列5^0 + 5^1 + … + 5^mgeometric series。使用的公式应该是

    表示5^0 + 5^1 + … 5^m = O(5^m)。还要注意 5m = n.

    【讨论】:

    • 错了。你忽略了对数行为。
    • @gartenkralle 你是什么意思?
    • sum 不应该运行到 (n-1)。它应该运行到 log(n)。因为那个结果是不同的。
    • @gartenkralle 图片是从维基百科复制的,我确实在其他地方写过5^m。编辑:重新排版图像以避免混淆。
    • 但你没有回答循环的复杂性是什么
    【解决方案3】:

    您必须将 m=0 的 5^m 与小于 2n 的 log5(n) 相加。所以运行时间在 O(n)

    例如,如果 n=125,则总和为 156 (

    对于任何 n,总和小于 2n。

    【讨论】:

    • 你和我在内循环测试不同 n 情况时得到的模式完全一样
    猜你喜欢
    • 2019-11-16
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多