Понятие алгоритма - одно из фундаментальных понятий информатики.
Алгоритмизация наряду с моделированием выступает в качестве общего метода
информатики. К реализации определенных алгоритмов сводятся процессы управления
в различных системах, что делает понятие алгоритма близким и кибернетике.
Алгоритмы являются объектом систематического исследования пограничной
между математикой и информатикой научной дисциплины, примыкающей к
математической логике - теории алгоритмов.
Особенность положения состоит в том, что при решении практических задач,
предполагающих разработку алгоритмов для реализации на ЭВМ, и тем более при
использовании на практике информационных технологий, можно, как правило, не
опираться на высокую формализацию данного понятия. Поэтому представляется
целесообразным познакомиться с алгоритмами и алгоритмизацией на основе
содержательного толкования сущности понятия алгоритма и рассмотрения основных
его свойств. При таком подходе алгоритмизация более выступает как набор
определенных практических приемов, особых специфических навыков рационального
мышления в рамках заданных языковых средств. Можно провести аналогию между этим
обстоятельством и рассмотренным выше подходом к измерению информации: тонкие
математические построения при «кибернетическом» подходе не очень нужны при
использовании гораздо более простого «объемного» подхода при практической
работе с компьютером.
Само слово «алгоритм» происходит от algorithmi - латинской формы написания имени великого
математика IX века аль-Хорезми, который сформулировал правила выполнения
арифметических действий. Первоначально под алгоритмами и понимали только
правила выполнения четырех арифметических действий над многозначными числами.
Понятие исполнителя невозможно определить с помощью какой-либо
формализации. Исполнителем может быть человек, группа людей, робот, станок,
компьютер, язык программирования и т.д. Важнейшим свойством, характеризующим
любого из этих исполнителей, является то, что исполнитель умеет выполнять
некоторые команды. Так, исполнитель-человек умеет выполнять такие команды как
«встать», «сесть», «включить компьютер» и т.д., а исполнитель-язык
программирования Бейсик - команды PRINT, END, LIST и другие аналогичные. Вся совокупность команд,
которые данный исполнитель умеет выполнять, называется системой команд
исполнителя (СКИ).
В качестве примера (рис. 1.11) рассмотрим исполнителя-робота, работа
которого состоит в собственном перемещении по рабочему полю (квадрату
произвольного размера, разделенному на клетки) и перемещении объектов, в
начальный момент времени находящихся на «складе» (правая верхняя клетка).
Рис. 1.11.
Исполнитель-робот
Одно из принципиальных обстоятельств состоит в том, что исполнитель не
вникает в смысл того, что он делает, но получает необходимый результат. В таком
случае говорят, что исполнитель действует формально, т. е. отвлекается
от содержания поставленной задачи и только строго выполняет некоторые правила,
инструкции.
Это - важная особенность алгоритмов. Наличие алгоритма формализует
процесс решения задачи, исключает рассуждение исполнителя. Использование
алгоритма дает возможность решать задачу формально, механически исполняя
команды алгоритма в указанной последовательности. Целесообразность
предусматриваемых алгоритмом действий обеспечивается точным анализом со стороны
того, кто составляет этот алгоритм.
Введение в рассмотрение понятия «исполнитель» позволяет определить
алгоритм как понятное и точное предписание исполнителю совершить
последовательность действий, направленных на достижение поставленной цели. В
случае исполнителя-робота мы имеем пример алгоритма «в обстановке»,
характеризующегося отсутствием каких-либо величин. Наиболее же распространенными
и привычными являются алгоритмы работы с величинами - числовыми, символьными,
логическими и т.д.
Алгоритм, составленный для некоторого исполнителя, можно представить
различными способами: с помощью графического или словесного описания, в виде
таблицы, последовательностью формул, записанным на алгоритмическом языке (языке
программирования). Остановимся на графическом описании алгоритма, называемом
блок-схемой. Этот способ имеет ряд преимуществ благодаря наглядности,
обеспечивающей, в частности, высокую «читаемость» алгоритма и явное отображение
управления в нем.
Прежде всего определим понятие блок-схемы. Блок-схема - это
ориентированный граф, указывающий порядок исполнения команд алгоритма; вершины
такого графа могут быть одного из трех типов (рис. 1.12).
Рис. 1.12. Три типа
вершин графа
На рис. 1.12 изображены «функциональная» (a) вершина (имеющая
один вход и один выход); «предикатная» (б) вершина, имеющая один вход и
два выхода (в этом случае функция Р передает управление по одной из
ветвей в зависимости от значения Р (Т, т.е. true,
означает «истина», F, т.е. false - «ложь»); «объединяющая» (в) вершина (вершина
«слияния»), обеспечивающая передачу управления от одного из двух входов к
выходу. Иногда вместо Т пишут «да» (либо знак +), вместо F- «нет» (либо
знак -).
Из данных элементарных блок-схем можно построить четыре блок-схемы (рис.
1.13), имеющих особое значение для практики алгоритмизации.
Рис. 1.13. Основные
алгоритмические структуры
На рис. 1.13 изображены следующие блок-схемы: а - композиция,
или следование; б - альтернатива, или развилка, в и
г - блок-схемы, каждую из которых называют итерацией, или
циклом (с предусловием (в), с постусловием (г)). S1 и S2 представляют собой в общем случае некоторые серии команд для
соответствующего исполнителя, В - это условие, в зависимости от истинности
(Т) или ложности (F) которого управление передаётся по одной из
двух ветвей. Можно доказать, что для составления любого алгоритма достаточно
представленных выше четырех блок-схем, если пользоваться их
последовательностями и/или суперпозициями.
Блок-схема «альтернатива» может иметь и сокращенную форму, в которой
отсутствует ветвь S2 (рис. 1.14, а). Развитием блок-схемы типа альтернатива является
блок-схема «выбор» (рис. 1.14, б).
Рис. 1.14. Развитие
структуры типа «альтернатива»;
о)
- неполная развилка; б) - структура «выбор»
На практике при составлении блок-схем оказывается удобным использовать и
другие графические знаки (некоторые из них приведены на рис. 1.15).
Рис. 1.15. Некоторые
дополнительные конструкции для изображения блок-схем алгоритмов
Алгоритм должен быть составлен таким образом, чтобы исполнитель, в
расчете на которого он создан, мог однозначно и точно следовать командам алгоритма
и эффективно получать определенный результат. Это накладывает на записи
алгоритмов ряд обязательных требований, суть которых вытекает, вообще говоря,
из приведенного выше неформального толкования понятия алгоритма. Сформулируем
эти требования в виде перечня свойств, которым должны удовлетворять алгоритмы,
адресуемые заданному исполнителю.
1. Одно из первых требований, которое предъявляется к алгоритму, состоит
в том, что описываемый процесс должен быть разбит на последовательность
отдельных шагов. Возникающая в результате такого разбиения запись представляет
собой упорядоченную совокупность четко разделенных друг от друга предписаний
(директив, команд, операторов), образующих прерывную (или, как говорят,
дискретную) структуру алгоритма. Только выполнив требования одного предписания,
можно приступить к выполнению следующего. Дискретная структура алгоритмической
записи может. Например, подчеркиваться сквозной нумерацией отдельных команд
алгоритма, хотя это требование не является обязательным. Рассмотренное свойство
алгоритмов называют дискретностью.
2. Используемые на практике алгоритмы составляются с ориентацией на
определенного исполнителя. Чтобы составить для него алгоритм, нужно знать,
какие команды этот исполнитель может понять и исполнить, а какие - не может. Мы
знаем, что у каждого исполнителя имеется своя система команд. Очевидно,
составляя запись алгоритма для определенного исполнителя, можно использовать
лишь те команды, которые имеются в его СКИ. Это свойство алгоритмов будем
называть понятностью.
3. Будучи понятным, алгоритм не должен содержать предписаний, смысл
которых может восприниматься неоднозначно, т.е. одна и та же команда, будучи
понятна разным исполнителям, после исполнения каждым из них должна давать
одинаковый результат.
Запись алгоритма должна быть настолько четкой, полной и продуманной в
деталях, чтобы у исполнителя не могло возникнуть потребности в принятии
решений, не предусмотренных составителем алгоритма. Говоря иначе, алгоритм не
должен оставлять места для произвола исполнителя. Кроме того, в алгоритмах
недопустимы также ситуации, когда после выполнения очередной команды алгоритма
исполнителю неясно, какая из команд алгоритма должна выполняться на следующем
шаге.
Отмеченное свойства алгоритмов называют определенностью или
детерминированностью.
4. Обязательное требование к алгоритмам - результативность. Смысл
этого требования состоит в том, что при точном исполнении всех предписаний
алгоритма процесс должен прекратиться за конечное число шагов и при этом должен
получиться определенный результат. Вывод о том, что решения не существует -
тоже результат.
5. Наиболее распространены алгоритмы, обеспечивающие решение не одной
конкретной задачи, а некоторого класса задач данного типа. Это свойство
алгоритма называют массовостью. В простейшем случае массовость
обеспечивает возможность использования различных исходных данных.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.