sum = 0;
for (i = 1; i < n; i *= 2)
for (j = 0; j < i; j++)
sum++;
最近在备战考研,学习数据结构刷真题的时候,这个题看了网上的讲解,都感觉自己听的不是特别懂,自己琢磨了半天,把自己的解法分享一下。
求以上代码的时间复杂度,这是一个嵌套循环,但是内循环和外循环有关系。
所以不能直接外循环复杂度*内循环复杂度。
首先观察,求时间复杂度可以理解为求sum++的运行次数。
求解sum++的运行次数可以等价求j++的运行次数。
而当j=i的时候,j++的值可以近似等于i的值,而i的值可以由外循环求出来。
外循环很好求
设运行a次,2的a次方=n,次数a等于,logn(2为底),综上,求出了i就求出了j,可以得到sum++的运行次数,而外循环求i就是等比数列求和,公比为2,次数为logn,和就等于n-1,所以i=n-1,即j++=n-1,则sum++运行n-1次,则时间复杂度为O(n)