Курс 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. Замыкания в Python
  2. Метод pop() списка
  3. Работа с файлами в Python
  4. Математические функции в Python
  5. Метод clear для коллекций
  6. Динамические маршруты во Flask
  7. split() без разделителя
  8. Управление пакетами с pip
  9. Удаление специальных символов с помощью re.sub
  10. Вакансии в Nebius
  11. Обязательные аргументы в Python
  12. Область видимости переменных
  13. Метод __iand__ для пользовательских классов
  14. Циклы в Python
  15. Работа с изображениями Pillow
  16. Работа с итераторами в Python
  17. Переопределение унарных операторов
  18. Создание пользовательской коллекции в Python
  19. Класс UserDict: дополнительная функциональность
  20. Проверка версии Python
  21. capitalize() — изменение регистра первого символа строки
  22. Тип данных TypeVarTuple
  23. Работа с Enum в Python3.
  24. Область видимости переменных
  25. Хеши в Python
  26. Создание обратного итератора
  27. Работа с контекст-менеджером «with»
  28. Команда %dhist — список посещенных каталогов
  29. Логирование с Logzero
  30. Логирование с Logzero
  31. Работа с NumPy.linalg
  32. Красивый вывод списка
  33. Преобразование списка в словарь через генератор
  34. Сложные типы данных в Python
  35. Counter() — подсчет элементов
  36. Сортировка с параметром key
  37. Метод pos в Python
  38. Создание итерируемых объектов
  39. Модуль pprint: улучшение вывода данных
  40. Печать календаря
  41. Создание новых функций через partial
  42. Monkey Patching в Python
  43. Python itertools combinations() — группировка элементов
  44. Именованные срезы в Python
  45. Удаление файлов в Python

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