Алгоритмы

Точная последовательность шагов, которая за конечное число действий решает задачу: сортирует, ищет, строит маршрут.

Алгоритм — однозначная последовательность шагов, которая за конечное время приводит к результату. Рецепт блюда, инструкция по сборке шкафа и способ найти фамилию в телефонном справочнике — тоже алгоритмы. В программировании алгоритм описывает, как из входных данных получить ответ: отсортировать список, найти запись, посчитать кратчайший маршрут.

Свойства алгоритма

  • Конечность — работа завершается за конечное число шагов.
  • Определенность — каждый шаг понятен однозначно, без «на глаз».
  • Результативность — для допустимых входных данных получается ответ.

Почему важна сложность

Одну задачу можно решить разными алгоритмами, и разница в скорости бывает огромной. Найти число в упорядоченном списке из миллиона элементов можно перебором — до миллиона сравнений. А можно двоичным поиском: смотреть в середину и каждый раз отбрасывать половину списка — хватит 20 сравнений.

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

Рост времени работы описывают O-нотацией: перебор — O(n), двоичный поиск — O(log n). На маленьких данных разницы не видно, на больших она решает все.

Классические задачи и алгоритмы

  • Сортировка. Быстрая сортировка и сортировка слиянием упорядочивают n элементов примерно за n·log n шагов.
  • Поиск. Двоичный поиск, поиск по хеш-таблице, поиск подстроки в тексте.
  • Графы. Алгоритм Дейкстры находит кратчайший путь — так работают навигаторы; обход в ширину ищет связи между объектами.
  • Динамическое программирование. Задача разбивается на подзадачи, а их решения запоминаются, чтобы не считать повторно.
  • Сжатие и шифрование. Отдельные семейства алгоритмов, на которых держатся архивы и шифрование.

Алгоритмы в бизнес-системах

Чаще всего алгоритмы работают незаметно. База данных выбирает способ выполнения запроса и использует индексы; служба доставки строит маршруты; антифрод-система банка сравнивает операцию с типичным поведением клиента; рекомендации подбираются методами машинного обучения. Эффективность алгоритма неотделима от того, как устроены данные, поэтому их изучают вместе со структурами данных.