你從2
去n
,加入log log n
蓄能器的每一步,所以你確實有n/log log n
步驟。
但是,每步都做了什麼?每一步,你從j
到n
,累加器本身乘以每一步。那有多少個操作? 我不是100%肯定,但基於搞亂了一下和this answer,這似乎最終是log log (n - j)
步驟,或簡稱log log n
。
因此,n/log log n
步驟,做log log n
操作的每一步,給你一個O(n/log log n * log log n)
或O(n)
算法。
一些實驗似乎或多或少的證實了這一點(蟒蛇),雖然n_ops
似乎標誌位爲n
變得更大:
import math
def doit(n):
n_ops = 0
j = 2
while j < n:
k = j
while k < n:
# sum + = a[k]*b[k]
k = k*k
n_ops += 1
k = math.log(n, 2)
j += math.log(k, 2)
n_ops += 1
return n_ops
結果:
>>> doit(100)
76
>>> doit(1000)
614
>>> doit(10000)
5389
>>> doit(100000)
49418
>>> doit(1000000)
463527
那麼,你沒有展示太多的分析,而是一個答案,所以很難猜測你錯在哪裏 – YakovL