我正在練習爲空間或時間複雜度優化的編寫算法。使用主篩時,至少必須存儲所有找到的素數列表。似乎數據與所發現的素數的數量成比例,是算法可能使用的最小空間量。數據與素數成比例的素數篩的空間複雜度是多少?
- 此理由是否有效?
- 該算法的空間複雜度如何評估?
From Wikipedia about the sieve of Atkin - 我不確定的是當質數超過這個數時,篩子如何使用O(n^1/2)空間。這就是爲什麼看起來至少空間必須與素數成正比的原因。我是否將可數數字與空間複雜性相混淆?
In this paper on the sieve of Atkin,他們的算法打印「素數達到N ...這裏」內存「不包括打印機使用的紙張。」這似乎是對空間的不公平計算。
- 我希望澄清一下,應該如何/實際上客觀衡量。
。
def prime_sieve(limit):
factors = dict()
primes = []
factors[4] = (2)
primes.append(2)
for n in range(3, limit + 1):
if n not in factors:
factors[n * 2] = (n)
primes.append(n)
else:
prime = factors.get(n)
m = n + prime
while m in factors:
m += prime
factors[m] = (prime)
del factors[n]
return primes
請不要在問題中添加新問題 - 它會使現有答案失效。每個問題應該只包含一個問題;如果你有更多,請多詢問一下。你已經有兩個解決問題的不同部分的答案,那麼你如何決定哪一個應該成爲「答案」呢? – jonrsharpe 2014-10-20 11:17:24
這是一個很好的觀點。 Idk在這裏是否適合打破有關阿特金紙的問題......? @larsmans解釋說,我的算法與論文的算法有根本的不同,這就是爲什麼他們有不同的複雜性。 – 12345678910111213 2014-10-20 11:42:53
在這一點上會有點困難,雖然你可以問* larsmans *他們是否會介意在一個新問題上重複他們的答案。 – jonrsharpe 2014-10-20 12:32:41