Однако само по себе понятие «метод» может быть достаточно общим. Один и тот же метод можно реализовать по-разному. Можно построить дом из кирпича или из дерева, используя разные инструменты и техники на каждом этапе, но общий метод «фундамент-стены-крыша» останется тем же. Здесь на сцену выходит более строгое и точное понятие – алгоритм.

Алгоритм – это уже не просто общая стратегия, это точное и подробное описание метода в виде последовательности шагов исполнителя, которые он выполняет для достижения поставленной цели. Если метод – это карта маршрута в общих чертах, то алгоритм – это детальная пошаговая инструкция для путешественника, не оставляющая сомнений в том, куда и как идти на каждом перекрёстке. Алгоритм всегда предполагает наличие исполнителя (человека, компьютера, механизма) и предписывает ему совершенно конкретные действия в строго определённом порядке.

Чтобы последовательность шагов могла называться алгоритмом, она должна обладать несколькими фундаментальными свойствами. Без них это будет не надёжная инструкция, а просто набор пожеланий или неясных указаний.

Первое свойство – однозначность, или детерминированность. Каждый шаг алгоритма должен быть сформулирован абсолютно чётко, не допуская никаких двусмысленностей или произвольных толкований. Исполнитель, будь то человек или машина, должен точно понимать, что именно нужно сделать на данном шаге. Представьте себе рецепт, где сказано: «Добавьте немного муки». Сколько это – «немного»? У каждого своё представление. Это не алгоритм. Алгоритмическая инструкция звучала бы так: «Добавьте 150 граммов просеянной пшеничной муки». Однозначность гарантирует, что при одних и тех же исходных данных исполнитель всегда будет выполнять одни и те же действия.

Второе свойство – выполнимость, или осуществимость. Каждый шаг алгоритма должен быть практически реализуем тем исполнителем, для которого он предназначен. Нельзя включить в алгоритм для человека шаг «подпрыгните на 100 метров» или в алгоритм для обычного компьютера – «мгновенно решите задачу, требующую перебора триллионов вариантов». Алгоритм должен оперировать только теми действиями, которые исполнитель в принципе способен совершить, используя доступные ему средства и возможности в рамках законов физического мира.

Третье свойство – конечность. Алгоритм должен завершать свою работу после выполнения конечного числа шагов. Он не может выполняться бесконечно. Даже если алгоритм включает циклы, повторения действий, должно быть гарантировано, что этот цикл когда-нибудь прервётся, и алгоритм придёт к своему финалу. Процесс, который не имеет чёткого условия завершения, не является алгоритмом в строгом смысле слова.

И четвёртое, важнейшее свойство – результативность. Мало просто завершиться, алгоритм должен приводить к ожидаемому, правильному результату, к достижению той цели, ради которой он был создан. Если алгоритм сортировки чисел после выполнения оставляет их в беспорядке, он не результативен. Если алгоритм поиска пути не находит существующий путь или приводит в тупик, он не результативен. Алгоритм должен гарантированно решать поставленную задачу при корректных исходных данных.

Эти четыре свойства – однозначность, выполнимость, конечность и результативность – превращают простое описание шагов в мощный инструмент предсказуемого и целенаправленного действия. И такие инструменты окружают нас повсюду, даже если мы не всегда называем их алгоритмами.

Самый очевидный пример – это программирование. Любая компьютерная программа – это, по сути, сложный алгоритм или набор алгоритмов, записанных на понятном процессору языке. Инструкции должны быть абсолютно однозначны, выполнимы для машины, программа должна завершаться (хотя бы по команде) и давать ожидаемый результат.