LINUX.ORG.RU

Почему сложность не удваивается

 


0

1

Почему при складывании сложностей, они не складываются?

Взять например функцию f, со сложностью O(N). Тогда коды

for i in range(5):
    f(n)
f(n)

тоже будут иметь сложности O(N) и O(N). Но при этом второй код будет примерно на 400% быстрее в сравнении с первым. Как по мне, весьма впечатляющее ускорение. А может быть и куда больше. Но сложность вообще игнорирует это.

В то же время, код time.sleep(1e+1000000 ** 1e+1000000 ** 1e+1000000) будет иметь ту же сложность, что и 1 * 1 (то бишь O(1)), но разница во времени выполнения просто огромна.

В чём вообще тогда суть сложности?



Последнее исправление: ShkiperDesna (всего исправлений: 1)

В чём вообще тогда суть сложности?

В данном контексте, в том, что она зависит от «длины» входных данных.

Upd. И O-нотация не учитывает коэффициенты.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)

код time.sleep(1e+1000000 ** 1e+1000000 ** 1e+1000000) будет иметь ту же сложность, что и 1 * 1 (то бишь O(1)), но разница во времени выполнения просто огромна

Но, оно же какая-никакая «константа» в обоих случаях, поэтому и O(1).

vvn_black ★★★★★
()

В чём вообще тогда суть сложности?

Это ты мог бы прочитать даже в википедии. В определении будет и ответ на твой вопрос.

ya-betmen ★★★★★
()

Сложность отражает зависимость времени выполнения от количества элементов. То есть, относительную разницу между N=1, N=2 и N=10. Если N=1 долгое само по себе - в сложности это никак не отразится.

firkax ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.