Algorithm 算法时间复杂度分析(对于具有内部while循环的循环)

Algorithm 算法时间复杂度分析(对于具有内部while循环的循环),algorithm,time,big-o,time-complexity,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 operat

下面是我简单地实现的代码。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
        }
    }
}
int x,n;//由用户输入。

对于(inti=0;i这里,复杂性是通过研究程序运行内部循环操作的次数来衡量的

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

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

对<代码>条件
有更多的了解可以让你进行更精确的分析。例如,你可以计算平均复杂度


例如:设
条件
!(i&(i-1))
。当且仅当
i
为0或2的幂时,这是真的。在这种情况下,循环将精确运行
E(ln2(n))+2次(
E(
为整数部分函数).最后,知道这一点的总体复杂度变为O(x.ln(n))

总体内部循环复杂度为O(x)。但由于未将
done
重置为0,因此
x
乘以“内部操作”在外循环中运行。最后,这些操作只执行
x次
。然后,它在每次触发
条件
时运行,而不仅仅是第一次。内循环的复杂度保持为O(x)(以您的操作运行次数为指标)@Rerito总体复杂度是否为O(xn)在这种情况下?内环的复杂度是O(x)。一旦与外环结合,你会得到最坏情况下的复杂度O(xn)。时间复杂度最多是O(nx)。因为我们不知道什么是“条件”,我们无法更准确地判断。