"Информатика (базовый уровень)", Гейн А.Г., Юнерман Н.А.
Алгоритм — точное описание действий, которые нужно выполнить в определённом порядке, чтобы решить задачу или получить нужный результат. Он организует процедурную информацию: не просто сообщает, что существует или что получилось, а указывает, что делать. Алгоритмы выполняют люди, устройства и программы, но только если команды им понятны. Чтобы алгоритм работал надёжно, он должен быть конечным, однозначным и приводить к результату.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Процедурная информация — сведения о последовательности действий, которые нужно выполнить для получения результата. Она отличается от описания предмета или готового результата тем, что объясняет, что делать. Такое понятие помогает выделить инструкции и правила действий среди других сведений.
Алгоритм — точное и конечное описание порядка действий, предназначенное для решения задачи или достижения цели. Иными словами, это не просто набор советов, а последовательность команд, ведущая к результату. Определение нужно, чтобы отличать алгоритм от описания того, что уже известно или получено.
Исполнитель алгоритма — человек, устройство или программа, способные понимать и выполнять команды алгоритма. Исполнителем может быть, например, робот или человек, следующий рецепту. Это понятие помогает выяснить, для кого составляется алгоритм и какие действия ему доступны.
Система команд исполнителя — набор команд, которые исполнитель умеет выполнять, с указанием допустимых условий их применения. Команда вне этого набора для исполнителя не имеет понятного смысла. Поэтому систему команд учитывают заранее, чтобы алгоритм можно было выполнить без догадок.
Процедурная информация отвечает на вопрос, какие действия и в каком порядке нужно выполнить. Описание объекта сообщает, например, его свойства, а описание результата — что получилось; ни то ни другое само по себе не объясняет путь к результату. Последовательность действий нужна, когда важно повторить процесс или передать его другому исполнителю.
Алгоритм делят на отдельные команды, потому что исполнитель должен понимать, какое действие выполнить на каждом шаге. Если вместо этого дать расплывчатое указание вроде «сделай всё правильно», исполнитель не узнает, с чего начать. Порядок тоже важен: сначала нужно подготовить необходимые данные или предметы, а уже затем выполнять действия, для которых они нужны.
Исполнитель определяет следующее действие по команде, которую получает, и по своему набору доступных команд. Поэтому алгоритм должен обращаться к нему на понятном языке и учитывать условия применения команд. Иначе человек может истолковать указание по-своему, а устройство или программа вовсе не смогут его выполнить.
Требования к алгоритму описывают его свойства. Дискретность означает деление на шаги, определённость — однозначность команд, конечность — завершение за конечное число шагов. Результативность требует получить предусмотренный результат, а массовость означает, что алгоритм подходит не только для одного набора данных, но и для класса однотипных задач.
Один и тот же алгоритм можно записать словами, изобразить блок-схемой или выразить программой. Разные формы помогают разным исполнителям: человеку часто удобны слова и схемы, компьютеру — команды языка программирования. Главное, чтобы представление сохраняло общий порядок действий и не меняло смысл условий.
| Свойство | Что означает | Как проявляется при выполнении |
|---|---|---|
| Дискретность | Алгоритм состоит из отдельных последовательных шагов | Исполнитель выполняет команды одну за другой |
| Определённость | Каждая команда понимается однозначно | В одинаковой ситуации исполнитель выбирает одно и то же действие |
| Конечность | Выполнение алгоритма завершается за конечное число шагов | После последней команды получается остановка или результат |
| Результативность | Алгоритм приводит к предусмотренному результату | По завершении можно проверить правильность решения |
| Массовость | Алгоритм применим к целому классу однотипных задач | Он работает при разных допустимых исходных данных |
Чтобы проверить алгоритм, сравни его ход выполнения со столбцом «Как проявляется при выполнении». Сначала проверь, есть ли отдельные шаги и понятны ли команды, затем — заканчивается ли процесс и получается ли нужный результат. Массовость проверяют на нескольких допустимых наборах исходных данных.
Условие. Нужно записать алгоритм приготовления бутерброда так, чтобы его мог выполнить робот с заданным набором команд. Пусть робот умеет взять предмет, положить его на стол и положить один предмет на другой. Названия команд в реальной системе могут отличаться, поэтому действия ниже следует соотнести с тем, что робот действительно умеет.
Ответ. Алгоритм составлен из доступных команд и в правильном порядке приводит к бутерброду с сыром. Если системе робота не хватает нужной команды, запись нельзя считать выполнимой именно для этого исполнителя.
Условие. Если число больше 10, вычесть 3, иначе прибавить 5; повторить действия для чисел 8, 12 и 20. Слова «повторить действия» здесь означают применить правило отдельно к каждому исходному числу, а не выполнять его снова над полученным результатом. Поэтому сначала проверяем условие для каждого числа.
Ответ. Для чисел 8, 12 и 20 результаты соответственно равны 13, 9 и 17. Проверка условия каждый раз определяет, какое действие выполнять.
Условие. Алгоритм Евклида должен находить НОД двух натуральных чисел — наибольший общий делитель. В повреждённой записи указано: «пока числа не равны, заменить большее числом, равным разности большего и меньшего; вывести НОД». Ошибка находится не в выборе операции вычитания, а в том, что не сказано, какие значения нужно вывести после цикла.
Ответ. После цикла нужно вывести любое из двух равных чисел. Исправленный алгоритм понятен, изменяет данные, завершается для любых двух натуральных чисел и выдаёт НОД.
Считать алгоритмом любое описание результата — значит перепутать цель с путём к ней. Так происходит, когда описание результата кажется достаточным, хотя исполнитель ещё не знает, что делать. Проверь себя: указаны ли конкретные действия, которые ведут от исходных данных к результату?
Пропускать порядок команд опасно, потому что перестановка шагов может изменить ход работы или сделать следующий шаг невозможным. Часто действия перечисляют так, как они приходят в голову, не проверяя зависимости между ними. Пройди алгоритм по порядку и спроси себя, доступны ли на каждом шаге необходимые предметы и данные.
Использовать отсутствующую в системе команд инструкцию нельзя: исполнитель не сможет догадаться, что она означает. Это случается, когда алгоритм пишут для себя, а не для конкретного исполнителя. Сверь каждую команду с его возможностями и уточни условия, при которых она допустима.
Называть алгоритмом последовательность, которая может выполняться бесконечно или не приводит к результату, — ошибка. Её допускают, если не проверяют, меняются ли данные и есть ли условие остановки. Проведи пробное выполнение и установи, за счёт чего процесс завершится и как проверить полученный результат.
Для изучения алгоритмов полезно знать, что такое информация, команда, действие, условие и последовательность шагов. Дальше эта тема понадобится при работе с программами, алгоритмическими конструкциями, блок-схемами и языками программирования. Алгоритмы встречаются не только в информатике: инструкции, рецепты, правила вычислений и технологические процессы тоже задают порядок действий для получения результата.
Чем алгоритм отличается от обычной инструкции?
Алгоритм — это точное описание порядка действий, предназначенное для решения задачи и получения результата. Обычная инструкция может быть менее формальной: в ней иногда пропущены шаги или оставлены неоднозначные указания. Если инструкция задаёт понятные исполнителю действия и их порядок, она может выступать алгоритмом.
Почему порядок команд в алгоритме так важен?
Команды часто изменяют состояние задачи: например, перемещают объект или меняют значение числа. Если поменять команды местами, исполнитель может получить другой результат или не выполнить задачу. Поэтому действия нужно располагать в последовательности, соответствующей цели.
Может ли человек быть исполнителем алгоритма?
Да, человеком может быть исполнитель, если он понимает команды и способен их выполнить. Например, человек следует рецепту или инструкции по сборке. Команды при этом должны быть достаточно ясными для конкретного исполнителя.
Обязательно ли алгоритм должен быть записан на языке программирования?
Нет. Алгоритм можно изложить словами, показать блок-схемой или записать на языке программирования. Представление меняется, но сохраняются заданные действия, условия и порядок их выполнения.
Что произойдёт, если в алгоритме нет условия завершения?
Исполнитель может продолжать действия бесконечно и не получить предусмотренный результат. Такой алгоритм не удовлетворяет требованию конечности. Нужно определить, при каком условии выполнение останавливается.
§ 14. Алгоритм как форма организации процедурной информации