所以我试图解决这个问题,但我和我的朋友们有点困惑
for (Int64 i = 1; i < Math.Pow(2, n); i = 2*i)
{
if (i <= 4 || i >= Math.Pow(2, n - 2))
{
for (Int64 j = n; j >= 0; j = j - 2)
{
//constant number of C operations
}
}
else
{
for (Int64 j = n; j > 1; j = (Int64) Math.Ceiling((double) j/2))
{
//constant number of C operations
}
}
}
我认为外环是O(n)但是我无法得到内部部分,我很确定它只是O(n)因为最大的内部for循环i在O(n)处的顶部,与O(log n)的下部相对应 这是思考它的正确方法吗?或者我错了
答案 0 :(得分:1)
但是我无法得到内在的部分,我很确定它只是O(n),因为内部for循环的最大部分是O(n)的顶部,与下部的一个相对应是O(log n)
顶部内环实际上是Θ(n)。并不是说内部是Θ(n),至少在你应该将它乘以外环的Θ(n)的意义上,获得总体Θ(n 2 )。这是因为内部的顶部循环仅执行常数次。顶部内环的Θ(n)应添加到外环的Θ(n)。
此代码的总体复杂性为Θ(n log(n))。具体来说,它是Θ(n)Θ(log(n))(完全执行底部内环的总复杂度)+ Θ(n)+Θ(n) (完全执行顶部内循环的总复杂性)。