Курс 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"
- Проверка на истинность объектов в Python
- Python Метод sleep() из time
- Замена текста в Python
- Метод rename() для переименования файлов и каталогов
- Группировка элементов Python
- Оператор морж в Python 3.8
- Декораторы в Python
- Переворот списка в Python
- Модуль future Python
- Генерация UUID в Python
- Создание генераторов
- Установка и использование pyshorteners
- Оператор (*) в Python
- Отделение звука от видео
- Замер времени выполнения кода
- Конкатенация списков в Python
- Навыки Python: строки, типы данных
- Транспонирование 2D-массива с помощью zip
- Использование функции enumerate()
- Функции map, filter, reduce
- Множественное наследование в Python
- Защита данных в Python
- Сортировка данных с лямбда-функциями
- Поиск анаграмм с Counter
- Работа с словарями в Python
- Лямбда-функции в Python
- Модуль xkcd: добавление юмора в Python
- Создание даты из строки ISO
- Переопределение метода __floordiv__
- IPython и Jupyter Notebook: руководство
- Возврат нескольких значений
- Удаление элементов во время итерации
- Работа с массивами в Python
- Однострочники Python
- Установка и использование Logzero
- Модуль sys: основы
- Декоратор total_ordering для класса Point
- Создание вкладок с TKinter
- Импорт модулей в Python 3.12
- Обмен значений переменных в Python
- Раздувающийся словарь в Python
- 9 уловок для чистого кода
- Python и Монти Пайтон
- Метод setitem в Python
- Изменение объектов в Python
- Округление банкира в Python















