Сложность алгоритмов, или почему O(n) лучше O(2^n)

Предлагаю разобраться, как правильно оценить код с точки зрения его скорости выполнения.

Прежде всего надо выяснить, что мы понимаем под эффективным алгоритмом. Попробую дать авторское определение: эффективный алгоритм — код, который выполняется с минимальным использованием вычислительных ресурсов процессора. Соответственно, неэффективный алгоритм, наоборот, требует больше ресурсов и, соответственно, больше времени для выполнения.

Давайте рассмотрим, что же такое «хороший» и «плохой» алгоритм, на примере простой задачи с leetcode. 

Читать далее
2