这里是我简要实施的代码。 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
}
}
}
如果你愿意,我可以发布整个代码。在此先感谢:)
答案 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))