发新话题
打印

【求助】算法分析

【求助】算法分析

function mystery(x, y)

z := 1

while (y != 0){
          if (y % 2 = 0){
                x = x * x
               y = y / 2
             }

          else{
               z = z * x
               y = y - 1
         }
}
return z;

请教大家一下,这个算法的complexity是O(log n) 还是 O(n), 还是别的..请详细说明一下为什么,
谢谢。......      

TOP

不知道楼主到底要得到的是什么?

我就说下这个程序的执行好了:

在while循环这里,如果y的值不等于0,那么将一直进行下面的循环.

之后是if,如果y与上2等于0,那么将执行if语句中的代码,那么便是x=x*x,y=y/2.,之后再跳到while循环,直到while循环中的条件成立,再退出循环,最后返回一个变量z的值,这时z
应该为1.

如果if语句中的判断不成立,那么执行else中的语句z=z*x,y=z-1,之后再跳到while循环,直到while循环中的条件成立,再退出循环,执行return语句,返回一个z变量的值.这时z变量的值则是else语句中算出的那个值.      

TOP

回楼上,楼主是要得到这个函数的时间复杂度。
应该是O(log n)

下列算法也是O(log n)
for(i=1;j<=n;i=2*i)
   count<<"i="<<i;      

TOP

count?
好象是cout吧,那不是C++里面的东西,为撒会在我的Java版出现~~~晕      

TOP

不好意思,错了~~,是cout
因为我忘记了java的语法,最近又常用c++,所以写出c++的了      

TOP

很简单啊,是O(logn).
肯定是把y看成n拉,想一下,至多操作2次使N变成N/2,所以
T(N)<=T(N/2)+2
这样就很明显拉      

TOP

楼上正解,高手阿      

TOP

发新话题