Файл: Трахтенброт, Б. А. Алгоритмы и вычислительные автоматы.pdf

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

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

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

Добавлен: 19.10.2024

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

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

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

5. Алгоритм 5 вычисляет функцию s(x) = х

1;

слово из х палочек перерабатывает в слово из х -f- 1 пало­ чек.

Составление тыоринговых программ для названных алго­ ритмов не представляет никакого труда, поэтому мы его опускаем. Впрочем, если в других случаях и окажется, что нужная нам служебная программа достаточно сложна, то ведь построить ее придется лишь однажды, а зато применять ее можно будет сколько угодно раз. Ясно, однако, что мы не можем идти по пути неограниченного разрастания за­ паса служебных программ, или, как говорят еще, библио­ теки стандартных программ. К счастью, в этом и нет необ­ ходимости. Оказывается, что существует ряд алгоритмов — их естественно называть программирующими алгоритмами,

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

Прежде чем приступить к описанию "интересующих нас программирующих алгоритмов, укажем две формальные операции над тьюринговыми программами, которые будут

часто

использоваться.

 

 

 

 

1.

Переименование всех внутренних

состояний

за исклю­

чением заключительного

состояния «!».

 

 

2.

Фиктивное расширение

внешнего

алфавита:

к преж­

нему

алфавиту S =

{slt

s2,

sft} добавляются новые сим­

волы sf t + 1 , sh+2,

sll+n,

соответственно к прежней функ­

циональной схеме добавляются новые п строк, сплошь за­ полненных заключительным состоянием «!».

Совершенно очевидно, что если для исходной схемы (программы) 21 имело место 2l(P) = R, то для преобразован­ ной (согласно операции 1 или 2) схемы SI' также справед­ ливо W(P) = R. Обратное утверждение тоже справедливо для всех слов Р в исходном внешнем алфавите. Более того, процесс переработки Р в R будет протекать в точности так же, как и прежде. В этом смысле операции 1—2 можно рас­ сматривать как эквивалентные преобразования функцио­ нальных схем.

В дальнейшем, применяя некоторый программирующий алгоритм для исходных функциональных схем, мы можем

so


считать там,

где это нужно,

что они

уже

препарированы

 

в следующем смысле. Они приведены к общему внешнему

 

алфавиту путем подходящих

расширений

их алфавитов

 

и, кроме того, у них нет общих символов внутренних со­

 

стояний за исключением, быть может, заключительного

 

символа «!».

 

 

 

 

 

 

Переходим теперь к рассмотрению четырех важных ти­

i

пов сочетания алгоритмов:

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

параллельная

композиция,

разветвление

и

повторное при­

 

менение.

 

 

 

 

 

 

10.2. Последовательная композиция. Часто встречается ситуация, когда два алгоритма — в частности, две тыоринговы программы SI, 23, — приходится сочетать следу­ ющим образом. Предписывается исходя из начальных дан­ ных, т. е. из слова Р, сначала применить алгоритм 21, а за­ тем к его результату, т. е. к слову ЩР), применить алго­ ритм 23 и, следовательно, получить слово 33(^1 (Р)). Это предписание составляет новый алгоритм — последователь­ ную композицию алгоритмов "21, 23, обозначаемую 3}. Естественно спросить, можно ли (а если да, то как) постро­ ить функциональную схему для последовательной компо­ зиции, коль скоро мы располагаем функциональными схе­ мами "21, 25. Утвердительный ответ содержится в следующей почти очевидной теореме.

Т е о р е м а (о программировании последовательной композиции). Каковы бы ни были тыорйнговы программы "21 и 23, может быть эффективно построена тыорингова про­

грамма К такая, что для

всех рассматриваемых слов Р:

Е (Я)

= 58 (91 (/>)).

Программирующий алгоритм, который строит (эффек­ тивно) программу е, заключается в следующем. Предва­ рительно препарированные программы *2l, 93 объединяются в одну программу, а в подпрограмме «а всюду заменяется символ «!» символом начального состояния программы 93

(рис. 25, а). Начальным

состоянием программы © объяв­

ляется начальное состояние

программы

-1. Совершенно

очевидно, что схема рис. 25, а в применении к слову/5 ,

изо­

браженному стандартно,

будет работать сначала как схема

% до тех пор, пока на ленте

на появится

слово R =

ЩР);

однако на этом такте первый символ будет обозреваться

уже

не в заключительном состоянии «!», а в начальном состоя­ нии гх подпрограммы 93. Благодаря этому далее продол-

91


жается переработка слова

R (стандартно

изображенного)

в соответствии со схемой 93.

 

Заметим, что условие

стандартности

изображения ис­

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

