
- •Основы теории алгоритмов.
- •1.1. Подходы к определению понятия алгоритма
- •1.2. Формы представления алгоритмов
- •Правила применения символов:
- •Правила выполнения соединений:
- •Специальные условные обозначения:
- •1.3. Основные свойства алгоритма
- •1.4. Типы алгоритмов
- •1.5. Основные принципы и способы разработки алгоритмов
- •1.6. Методы построения алгоритмов
- •Эвм как исполнитель алгоритмов. Принципы программного управления
- •2.1. Основные понятия и принципы программного управления эвм и исполнением алгоритмов
- •2.2. Особенности программного и микропрограммного управления
Специальные условные обозначения:
-
несколько выходов из символа следует показывать:
- несколькими линиями от данного символа к другим символам;
- одной линией от данного символа, которая затем разветвляется в соответствующее число линий;
-
каждый выход из символа должен сопровождаться соответствующими значениями условий, чтобы показать логический путь, который он представляет, с тем чтобы эти условия и соответствующие им ссылки были идентифицированы.
Таблицы решений
Таблица решений (decision table) — таблица, в которой указаны действия, предпринимаемые в различных условиях, а решение представляет выбор вариантов действий.
Известно, что такая таблица состоит из соответственно расположенных частей (табл. 1.1).
Табл. 1.1. Содержание таблицы решений
Вариант окончательных условий, при которых предпринимаете конкретные действия, представлен известным примером (табл. 1.2).
Табл.1.2. Таблица принимаемых решений для уточненных предусловий
В таблице 1.2 раздел окончательных условий организован в виде столбцов с уточненными предусловиями, предпринимаемые действия обозначены крестиком, а окончательные условия записаны понятными числовыми и вербальными значениями и символами, среди которых символ «-» означает «безразлично». Как правило, в таблице рассматриваются возможные комбинации входных значений (предусловий), для которых точно определено одно предпринимаемое действие. Кроме этого существуют таблицы, составленные по известному правилу ELSE, которое определяет совокупность шагов для всех действий, не удовлетворяющих явным правилам таблицы решений. При этом составленная таблица ELSE полна, так как в ней учитываются все возможные комбинации. Это последнее правило (обычно крайнее справа) в неполной таблице решений (decision table), которая не включает в себя все возможные комбинации условий.
Рассмотренная табличная форма представления алгоритмов используется для разработки (описания) и реализации программ. В последнем случае система должна иметь средства итерации данных в формате таблицы решений.
Математическая форма представления алгоритма (последовательность формул)
Для математического представления алгоритма записи условий А включаются в нумерованную неотрицательными целыми числами последовательность А0, А1, A2, …,Аn, а записи получаемых решений В — в последовательность В0, В1, В2, …,Вn, которая нумеруется неотрицательными целыми числами. Если обозначить через G множество номеров n тех условий Аn, которые алгоритм способен переработать в решения, то результатов работы алгоритма, осуществляющего переработку Аn —> Вm, однозначно определяется заданной на G числовой функцией m=φ(n). При этом произвольный алгоритм сводится к алгоритму вычисления значений некоторой числовой функции (здесь используются целые неотрицательные числа).
Обратно, если для функции (φ существует алгоритм, который, будучи применен к стандартной записи значения аргумента n из области определения функции φ, приводит к стандартной записи значения функции m=φ(n), то функцию (φ естественно называть алгоритмически вычислимой, или для краткости просто вычислимой функцией. Поэтому определение содержания и математическое (формульное) представление алгоритма сводится к вопросу определении вычислимой функции.
Известны следующие формы и математические определения вычислимой функции или алгоритма:
-
определение вычислимой функции как функции, значения которой выводимы в некотором логическом исчислении;
-
определение вычислимой функции как функции, значения которой получаются при помощи исчисления λ-конверсии (лямбда-исчисление) А. Черча;
-
определение вычислимой функции как функции частично рекурсивной или — для случая всюду определенной функции — как общерекурсивной;
-
вычислительная машина Тьюринга;
-
финитный комбинаторный процесс Е. Поста;
-
нормальный алгоритм А.А. Маркова.
Известно, что эти подходы к формализации понятия алгоритма, несмотря на независимость их появления, являются эквивалентными и их главная цель — обеспечение решения проблемы алгоритмической разрешимости различных математических задач, то есть построение алгоритма, приводящего к получению решения задачи.
Рассмотрим содержание этого определения с точки зрения естественно входящего в понятие алгоритма требования о наличии однозначно определенной последовательности операций, «перерабатывающих» условия А в решение В, или значение n в значение m=φ(n).
В содержании первых трех определений однозначно определенная последовательность операций не указывается. Но в определении частично рекурсивной функции содержатся все предпосылки для построения однозначно определенного алгоритма вычисления значений этой функции по заданному значению ее аргумента. Однако в явном виде такой алгоритм не указывается.
Вычислительная машина Тьюринга производит вполне определенную последовательность операций, приводящую к последовательному развертыванию записей значений φ(0), φ(1), φ(2)... Достаточно снабдить ее простым приспособлением, которое остановило бы ее работу при получении φ (n) для заданного n чтобы она могла рассматриваться как способ реализации подлинного алгоритма нахождения φ(n) по заданному п.
Два последних определения полностью отвечают требованию однозначной определенности алгоритмического вычислительного процесса заданием условий А.
Рассмотрим содержание определений с точки зрения расчленения алгоритмического вычислительного процесса на элементарные шаги, которые могут выполняться «механически» отдельными шагами. В этом требовании для вычислительного процесса ограниченной (в пределах данного алгоритма) сложности видна вторая, существенная, сторона понятия алгоритма. Содержание понятия алгоритма в смысле выполнения требования ограниченной сложности его отдельных шагов, с позиций математики, позволяет говорить о применимости алгоритма к бесконечному классу задач (алгоритмы сложения и умножения десятичных натуральных чисел). Поэтому уподобление процесса предписываемых алгоритмом вычислений работе некоторой «машины» не может пониматься слишком буквально. Реальная машина допускает только конечное число четко разграниченных «состояний», и в соответствии с этим число различных «условий» А, которые реальная машина способна перерабатывать в «решения» В, тоже конечно. Поэтому построение теории алгоритмов по образцу теории вычислительных машин требует некоторой идеализации понятий «машины».
Наглядные образы и понятия, выработанные в связи с развитием теории вычислительных машин дискретного действия, могут быть полезны для общей ориентировки в проблеме рационального определения понятия алгоритма. Вся идеализация, необходимая для перехода от реальных вычислительных машин к математическим алгоритмам, заключается в допущении неограниченного объема «памяти» машины. Известна иллюстрация изложения теории алгоритмов традиционными образами, связанными с вычислениями, записываемыми на бумаге. По сравнению с реальным процессом таких вычислений идеализация будет заключаться в допущении неограниченного объема записей, постепенно накапливаемых и вновь используемых по определенной системе в дальнейших выкладках.
С учетом рассмотренного можно выделить следующую общность рассмотренных определений алгоритма и вычислимой функции:
-
весьма общим является первое определение;
-
чтобы сформулировать определение вычислимой функции, необходимо ограничение некоторым фиксированным исчислением с фиксированными правилами вывода. При выводе в произвольном исчислении, с произвольными правилами вывода, необходимо учесть, что понятие вывода в исчислении в самом общем виде может быть уточнено лишь не базе уже уточненного понятия алгоритма;
-
содержание четких с формальной стороны оставшихся определений в определенном смысле эквивалентны друг другу, то есть по существу определяют классы вычислительных процессов (алгоритмов) одинаковой мощности.
Класс алгоритмически вычислимых числовых функций, определенных для всех натуральных n, совпадает с классом общерекурсивных функций. Для функций, определенных лишь на некотором подмножестве G полного множества натуральных чисел, их алгоритмическое задание можно понимать в двух различных смыслах. При первом, узком, понимании предписанная алгоритмом процедура должна для любого натурального n после конечного числа шагов привести либо к нахождению m=φ(n), либо к установлению того, что n не входит в G. При втором, более широком, понимании требуется только, чтобы предписанная алгоритмом процедура для любого n из G приводила к верному результату m=φ(n). При попытке применить ее к натуральному n, не входящему в G, не могла кончиться установлением ошибочного (так как φ вне G не определена) результата о равенстве φ(n) какому-либо определенному натуральному числу m. В остальном при втором (широком) понимании от характера работы алгоритма, примененного к не входящему в G числу n, ничего не требуется: допускаются как безрезультатная «остановка» алгоритмической процедуры после конечного числа шагов, так и случай, когда алгоритмическая процедура продолжается неограниченно, не приводя ни к какому результату.
Вывод по содержанию алгоритма с позиций определенной степени общности: для любого алгоритма Г функция φг должна быть частично рекурсивной.
Представление алгоритмов на языке программ
Одним из распространенных способов формализации алгоритма является запись его на алгоритмическом языке, то есть представление алгоритма на одном из языков программирования ЭВМ, предполагающее использование системы обозначений и правил для единообразной и точной записи, однозначного описания алгоритма и использования его.
Известно, что содержания понятий алгоритмического языка и языка программирования имеют определенные отличия.
Алгоритмический язык — формальный язык, характеризующийся:
-
наличием исполнителя, под которым подразумевается не только ЭВМ, но и любое устройство для выполнения работы;
-
наличием программы не обязательно предназначенной ЭВМ;
-
наличием своего словаря, основу которого составляют слова, используемые для записи команд, входящих в систему команд исполнителя того или иного алгоритма. Такие команды называют простыми;
-
использованием слов (служебных слов) с однозначно заданными смыслом и способом употребления. Использование служебных слов обеспечивает наглядность записи алгоритма и единообразие формы представления различных алгоритмов.
Алгоритм на алгоритмическом языке должен иметь название, которое выбирается так, чтобы было понятно, для какой задачи предназначен алгоритм. Название выделяется с помощью служебного слова «АЛГ» (АЛ Г название), за которым следуют команды. Начало и конец алгоритма определяются соответствующими командами «НАЧ» и «КОН». Между ними последовательно записывается серия команд алгоритма.
В ходе разработки новых алгоритмов могут использоваться составленные ранее. Алгоритм, который полностью используется в составе других, называется вспомогательным алгоритмом. На практике используют и встроенные (стандартные) вспомогательные алгоритмы — алгоритмы, которые постоянно имеются в распоряжении исполнителя.
Если алгоритм имеет обращение к самому себе как к вспомогательному, то он называется рекурсивным. Если команда обращения алгоритма к самому себе находится в самом алгоритме, то такая рекурсия называется прямой. Когда рекурсивный вызов данного алгоритмапроисходит из вспомогательного алгоритма, к которому в данном алгоритме имеется обращение, то такая рекурсия называется косвенной.
Разветвляющийся алгоритм — алгоритм, при исполнении которого порядок следования команд определяется в зависимости от результатов проверки некоторых условий.
Для описания такого алгоритма в алгоритмическом языке используется специальная составная команда «ветвление». Она соответствует блок-схеме «альтернатива» и может иметь полную или сокращенную форму.
Циклический алгоритм — алгоритм, при исполнении которого отдельные команды или серии команд выполняются неоднократно.
Для организации такого алгоритма в алгоритмическом языке используют специальную составную команду цикла, которая соответствует блок-схеме типа «итерация».
Для алгоритмов работы с величинами используются и другие алгоритмические конструкции, например цикл с параметром или выбор, и другие, которые рассматриваются в приведенной известной литературе. Более детально базовые структуры алгоритмов будут рассмотрены далее.
Язык программирования — формальный язык, воспринимаемый ЭВМ и предназначенный для общения человека с машиной.
Такие языки определяются как входные языки ЭВМ. Алгоритм, записанный на языке программирования, называется программой, в которой алгоритм представляется в виде последовательности операторов языка.