所以我得到了这个算法,我需要计算它的时间复杂度
就像
for i=1 to n do
k=i
while (k<=n) do
FLIP(A[k])
k = k + i
其中A
是布尔数组,而FLIP则保持不变,即翻转当前值。因此是O(1)
。
现在我知道应该将内部while循环称为
n/1+n/2+n/3+...+n/n
如果我是正确的,但是那里有一个公式可以进行这种计算吗?
这里很困惑
谢谢!
答案 0 :(得分:2)
对于T(n) \sum((n-i)/i)
,更精确的计算是i = 1 to n
(因为k
从i
开始)。因此,最终的总和大约为n + n/2 + ... + n/n - n = n(1 + 1/2 + ... + 1/n) - n
。我们知道1 + 1/2 + ... + 1/n = H(n)
和H(n) = \Theta(\log(n)). Hence, T(n) = \Theta(n\log(n))
。 -n
对渐近计算成本没有任何影响,例如n = o(n\log(n))
。
答案 1 :(得分:0)
让我们说我们要计算这个方程的总和
n + n / 2 + n / 3 + ... + n / n
=> n ( 1 + 1 / 2 + 1 / 3 + ..... + 1 / n )
然后放在括号中(1 +1 / 2 +1 / 3 + ... + 1 / n)这是一个众所周知的Harmonic series,恐怕没有经过验证的计算谐波序列的公式。
答案 2 :(得分:0)
给定的问题归结为计算以下总和 -Sum of harmonic series
虽然无法准确计算此总和,但您仍然可以找到此总和的渐近上限,大约为 log(n)。
因此上述问题的答案将是 - nlog(n)