АЛГОРИТМ
Алгоритм - точное предписание, определяющее процесс перехода от исходных данных к искомому результату.
Предписание считается алгоритмом, если оно обладает тремя следующими свойствами:
- определенностью, т.е. общепонятностью и точностью, не оставляющими место произволу;
- массовостью, т.е. возможностью исходить из меняющихся в известных пределах значений исходных данных;
- результативностью, т.е. направленностью - на получение искомого результата.
Перечисленных свойств вполне достаточно, и чтобы можно было определить, является данное конкретное предписание алгоритмом или нет.
Совершенно очевидно, что хорошо известное предписание: «Пойди туда, не знаю куда, принеси то, не знаю что» -алгоритмом не является. Примерами алгоритмов нематематического характера могут служить различные рецепты из поваренной книги. Рассмотрим алгоритм приготовления бутерброда.
Исходные данные: хлеб (белый, черный), продукт (колбаса, ветчина, сыр, масло). Искомый результат: бутерброд (ломтик продукта, наложенный на ломтик хлеба). Предписание:
- отрезать ломтик продукта;
- отрезать ломтик хлеба;
- наложить ломтик продукта на ломтик хлеба.
Можно легко убедиться, что это предписание обладает всеми тремя свойствами алгоритма:
- определенностью (всем понятно, что значит отрезать ломтик, положить один ломтик на другой и как все это сделать);
- массовостью (хлеб может быть черным или белым, продукт - колбасой, ветчиной, сыром, маслом);
- результативностью (при выполнении предписания получается искомый результат - бутерброд).
При этом последовательность выполнения пунктов а) и б) не существенна. Бутерброды получаются одинаковыми в обоих случаях а) - б) -в) и б) -а) -в). Это объясняется тем, что пункты а) и б) взаимно независимы друг от друга. Пункт в) может быть выполнен только после выполнения и пункта а), и пункта б), т.е. пункт в) зависит и от а), и от б).
(Интересно, что если в наличии имеются два ножа и соответствующее количество рук, то пункты а) и б) можно выполнять не только в любой последовательности, но и одновременно, и время приготовления бутерброда существенно уменьшится.)
В качестве примеров алгоритмов математического характера можно привести правила выполнения арифметических операций (сложения, вычитания, умножения, деления) над многозначными числами («столбиком»), правила выполнения таких же операций над простыми дробями, алгоритм Евклида, описания решений различных задач на построение в геометрии и т.д.
Рассмотрим алгоритм деления обыкновенных дробей.
Исходные данные: первая дробь (делимое), вторая дробь (делитель). Искомый результат: дробь - частное. Предписание:
- числитель первой дроби умножить на знаменатель второй;
- знаменатель первой дроби умножить на числитель второй;
- записать дробь, числитель которой есть результат выполнения пункта
- а знаменатель-результат выполнения пункта б).
Все сказанное про последовательность выполнения пунктов в алгоритме приготовления бутерброда относится и к этому алгоритму.
Для того чтобы можно было изучать общие свойства алгоритмов, доказывать теоремы, нужно иметь строгое математическое определение этого термина. Такое определение удалось сформулировать сравнительно недавно советским ученым А. Н. Колмогорову и А. А. Маркову.
Вопросы, связанные с понятием алгоритма, выросли в последнее время в большую «теорию алгоритмов», потребность в которой вызвана появлением электронных вычислительных машин, станков с числовым программным управлением, промышленных роботов, автоматических линий и т.д. Во всех перечисленных случаях требуется создание алгоритмов выполнения машинами тех или иных операций, притом в таком порядке, который приводит к нужной цели. Эти алгоритмы зачастую бывают чрезвычайно сложными по структуре и состоят из тысяч операций.
Если алгоритм предназначен для выполнения его на вычислительной машине, то он должен быть записан на языке, понятном этой машине. Такая запись алгоритма называется программой для вычислительной машины, а язык, на котором написана программа, - языком программирования.
В процессе развития теории алгоритмов выяснилось, что существуют математические задачи, для которых невозможно составить общий алгоритм решения. Такие задачи получили название алгоритмически неразрешимых. Наиболее важные результаты в этой области принадлежат советскому математику П. С. Новикову.