Файл: Алферова З.В. Теория алгоритмов учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.06.2024

Просмотров: 115

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Функция со (л:) частично рекурсивна с рекурсивной областью оп­ ределенности. Легко убедиться, что операторный алгоритм, имею­

щий программу

 

 

 

*

 

 

 

 

 

 

 

0: стоп ;

1:

V 2

2 •

 

со

2

3

 

 

 

3 : ехх

I 4 ; 4 :

р | 0

 

 

 

 

вычисляет как раз функцию f(x).

В самом деле, выполнив над

про­

извольным" числом х

приказ

1, получим

пару

(2х,

2). Если

хфа(0)»

то, выполнив над 2х

приказ 2, получим пару

(2Х 31 , 2). Если

 

хфа(\)г

то, выполнив над 2Х 31 приказ

2, получим

пару (2Ж 32, 2) и т. д.

Про­

цесс продолжается до тех пор,

пока,

 

наконец, . получится

 

пара

(2*3™, 2), для которой х

= а (п). Так

как

со (2*3™)

не определено, то.

над числом 2*3™ теперь надо выполнить приказ 3, в результате ко­

торого получим пару (п,

4). Выполнив над п приказ 4, получим па-

РУ (Р(г а )> 0)- Так как х

=

а(п),

то 0(n) =f(x),

и, следовательно,,

алгоритм перерабатывает х

bf(x),

что и ^требовалось.

 

Построенная

программа

для

вычисления

функции f(x)

оказа­

лась довольно

тривиальной

вследствие того,

что запас

функций,,

допустимых в приказах, был очень большой. Естественно, чем мень­ ше запас, тем труднее строить нужные программы. Поэтому несом­ ненный интерес представляет следующая теорема, которую мы при­

водим без

доказательства.

 

 

Теорема

Минского

(4). Для каждой частично рекурсивной функ­

ции f(x) существует

операторный алгоритм,

программа которого»

состоит из приказов

вида

 

 

 

стоп

Х с

:d

Р

для любого х, перерабатывающий 2х в

2^х\

 

Иными

словами, любая частично рекурсивная функция f(x) вы­

числима при помощи подходящего алгоритма, программа которогосостоит из приказов приведенного вида, при условии, что значения аргумента и функции кодируются числами 2, 2&х\ . .

1.5.3. Операторные алгоритмы А. А. Ляпунова

Алгоритмическая система советского ученого А. А. Ляпунова, предложенная им в 1953 г., является одной из первых, учитываю­

щих все требования,

предъявляемые

к конкретным

алгоритмам.

Она возникла в связи с реализацией алгоритмов

различных задач

на ЭВМ.

 

 

 

 

 

 

 

 

Для описания строения алгоритмов Ляпунов использует спе­

циальный математический аппарат — так

называемые

«логические

схемы алгоритмов», в которых заглавными

логическими

буквами-

обозначаются

отдельные

акты алгоритма,

перерабатывающие ин­

формацию. Их

называют

операторами.

Малыми

буквами

обозна­

чаются проверяемые

логические условия, при этом

используется

символика, принятая

в математической

логике.

Например, симво-


лом р(х<у) обозначают логическое условие, выполненное в том случае, когда неравенство, стоящее в скобках, истинно. В против­ ном случае это условие ложно.

Последовательное выполнение нескольких операторов

обозна­

чается как произведение, причем сомножитель,

стоящий

справа,

действует после сомножителя, стоящего слева.

 

 

Логическими схемами алгоритма

называются

выражения, со­

ставленные из операторов и логических условий,

следующих один

за другим. От каждого логического

условия начинается

стрелка,

которая оканчивается у какого-либо из операторов. Например, из

операторов А, В, С и5

логических условий р

и q

можно составить

следующие логические схемы:

 

 

 

 

 

I 2 Ар1

flyt2

С

 

 

или

 

 

 

 

 

pV Л1 г

CqP.

 

 

Знак f i обозначает

начало стрелки,

знак

\ {

— ее конец. Одина­

ковыми номерами помечаются начало и конец одной и той же стрел­ ки. Стрелки могут начинаться и у любого нелогического.оператора.

Логическая схема алгоритма определяет порядок работы опера­ торов в зависимости от значения входящих в нее логических усло­ вий. Работа алгоритма начинается с того, что выполняется самый левый оператор схемы. После того, как некоторый элемент схемы выполнен, определяется, какой оператор схемы должен выполнять­ ся следующим. Если это был оператор, то следующий за ним дол­ жен выполняться тот элемент, который стоит непосредственно спра­ ва, или тот, который указан соответствующей стрелкой. Если по­ следним было логическое условие, то возможны два случая. Если проверяемое условие выполнено, то должен работать элемент, стоя­

щий справа. Если

оно нарушено, должен

работать тот

оператор,

к которому ведет

стрелка, начинающаяся

после данного

условия.

Работа алгоритма оканчивается либо тогда, когда последний из ра­ ботающих операторов содержит указание о ее прекращении, либо когда на некотором этапе не оказывается такого элемента схемы, какой должен был бы работать.

Для записи алгоритмов используются следующие основные ти-

/пы операторов: 1) арифметические операторы; 2) операторы про­ верки логических условий; 3) операторы переадресации; 4) опера­ торы переноса; 5) операторы формирования.

1. Арифметические операторы служат для записи различных арифметических действий и обозначаются начальными буквами ла­

тинского алфавита.

 

 

Например, оператор А вычисляет величину a — Щь. — cam,

опе-

_ £ атор

В — величину с = ац: a-ц. Выбор букв для

