"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Алгоритм — точное описание шагов, которое помогает получить решение задачи для допустимых исходных данных. Он нужен, чтобы исполнитель мог выполнить действия без догадок и прийти к требуемому результату. Чтобы описание считалось алгоритмом, команды должны быть понятны конкретному исполнителю, а выполнение — завершаться. Один способ решения можно записать словами, блок-схемой или программой, сохранив порядок действий и условия переходов.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Алгоритм — точное конечное описание последовательности действий, приводящей к решению задачи для допустимых исходных данных. Это не просто совет, а способ, по которому можно пройти шаг за шагом и получить ответ. Такое определение помогает отличить решаемый порядок действий от общего рассуждения о том, что следует сделать.
Исполнитель алгоритма — объект или человек, способный выполнять команды алгоритма из заранее определённого набора. Исполнителем может быть человек, робот или компьютер, если он умеет выполнять нужные действия. Понятие исполнителя нужно, чтобы оценить, выполнимы ли команды, а не только понятны ли они автору.
Система команд исполнителя — полный набор команд, которые понимает и может выполнить конкретный исполнитель. Например, компьютер может сравнивать числа и выполнять присваивание, но не понимает бытовую команду «посмотри внимательнее» без дополнительных инструкций. Зная систему команд, можно проверить, подходит ли ей описание решения.
Алгоритмический язык — формальный язык записи алгоритмов, в котором однозначно задаются команды и порядок их выполнения. Его правила не оставляют места для разных толкований одной записи. Такой язык нужен, чтобы точно передавать алгоритм исполнителю или другому человеку.
Алгоритм рассматривают как последовательность отдельных шагов, потому что исполнитель должен понимать, что делать в каждый момент. Общее описание вроде «разберись с данными и найди ответ» сообщает цель, но не объясняет способа её достичь. Разбиение на шаги делает действия проверяемыми: можно установить, выполнена ли команда и какой шаг следует дальше. Поэтому даже сложное решение представляют как цепочку простых операций и переходов.
Сначала из условия задачи выделяют исходные данные и требуемый результат: иначе нельзя определить, что именно поступает на вход и что считать решением. Затем выясняют, какие действия доступны исполнителю, ведь алгоритм не может требовать неизвестной ему операции. Например, инструкция по вычислению среднего должна указать, какие числа складывать и на сколько делить. Такое уточнение связывает задачу, входные данные, возможности исполнителя и ожидаемый ответ.
Понятность алгоритма зависит от системы команд конкретного исполнителя, потому что одна и та же фраза для разных исполнителей может означать разные действия. Человек способен понять бытовое указание по контексту, а автомату обычно нужны точные команды и заданные условия. Если в алгоритме есть команда вне его системы, выполнить её нельзя, даже если человеку очевидно, что имел в виду автор. Поэтому алгоритм всегда оценивают вместе с исполнителем.
Свойства алгоритма помогают отличить его от произвольной инструкции. Дискретность означает деление на отдельные шаги, определённость — однозначность каждого шага, понятность — доступность команд исполнителю. Результативность требует получить результат за конечное число шагов, а массовость — применять способ не только к одному набору чисел, но и к целому классу допустимых данных. Если хотя бы одно из этих требований не выполнено, описание может оказаться неполным или неприменимым.
Один алгоритм можно записать словами, блок-схемой или на языке программирования, потому что форма записи не меняет сам способ решения. В каждом случае должны сохраняться основные действия, их порядок, проверки условий и переходы между шагами. Блок-схема показывает структуру графически, а программа выражает команды по правилам языка программирования. При переводе между формами важно не потерять ни одной команды и не изменить условие остановки.
| Свойство | Что означает | Как проверить | Пример нарушения |
|---|---|---|---|
| Дискретность | Действия разделены на отдельные шаги. | Можно ли указать, где заканчивается один шаг и начинается следующий? | «Постепенно улучши ответ» без описания действий. |
| Определённость | Каждый шаг задан точно и однозначно. | Получат ли исполнители одинаковое действие при одинаковых данных? | «Выбери удобное число» без критерия выбора. |
| Понятность исполнителю | Все команды доступны исполнителю и входят в его систему команд. | Умеет ли исполнитель выполнить каждую команду? | Команда «нажми на красную кнопку» для программы без сведений о кнопке. |
| Результативность | Для допустимых данных алгоритм завершается и даёт результат. | Есть ли условие остановки и достигается ли оно? | Цикл повторяется бесконечно. |
| Массовость | Способ подходит для множества однотипных допустимых данных. | Работает ли он не только на одном примере? | Инструкция, в которой заранее записан ответ только для конкретного числа. |
Пользуйся таблицей как проверочным списком: одно за другим сопоставь описание с каждым свойством. Пример нарушения помогает заметить, чего именно не хватает, но для полной проверки учитывай задачу и исполнителя. Отдельно проверь, что алгоритм завершается на всех допустимых данных.
Условие. Нужно определить, является ли инструкция «найдите самое большое число» алгоритмом для исполнителя, который умеет сравнивать числа. Умения сравнивать недостаточно, чтобы выполнить эту фразу однозначно: не указано, среди каких чисел ищется максимум и как их получить. Проверим описание по точности команд и наличию шагов.
Ответ. Исходная фраза не является полноценным алгоритмом: она задаёт цель, но не точную последовательность действий и не уточняет исходные данные. Уточнённый способ может стать алгоритмом для исполнителя, если сравнение, сохранение значения и вывод ответа входят в его систему команд. Также нужно оговорить, что делать с пустым набором.
Условие. Составим алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел a и b. Алгоритм Евклида использует факт: НОД(a, b) = НОД(b, a mod b), если b ≠ 0; a mod b — остаток от деления a на b. Нужно задать повторяющийся шаг и объяснить остановку.
Ответ. Алгоритм завершится за конечное число шагов: положительные остатки уменьшаются и не могут убывать бесконечно. Например, для 48 и 18 остатки равны 12, 6, 0, поэтому НОД равен 6. Алгоритм применим к парам натуральных чисел при условии, что хотя бы одно из них положительно.
Условие. Даны два описания решения и исполнитель с заранее известной системой команд. Требуется определить, какое описание является алгоритмом именно для него. Поскольку сами описания не заданы, разберём способ сравнения, который можно применить к любой такой паре.
Ответ. Алгоритмом для заданного исполнителя будет описание, в котором соблюдены все эти условия. Второе описание может быть верным алгоритмом для другого исполнителя, но не подходить этому, если содержит недоступные команды. Если хотя бы один тест не пройден, описание нужно уточнить или изменить.
Первая ошибка — считать алгоритмом любое полезное описание действий. Обычно так происходит, когда цель принимают за способ: фраза «найди максимум» звучит понятно, но не задаёт шаги. Проверь себя: сможет ли исполнитель действовать без догадок, зная только текст и исходные данные?
Вторая ошибка — забыть об исполнителе и использовать команду, которой нет в его системе. Это случается, когда автор описывает действия так, как сам привык их понимать. Сверь каждую команду с возможностями исполнителя; если операции нет, её нужно заменить доступной последовательностью действий.
Третья ошибка — путать конечность записи алгоритма с малым числом шагов. Из-за краткого описания цикла может показаться, что его повторения автоматически допустимы. Цикл разрешён, если для допустимых данных выполняется условие остановки; проверь, что оно обязательно достигается, а не просто присутствует в записи.
Четвёртая ошибка — считать решением алгоритм, проверенный только на одном примере. Один удачный результат ещё не доказывает, что способ работает для остальных данных. Подумай, как алгоритм действует на разных допустимых входах и граничных случаях; массовый способ применим ко всему заданному классу задач.
Для работы с алгоритмами нужны понятия исполнителя, команды, переменной, условия и цикла, а также умение читать блок-схемы. Эти знания помогают записывать ветвления и повторения так, чтобы исполнитель мог следовать им без догадок. Понятие алгоритма используется при составлении программ, доказательстве их корректности и анализе завершения. Оно связывает информатику с математикой, логикой и теорией вычислений: в каждой из этих областей важно точно задавать действия и рассуждения.
Чем алгоритм отличается от обычной инструкции?
Алгоритм задаёт точные и однозначные шаги, которые исполнитель может выполнить в установленном порядке. Обычная инструкция может быть полезной, но оставлять выбор или требовать догадок. Алгоритм также должен завершаться и приводить к результату для допустимых данных.
Может ли один и тот же алгоритм иметь разных исполнителей?
Да, если у каждого исполнителя есть необходимые команды и он понимает их одинаково. Например, алгоритм вычисления суммы можно описать для человека или для компьютера, но команды для них будут различаться. При смене исполнителя нужно проверить соответствие его системе команд.
Почему цикл не нарушает требование конечности алгоритма?
Цикл может повторять одни и те же действия, но завершиться, когда выполнится условие остановки. Для допустимых исходных данных алгоритм должен прийти к этому условию за конечное число повторений. Если цикл никогда не заканчивается, выполнение алгоритма не результативно.
Обязательно ли алгоритм записывать на языке программирования?
Нет. Его можно описать словами, блок-схемой или на алгоритмическом языке. Главное, чтобы порядок действий и условия были заданы однозначно и подходили исполнителю.
Как проверить, что данное описание действительно является алгоритмом?
Проверьте, можно ли разбить описание на точные шаги и способен ли заданный исполнитель выполнить каждую команду. Затем выясните, приводит ли выполнение к результату за конечное число шагов и применим ли способ ко всем допустимым исходным данным. Если нужны догадки или способ подходит только для одного частного примера, перед вами не полноценный алгоритм.
§ 47. Еще раз о понятии «алгоритм»