【问题标题】:Loop complexity循环复杂度
【发布时间】:2016-04-07 14:57:12
【问题描述】:

如果我有下面的 for 循环:

for(k = 1; k <= n; ++k){
    for(j = 1; j * j <= k; ++j){
        //O(1) operations
    }
}

我知道外循环将迭代 n 次,而内循环将从外循环每次 kth 迭代迭代 floor(sqrt(k))

因此,为了确定时间复杂度,我们有类似的东西,总和

\sum_{k=1}^{n} \floor{\sqrt{k}}

不确定如何继续并获得以 n 为单位的封闭形式时间复杂度。

【问题讨论】:

标签: c++ algorithm loops time-complexity


【解决方案1】:

我会说你需要整合 sqrt(n) => n^(1/2)。结果是 n^(3/2)。忘记地板功能。

【讨论】:

    【解决方案2】:

    外循环迭代n 次,内循环迭代sqrt(n) 次。当一个循环在另一个循环中时,您会增加它们的复杂性。因此它运行在O(n^1.5)

    【讨论】:

    • “当一个循环在另一个循环中时,你会增加它们的复杂性。” - 没那么简单。
    • @KarolyHorvath:这个怎么样:“当一个循环在另一个循环内并且它们是互斥的时,你会增加它们的复杂性”?
    • 在这种情况下它们不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多