обозначения

опе­

раций

произвольный.

 

 

2. Операторы проверки логических условий служат для опреде­

ления порядка работы алгоритма и обозначаются

малыми буквами

латинского алфавита р, q и др.

 

 

58


3.

Операторы

переадресации

служат для

изменения

адресов

 

в приказах; для изменения различных параметров, от которых за­

 

висят операторы программы; для восстановления значений пара­

 

метров и адресов, которые были изменены в процессе работы алго­

 

ритма

(программы).

 

 

 

буквой F с указанием

 

Операторы переадресации

обозначаются

 

в скобках

изменяемого адреса

или параметра. Так,

оператор, из­

 

меняющий параметр i на единицу, будет обозначаться

F(i).

Опера­

 

тор, увеличивающий параметр

i

на п единиц, будет обозначаться

 

Fn(i).

Оператор,

уменьшающий

параметр i

на

п единиц,

будет

 

обозначаться

F~n{i).

 

 

 

 

 

 

 

 

 

4.

Оператор

переноса

служит

для «переноса»

одного парамет­

 

ра на «место» другого, или, другими словами,

для замены

одного

 

параметра другим. Операторы переноса обозначаются [а—>Ь], где а

 

означает,

чем заменяется

(что переносится),

Ь — что заменяется

 

(вместо чего переносится).

 

 

 

 

 

 

 

 

5. Операторы формирования служат для формирования

началь-

/

ных значений некоторых операторов алгоритма. Они переносят не­

 

которые заранее запасенные приказы в определенные места алго­

 

ритма.

 

 

 

 

 

 

 

 

 

 

 

 

Операторы формирования можно использовать вместо операто­

 

ров переадресации. Это особенно удобно, когда число переадреса­

 

ций может быть различным, а начальное

значение

параметра —

 

всегда одно и то же. Например, если начальное значение парамет­

 

ра i равно /, то оператор формирования может быть записан в ви­

 

де {/—к'}.

 

 

 

 

 

 

 

 

 

 

 

Рассмотрим пример записи операторного алгоритма Ляпунова

 

для суммирования пяти чисел: ад а2, аз, аь аь.

 

 

 

 

 

Пусть

с — параметр,

представляющий

собой

2 а,-,

оператор At

 

вычисляет

величину d —

C j - i

+

qt-. Вычисление

суммы начинаем

с

i = l . Алгоритм имеет вид:

 

 

 

 

 

 

 

 

 

 

[ l - * q { 0 - * c _ i } * ' AtF

[i) р [i = 6)?

останов

 

 

Операторные алгоритмы Ляпунова для решения

определенной

 

задачи допускают некоторые эквивалентные преобразования. Про­

 

грамма, построенная по любому из эквивалентных между собой ал­

 

горитмов, служит для решения одной и той же задачи.

 

 

 

Такие

преобразования

алгоритмов полезны

в том

отношении,

 

что они могут быть использованы для поисков рациональной про­

 

граммы при реализации данного алгоритма на машине'.

 

 

Преобразование схем можно рассматривать с двух точек зре­

 

ния. Первый

путь — исследовать

формальные

тождественные пре­

 

образования схем алгоритмов, предлагается советским математи­

 

ком Ю. И. Яновым и будет рассмотрен далее.

 

 

 

 

 

Второй

путь — исследовать

содержательные

преобразования

 

схем

алгоритмов, учитывающие

индивидуальные

особенности ре­

 

шаемой задачи.

59



1.5.4. Блок-схемный метод алгоритмизации

При блок-схемном методе алгоритмизации весь процесс реше­ ния задачи расчленяется на отдельные этапы-блоки. Каждый блок изображается на бумаге в виде простейших геометрических фигур (прямоугольника, ромба, круга и т. п.), блоку присваивается номер (метка), и он снабжается пояснительным текстом. Направление процесса обработки в блок-схеме указывается путем соединения •отдельных элементов блок-схемы стрелками. Если один блок пере­ дает управление другим блокам в зависимости от выполнения опре­ деленных условий, то на стрелках связи указывается условие, при котором вычислительный процесс разветвляется.

При построении блок-схемы сложных вычислительных процес­ сов не всегда целесообразно дробить весь процесс решения задачи на мелкие блоки. Иногда для большей обозримости возможно со­ единить в один блок целую группу этапов, т. е. в зависимости от •сложности задачи составлять блок-схемы с различной степенью де­ тализации.

Рассмотрим применение блок-схемного метода алгоритмизации при таксировке первичных документов. Эта типичная учетная зада­ ча, и ее используют для обработки таких первичных документов" бухгалтерского учета, которые содержат в своем составе количест­ венные и нормативно-расценочные показатели.

К таким задачам может быть отнесена и таксировка индивиду-

.альных рабочих нарядов. Рассмотрим блок-схему обработки инди­ видуальных рабочих нарядов для единичных и мелкосерийных це-, хов:

 

 

Цех

Учас­

Заказ

Табельный

Вид оплахы

 

 

ток

номер

Индивидуальный

ра­

 

 

 

 

 

 

бочий

наряд

 

 

 

 

 

Деталь

Операция

Количе­

Норма Расценка

Время

Заработная

 

 

ство

времени

 

нормирован­ плата

 

 

 

 

 

ное

 

 

Время

нормиро­

 

 

ванное по доку­

Заработная плата

Подписи

менту

 

 

по документу

 

 

Цель задачи сводится к определению времени нормированного {ВНД) и заработной платы "(ЗПД) по каждому документу, участ­ вующему в обработке.

60