В информатику понятие алгоритма пришло из математики.
Приведенное определение не является определением в математическом смысле слова, поскольку в нем использованы другие неопределенные понятия — «система предписаний», «формальное выполнение» и др. Это описание понятия «алгоритм», раскрывающее его сущность. (Рассмотрите пример 1.1.) Описание можно уточнить, указав общие свойства, которые характерны для алгоритмов. К ним относятся: дискретность, детерминированность (определенность), понятность, результативность, конечность, массовость.Дискретность. Алгоритм разбивается на отдельные действия (шаги). Выполнение очередного действия возможно только после завершения предыдущего. При этом набор промежуточных данных конечен и получается по определенным правилам из данных предыдущего действия. Команда является специальным указанием для исполнителя, предписывающим ему произвести каждое отдельное действие. Команды, которые относят к системе команд исполнителя, называют простыми; другие команды могут быть определены через простые. Детерминированность. Если алгоритм неоднократно применить к одним и тем же исходным данным, то каждый раз должны получаться одни и те же промежуточные результаты и один и тот же выходной результат. Данное свойство означает, что результат выполнения алгоритма определяется только входными данными и командами самого алгоритма и не зависит от исполнителя алгоритма. Понятность. Алгоритм не должен содержать команд, смысл которых исполнитель может воспринимать неоднозначно. Запись алгоритма должна быть четкой, полной и понятной. У исполнителя не должно возникать необходимости в принятии каких-либо самостоятельных решений. Результативность. При точном выполнении команд алгоритма результатом должен быть ответ на вопрос задачи. Если способ получения последующих величин из каких-либо исходных не приводит к результату, то должно быть указано, что следует считать результатом исполнения алгоритма. В качестве одного из возможных ответов может быть установление того факта, что задача не имеет решения. Конечность. Реализуемый по заданному алгоритму процесс должен остановиться через конечное число шагов и выдать искомый результат. Это свойство тесно связано со свойством результативности. Массовость. Алгоритм пригоден для решения любой задачи из некоторого класса задач, т. е. начальная система величин может выбираться из некоторого множества исходных данных, которое называется областью применимости алгоритма. Для практического решения задач на компьютере наиболее существенно свойство массовости. Как правило, ценность программы для пользователя будет тем выше, чем больший класс однотипных задач она позволит решать. Если разработанная последовательность действий не обладает хотя бы одним из перечисленных выше свойств, то она не может считаться алгоритмом. Для понимания свойств алгоритма рассмотрите примеры 1.2 и 1.3. Для одного и того же алгоритма могут существовать различные формы записи: текстовое описание, блок-схема, машина Тьюринга и др. Независимо от формы записи любой алгоритм может быть представлен с использованием базовых алгоритмических конструкций: следование, цикл и ветвление. В рамках теории алгоритмов происходит анализ различных алгоритмов решения задачи для выбора наиболее эффективного (оптимального). Разработка инструментов для анализа эффективности алгоритмов — одна из задач теории алгоритмов. Любой алгоритм нужно проверять на правильность работы (пример 1.4). |
Пример 1.1. Алгоритм «Решето Эратосфена» позволяет получить простые числа, не превосходящие N.
Пример 1.2. Часто рецепты приготовления каких-либо блюд называют алгоритмами. В данном случае нарушается свойство детерминированности, поскольку при приготовлении блюда разными людьми результат может быть разным (например, он может зависеть от того, на какой плите готовили, или от качества продуктов). Кроме того, в рецептах часто бывают фразы «посолить по вкусу», «добавить 2—3 ложки сахара» и т. д., которые нарушают свойство понятности. Пример 1.3. Задача может иметь решение, но сформулировать алгоритм решения этой задачи не всегда удается. Если человеку предложить фотографии животных, то он достаточно быстро сможет разделить их на две группы: дикие и домашние. Однако сформулировать алгоритм, согласно которому он это сделал, на сегодняшний день не представляется возможным. Некоторые задачи классификации сегодня успешно решаются системами искусственного интеллекта с помощью методов машинного обучения. Однако характерной чертой таких методов является не прямое решение задачи, а процесс обучения в ходе анализа множества решений сходных задач. Пример 1.4. Способы проверки алгоритма на правильность работы:
|
1. Что такое алгоритм?
2. Какие свойства характеризуют алгоритм?
3. Какие базовые алгоритмические конструкции используются при составлении алгоритмов?
Упражнения
1. Прокомментируйте основные свойства алгоритма для решета Эратосфена.
2. Аль-Хорезми составил алгоритмы арифметических действий еще в IX в. Составьте алгоритмы выполнения арифметических действий в столбик. Проверьте для составленных алгоритмов основные свойства.
3. Приведите примеры алгоритмов, обладающих указанными признаками.
- Используется только алгоритмическая конструкция следование.
- Присутствует алгоритмическая конструкция ветвление.
- Присутствует алгоритмическая конструкция цикл.
- Используются подпрограммы.
4. Опишите последовательность действий для решения задачи «Волк, коза и капуста».
Однажды крестьянину понадобилось перевезти через реку волка, козу и капусту. У крестьянина есть лодка, в которой может поместиться, кроме самого крестьянина, только один объект — или волк, или коза, или капуста. Если крестьянин оставит без присмотра волка с козой, то волк съест козу; если крестьянин оставит без присмотра козу с капустой, коза съест капусту. Как крестьянину перевезти на другой берег и волка, и козу, и капусту в целости и сохранности?
Будет ли полученная последовательность действий алгоритмом? Какое свойство алгоритма не выполняется? Возможно ли переформулировать задачу так, чтобы аналогичная последовательность действий стала алгоритмом?
5. Есть двое песочных часов на 3 мин и на 8 мин. Как с их помощью отмерить 7 мин? Определите систему команд исполнителя, который может решать эту задачу, и составьте для него последовательность действий, приводящую к ответу. Какие алгоритмические конструкции были использованы при реализации? Можно ли считать полученную последовательность действий алгоритмом? Какое свойство алгоритма не выполняется? Возможно ли переформулировать задачу так, чтобы аналогичная последовательность действий стала алгоритмом?