Сложность времени - BigO нотация Python Eval - PullRequest
0 голосов
/ 15 мая 2018

Какова временная сложность eval в Python для оценки математических выражений? Я не могу найти источники, которые утверждают это. Я предполагаю, что это O (n), где n - количество операторов в выражении.

Если у кого-то есть ссылка на сайт, где это указано, было бы очень признательно, если бы вы могли поделиться.

1 Ответ

0 голосов
/ 15 мая 2018

Операторы не имеют временной сложности. Операции над значениями делают .

Например:

  • 1 + 1 сложность времени O(1);просто добавить два целых числа (*)
  • [1, 2, 3] + [4, 5, 6] имеет разную временную сложность, O(len([1, 2, 3]) + len([4, 5, 6]), потому что объединение двух списков требует копирования всех ссылок из обоих списков в новый списокобъект.В общем случае list_len_N + list_len_K является операцией O(N+K).

Вы можете посмотреть временную сложность операций над общими типами Python в Python wiki , а также некоторыедобавил здравый смысл.Например, всякий раз, когда операция должна создать новый объект, учитывайте копию.+ в двух списках создает новый объект списка, поэтому он включает в себя операцию копирования и расширения.

При использовании нескольких операторов разных типов применяются нормальные правила алгоритмической сложности;сложные операции в последовательных операциях суммируются, но O(N) + O(N) все еще является линейным O(N).


* Целочисленный тип Python не связан, поэтому сложность времени немного сложнееВ качестве внутренней реализации C CPython можно использовать целые числа NC для представления значения.На практике это не проблема, поскольку разница между добавлением маленьких целых и больших целых чисел сводится к нулю по сравнению с выполнением цикла интерпретатора для динамического языка.

...