Курс 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. Использование модуля __future__
  2. Управление сессиями в Python
  3. HTTP-запросы с библиотекой Requests
  4. Создание генераторов в Python
  5. Получение атрибутов и методов класса
  6. Область видимости переменных
  7. Удаление элементов по срезу
  8. Разделение строки с помощью re.split()
  9. Генераторы списков
  10. Объединение списков с помощью zip
  11. Библиотека sh: использование команд bash в Python
  12. Лямбда-функции в Python
  13. Нан-рефлексивность в Python
  14. Удаление ссылок в Python
  15. Поиск самого частого элемента
  16. Метод rlshift для битового сдвига
  17. Основные операции с Numpy
  18. Установка переменной среды в Python
  19. Ключевое слово global в Python
  20. Класс Counter() для подсчета элементов
  21. Отрицательные индексы списков
  22. Преобразование в float
  23. Изменение списка срезом
  24. Применение функции map() с лямбда-функциями
  25. Справка по импортированным модулям
  26. Сравнение def и lambda функций в Python
  27. Операторы сравнения в Python
  28. Создание словаря через dict comprehension
  29. Пропуск начальных строк с помощью dropwhile()
  30. Создание уникального множества
  31. Форматирование чисел в Python
  32. Методы обработки строк в Python
  33. Lambda Functions in Python
  34. Обмен значений переменных в Python
  35. Функция reduce() из модуля functools
  36. Создание комплексных чисел
  37. Оператор is в Python
  38. Работа с getopt
  39. Работа с пользовательским вводом
  40. Метод сравнения объектов в Python
  41. Преобразование списка в словарь через генератор
  42. Python и Монти Пайтон
  43. Работа с collections в Python
  44. Удаление ключа из словаря в Python
  45. Использование функции product

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