#python #time-complexity #analysis #space-complexity
#питон #временная сложность #анализ #пространство-сложность
Вопрос:
Вот код— Он возвращает число простых чисел, меньшее n.
def countPrimes2(n): if n lt; 3: return 0 primes = [True]*(n//2) for i in range(3, int((n**0.5)) 1, 2): if primes[i//2]: primes[i*i//2::i] = [False]*((n - i*i - 1) // (2*i) 1) return sum(primes)
Комментарии:
1. Вы не учитываете время, затраченное на задание среза.
2. Первая строка фактического кода такова
[True] * (n // 2)
. Это уже O(n).3. @FrankYellin Не должно ли это быть O(log n), потому что пространство выборки уменьшено вдвое?
4. @batman: Если ты удваиваешь
n
, ты все равно удваиваешьn//2
.5. @бэтмен. Ваш вопрос ко мне указывает на то, что вы не совсем понимаете, что означает обозначение O (). Ты действительно. нужно понять, что означает O(n) и O(sqrt(n)), прежде чем спрашивать, что такое O() конкретного алгоритма.