我正在练习编写针对空间或时间复杂度进行优化的算法。使用素数筛,您至少必须存储找到的所有素数的列表。似乎与找到的素数成比例的数据是这种算法可能使用的最少空间。
- 这个理由有效吗?
- 如何评估该算法的空间复杂度?
来自关于阿特金筛子的维基百科- 我不确定当素数数量超过此值时,筛子如何使用 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