Курс Python → Big O оптимизация

Big O оптимизация — это важная задача для разработчиков. Оценка скорости работы программы на разных устройствах может быть сложной из-за различий в аппаратном обеспечении. Для универсальной оценки был разработан подход, использующий понятие Big O. Например, простой алгоритм перебора всех значений имеет сложность O(n), где n — количество значений, так как используется только один цикл. Если же есть два вложенных цикла, как в программе для вывода таблицы умножения, то сложность уже будет O(n^2). Из формул видно, что второй алгоритм работает намного медленнее.

Главное правило — чем больше данных, тем дольше будет работать программа. Например, бинарный поиск имеет сложность O(log n) и работает намного быстрее, но требует отсортированного списка. При оценке сложности учитывается количество проходов по данным, а не количество строк кода. График скорости работы алгоритмов показывает, что чем меньше операций выполняется, тем лучше.

Пример кода:


def linear_search(array, target):
for i in range(len(array)):
if array[i] == target:
return i
return -1

def binary_search(array, target):
low = 0
high = len(array) - 1
while low <= high:
mid = (low + high) // 2
if array[mid] == target:
return mid
elif array[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1

В приведенных примерах кода показаны алгоритмы линейного и бинарного поиска. Линейный поиск имеет сложность O(n), так как выполняет n операций в худшем случае. Бинарный поиск имеет сложность O(log n) и работает быстрее, но требует отсортированного списка. Понимание Big O помогает разработчикам выбирать наиболее эффективные алгоритмы для своих задач.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Избегание изменяемых аргументов
  2. Работа с изменяемыми коллекциями
  3. Профилирование с Pandas
  4. Оператор «not» в Python
  5. Проверка элементов списка условием
  6. Метод enumerate() в Python
  7. Работа с коллекциями Python
  8. Изменение списка срезами
  9. Разработка игры Pong с turtle
  10. Цикл for в Python
  11. Именованные кортежи в Python
  12. Генераторы списков в Python
  13. Установка User-Agent в Python
  14. Псевдонимы в Python
  15. Создание новых списков
  16. Работа с массивами в Python
  17. Счетчик в Python: most_common()
  18. Работа с файловой системой в Python
  19. Игра «Виселица» на Python
  20. Измерение потребления памяти при сортировке
  21. Работа с срезами в Numpy
  22. Очистка входных данных
  23. Обработка ошибок в Python
  24. Создание генераторов в Python
  25. Модуль os: работа с файлами и папками
  26. Декоратор Ajax required
  27. Логирование с Logzero
  28. Дефолтные параметры в Python
  29. Изменение элемента списка
  30. Объединение списков в Python
  31. Генерация UUID в Python
  32. Вакансии в Nebius
  33. Профилирование данных с Pandas.
  34. discard() — удаление элемента из множества
  35. Работа с YAML в Python: PyYAML.
  36. Лямбда-функции в Python
  37. Работа с эмодзи в Python
  38. Работа с дробями в Python
  39. Генерация тестовых данных с factory_boy
  40. Работа с модулем glob в Python
  41. Получение срезов итераторов
  42. Использование подчеркивания в REPL
  43. Создание графиков в терминале
  44. Получение текущего времени в Python
  45. Преобразование регистра символов

Marketello читают маркетологи из крутых компаний