确定算法的时间复杂度

时间:2017-01-30 18:57:04

标签: algorithm time-complexity

我正在研究A在每次迭代中按k值递减的问题。 K在每次迭代中也加倍。例如:

A = 30 - > 29 - > 27 - > 23 - > 15 - > 0 delta = 1 - > 2 - > 4 - > 8 - > 16

如何评估此算法的时间复杂度?我认为由于delta的加倍,必须与O(logN)相关,但不确定如何直观地/数学地得出结论。

2 个答案:

答案 0 :(得分:1)

N个减量的总大小为2 ^ N - 1(通过归纳证明这一点),因此从A开始,ceil(log2(A + 1))递减到0。

答案 1 :(得分:0)

如果数字介于2^n2^(n-1)之间,即2^(n-1) <= A < 2^n,则需要n步才能获得non-positive值,因为在n步骤中,总减量为1+2+..+2^(n-1)=2^n-1(使用n上的归纳来证明)。因此,时间复杂度为= n = lg 2^n = 1 + lg 2^(n-1) <= 1 + lg(A),其中lglog base 2