Курс 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. Вычисление натурального логарифма в NumPy
  2. Хранение данных с помощью dataclasses
  3. Работа со строками
  4. Метод lt для сортировки объектов
  5. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  6. Форматирование строк с f-строками
  7. Создание словаря через dict comprehension
  8. Форматирование строк в Python
  9. Метод index() в Python
  10. Многоточие в Python
  11. Получение ID процесса
  12. Проблема сравнения словарей
  13. Создание панели меню Tkinter
  14. Установка и использование библиотеки google
  15. Декораторы для регистрации функций
  16. Подсчет вхождений элементов
  17. Избегание изменяемых аргументов
  18. Метод rsub в Python: расширение функциональности вычитания
  19. ChainMap избыточные ключи
  20. Генераторы данных
  21. Работа с функцией next() в Python
  22. JMESPath в Python
  23. Создание именованных кортежей в Python
  24. Управление сессиями в Python
  25. Идентификатор объекта в Python
  26. Генераторы списков
  27. Разделение строки с помощью re.split()
  28. Метод join() для объединения строк
  29. Удаление пробелов методом translate()
  30. Методы работы со списками
  31. Метод enumerate() в Python
  32. Удаление первого элемента списка
  33. Замеры производительности в Python
  34. Модуль array: создание и использование массивов
  35. Эффективная конкатенация строк с использованием join()
  36. Обработка аргументов Python
  37. Работа с timedelta в Python
  38. Проблема с изменяемыми аргументами
  39. Курсы Яндекс Практикум
  40. Работа с *args и **kwargs в Python
  41. Новшества Flask 2.0
  42. Освобождение памяти в Python
  43. Python: отличительная особенность — отступы
  44. Сравнение def и lambda функций в Python
  45. Инициализация переменных
  46. Генерация случайных данных в NumPy

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