我正在研究A在每次迭代中按k值递减的问题。 K在每次迭代中也加倍。例如:
A = 30 - > 29 - > 27 - > 23 - > 15 - > 0 delta = 1 - > 2 - > 4 - > 8 - > 16
如何评估此算法的时间复杂度?我认为由于delta的加倍,必须与O(logN)相关,但不确定如何直观地/数学地得出结论。
答案 0 :(得分:1)
N个减量的总大小为2 ^ N - 1(通过归纳证明这一点),因此从A开始,ceil(log2(A + 1))递减到0。
答案 1 :(得分:0)
如果数字介于2^n
和2^(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)
,其中lg
为log
base 2
。