i=1; while(i<=n) i=i*2的时间复杂度O(log2n)。
整段代码语句,中循环体只有一个while(i<=n),执行的次数是:
i = 1,i = 1*2=2,判断2是否小于等于n,是则继续循环,否则跳出循环。
i =2,i = 2*2=4,判断4是否小于等于n,是则继续循环,否则跳出循环。
i =4 ,i = 4*2=8,判断8是否小于等于n,是则继续循环,否则跳出循环。
根据规律发现,循环次数由log2n决定,所以复杂度是O(log2n)。
扩展资料:
一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。
但不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。
外循环执行N次,而每次内循环执行i^2次,所以时间复杂度是:O(1^2+2^2+...+(N-2)^2+(N-1)^2)
再利用公式:
1^2+2^2+...+(N-1)^2=N*(N-1)*(2*N-1)/6
可得时间复杂度是:O(N^3)
i=1; while(i<=n) i=i*2的时间复杂度O(log2n)。
整段代码语句,中循环体只有一个while(i<=n),执行的次数是:
i = 1,i = 1*2=2,判断2是否小于等于n,是则继续循环,否则跳出循环。
i =2,i = 2*2=4,判断4是否小于等于n,是则继续循环,否则跳出循环。
i =4 ,i = 4*2=8,判断8是否小于等于n,是则继续循环,否则跳出循环。
根据规律发现,循环次数由log2n决定,所以复杂度是O(log2n)。
扩展资料:
一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。
但不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)