所以我现在正在学习Big O符号,我不知道如何弄清楚Big O对我的跟随(故意效率低下)算法的影响:
def getPrimes(n):
primes = [2]
for i in range(3, n+1):
remainder = True
for j in primes:
if(i % j == 0):
remainder = False
if(remainder == True):
primes.append(i)
return primes
内部for循环运行的次数将根据列表中有多少项“primes”而增加。那么这对影响大O的影响有什么影响呢?
答案 0 :(得分:1)
检查Pi(n) function。它的近似值是n / ln(n) 整体算法(一种Eratosthenes实施的Sieve)复杂性is evaluated as O(n(loglog(n))
答案 1 :(得分:1)
每个i都针对少于i的所有素数进行测试。因此,完成的工作总量是:
sum(i=3..n)pi(i)
(其中pi(i)是小于i的素数)。
pi(n)是Theta(n / log n),因此完成的工作量与以下复杂程度相同:
sum(i=3..n)i/log(i)
我认为没有任何好的近似值,但它比O(n ^ 2)好,但不是很多,因为log(i)与i相比增长缓慢。