хода от работы программы

21 к работе программы 33;

имен­

но,

когда

программа 83 включается

в работу, обозревается

та

ячейка,

в

кото­

 

 

 

 

 

 

 

рой

закончила

рабо­

О

If

?2

 

Ро

г

Pz

ту программа - I . По­

 

 

 

1Рг

Л

этому наш

 

програм­

1

 

 

 

грг

!

Л

мирующий

 

алгоритм

г

 

 

 

зрг

!

Л

 

 

 

 

 

годится и

в других

3

 

 

 

fPi

!

Л

 

 

 

 

ситуациях,

 

когда,

*

 

 

 

spz

/

Л

 

5

 

 

 

 

/

Л

быть может,

не

под­

 

 

 

ер2

разумевается

 

стан-

6

 

 

 

7pz

/

Л

 

7

 

 

 

г

/

Л

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

г

/

Л

 

 

 

9

 

 

 

ОЛ

/

Л

 

 

 

 

 

 

 

 

 

 

 

 

 

Л

 

Л?з

Щ,

Pz 'Pz

/

Лрг

 

V

 

 

3

I

°-1г

ль

 

ло? Л

ЬЛРа л

 

 

 

 

 

OL

Л

л

Л/7

 

 

•5/77pf

вместо!

 

 

1

J3

Л

л

Л Л

\п

 

 

 

 

а)

 

 

Рис. 25.

б)

 

 

 

 

 

 

 

 

 

 

 

 

дартное изображение слов, лишь бы гарантировалась со­ гласованность перехода от 31 к ЙЗ. В качестве примера по­ строим функциональную схему алгоритма, перерабатываю­ щего пару чисел а, Ь, заданных соответствующими наборами палочек в их общий наибольший делитель, записанный в десятичной системе счисления. Поскольку этот алгоритм является последовательной композицией двух ранее рас­ смотренных алгоритмов (в п. 9.5 и 9.2), его функциональная схема (рис. 25, б) может быть получена из схем рис. 14 и 18, так, как этого требует описанный программирующий алго­ ритм. Состояния схемы рис. 18 здесь переименованы в р,.,

ръ р 2 . Хотя схемы рис. 14 и 18 не были составлены нами

применительно к стандартному изображению начальных и результирующих слов, тем не менее построенная схема рис. 25, б годится, ибо схема рис. 14 заканчивает работу на крайнем правом символе слова, а схема рис. 18 начинает там же работу (т. е. обеспечена согласованность перехода от первой программы ко второй).

92


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

10.3. Параллельная композиция алгоритмов 21, 23 заклю-. чается по существу в совместном рассмотрении их работы применительно к соответствующим исходным данным; пусть это будут слова Р и Н, соответственно. Более точно эту разновидность сочетания алгоритмов можно описать сле­ дующим образом. Допустим, что || — некоторый символ, не встречающийся в алфавитах, посредством которых изо­ бражаются исходные данные и результаты алгоритмов $1, 23; тогда слова Р \\ Н и ЩР) || ЩН) могут применяться как изображения пар исходных слов и пар результирующих

слов. Предписывается по любому

заданному слову

Р || Н

применить к его компонентам Р,

Н алгоритмы 21, 58 и вы­

дать в качестве результата слово

ЩР) \\ ЩН). Это

пред­

писание и составляет новый алгоритм — параллельную ком­

позицию алгоритмов 21, 23, обозначаемую -I ||

33.

Напри­

мер, параллельная композиция

алгоритмов из

9.1

и 9.3

в применении к слову

 

 

 

389HI Ц П

| * | | | |

 

 

увеличит на единицу десятичное число 389, приведет сло­ жение слагаемых 6 + 4 и выдаст результат:

 

 

 

390Ц | |

| |

М М М -

 

 

 

 

Т е о р е м а

программировании

параллельной

ком­

позиции).

ДЛЯ любых

тыоринговых

программ

21,

23 мо­

жет быть

эффективно

построена

тыорингова

програм­

ма

К, такая,

что для

всех

слов

Р,

Не

соответствую­

щих

алфавитах К (Р || Н)=

 

ЩР)

|| ЩН).

Доказательство

этой

теоремы

так же,

как

 

и

в

случае

последовательной

композиции,

заключается

в

описании

подходящего

про­

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

грамму

© так, чтобы она,

скажем,

сначала

перерабаты­

вала кусок

Р слова Р || Н в точности так же,

как

програм­

ма "21, затем

перерабатывала

кусок Н так же,

как

програм­

ма Й, и,

наконец, свела

бы

полученные результаты по обе

стороны

от

символа |] .

Трудность,

которая

возникает на

93