空間または時間の複雑さに合わせて最適化されたアルゴリズムを書く練習をしています。素数ふるいでは、少なくとも、見つかったすべての素数のリストを保存する必要があります。見つかった素数の数に比例するデータは、そのようなアルゴリズムが使用するスペースの最小量であるようです。
- この根拠は有効ですか?
- このアルゴリズムのスペースの複雑さはどのように評価されますか?
ウィキペディアからアトキンのふるいについて- 素数の数がこれを超えると、ふるいが O(n^1/2) スペースをどのように使用できるかがわかりません。これが、少なくとも空間が素数の数に比例しなければならないように思われる理由です。可算数と空間の複雑さを混同していませんか?
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