Analyzing worst case order-of-growth

你。 提交于 2019-12-24 13:33:12

问题


I'm trying to analyze the worst case order of growth as a function of N for this algorithm:

for (int i = N*N; i > 1; i = i/2)
     for (int j = 0; j < i; j++) {
           total++;
     }

What I'm trying is to analyze how many times the line total++ will run by looking at the inner and outer loops. The inner loop should run (N^2)/2 times. The outer loop I don't know. Could anyone point me in the right direction?


回答1:


The statement total++; shall run following number of times:

= N^2 + N^2 / 2 + N^2 / 4 ... N^2 / 2^k
= N^2 * ( 1 + 1/2 + 1/4 + ... 1/2^k )

The number of terms in the above expression = log(N^2) = 2log(N).

Hence sum of series = N^2 * (1 - 1/2^(2logN)) / (1/2)
                    = N^2 * (1 - 1/4N) / (1/2).

Hence according to me the order of complexity = O(N^2)



回答2:


The outer loop would run with a complexity of log(N) as the series reduces to half on every iteration . For example a binary search.




回答3:


The outer loop runs exactly 2LOG (base 2) N + 1 times (Float to int conversion and remove decimal places). If you see the value decreases like N^2,N^2/2 , N^2/4 ... 1. ..

So the total number of times total ++ runs is,

Summazion( x from 0 to int(2LOG (base 2) N + 1)) N^2/2^x




回答4:


for this question as the inner loop is depending upon the value of the variable that is changing by the outer loop (so u cant solve this simply by multiplying the values of inner and the outer loops). u will have to start writing the values in a and then try to figure out the series and then solve the series to get the answer..

like in your question, total++ will run..

n^2 + n^2/2 + n^2/2^2 + n^2/2^3 + .....

then, taking n^2 common, we get

n^2 [ 1 + 1/2 + 1/2^2 + 1/2^3 + ...]

solve this series to get the answer



来源:https://stackoverflow.com/questions/25847328/analyzing-worst-case-order-of-growth

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!