算法时间复杂度分析(用于内部while循环的循环)

时间:2014-11-10 10:25:11

标签: algorithm time big-o time-complexity

这里是我简要实施的代码。 for循环应该具有O(n)的复杂度。我只是无法弄清楚内部while循环的时间复杂性。

int x,n;     // Inputted by the user.
for (int i=0; i<n; i++)
{
    int done=0;
    if (Condition)
    {

        while (done < x)
        {
            done++;     // Based on a lot of operations
        }
    }
}

如果你愿意,我可以发布整个代码。在此先感谢:)

1 个答案:

答案 0 :(得分:2)

这里,通过研究程序运行内循环操作的次数来衡量复杂性。

每次触发Condition时,内循环运行x次。因此内循环复杂度为O(x)。

此循环最多可以 n次。这为您提供了O(x.n)的整体最坏情况复杂度。

了解Condition的其他知识可以为您提供更精确的分析。例如,您可以计算平均复杂度

例如:让Condition成为!(i & (i-1))。这是 true 当且仅当i为0或2的幂时。在这种情况下,您的循环将完全E(ln2(n)) + 2次运行E(.)是整数部分函数)。最后,整体复杂性知道这就变成了O(x.ln(n))