Файл: Трахтенброт, Б. А. Алгоритмы и вычислительные автоматы.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.10.2024
Просмотров: 137
Скачиваний: 0
этом пути, состоит в том, что, воспроизведя работу програм мы 21 применительно к куску Р, машина Тьюринга может задавать запись куска Н, ибо ячейки, занятые этой запи сью, могут понадобиться для работы программы 31. Точно так же имитации работы программы 23 на куске Н может мешать кусок Р или те записи, которые возникли бы в ре зультате его обработки. Конечно, положение сильно упро стилось бы, если бы вместо одной одномерной ленты машины Тьюринга в качестве внешней памяти имелись бы две Ленты, причем правила функционирования машины допускали бы переписывание с одной ленты на другую. В таком случае можно было бы вычисление ЩР) осуществлять на одной ленте, вычисление ЩН) на другой, и потом можно было бы свести результаты вместе. Это замечание показывает, что для машин другого типа (с более «гибкой» и удобной памятью) алгоритм, программирующий параллельную композицию, был бы совсем тривиален. Для машин Тьюринга и для тыоринговых программ дело обстоит несколько хуже, но в ко нечном счете нужный программирующий алгоритм (и даже в разных вариантах) удается описать. Откладывая это опи сание до § 12, мы пока приведем в данном параграфе даль нейшие примеры и теоремы, опирающиеся на теорему о программировании параллельной композиции.
10.4. Разветвление алгоритмов. Уже в предыдущих па раграфах мы не раз встречались с предписаниями следую щего типа: «применить к исходным данным алгоритм 21 или алгоритм 33 в зависимости от того, обладают ли эти данные таким-то свойством (см., например, команды услов ного перехода для электронных вычислительных машин). При этом предполагалось, что мы располагаем соответстствующим распознающим алгоритмом Ф, т. е. алгоритмом, который применим к данным, о которых идет речь, и дает ответ «да» (они обладают этим свойством) или «нет» (если они не обладают этим свойством). Когда распознающий алго ритм Ф задан в виде тыоринговой программы, то обычно считают, что он применяется к исходному слову Р и пере рабатывает его в 1, если ответ утвердительный, и в 0 — если ответ отрицательный.
Такое предписание можно рассматривать как некоторый новый алгоритм, являющийся своеобразным сочетанием трех алгоритмов Ф, '21, 23, первый из которых является распознающим алгоритмом. Условимся называть его раз ветвлением 21 и S3 по признаку Ф и записывать так: «если Ф то 21 иначе 23».
94
Рассмотрим |
следующий |
пример, |
подсказанный |
|
алго |
||||||||||||||||
ритмом |
Евклида. |
|
Пусть |
Ф3 %, |
|
|
212 применимы к парам |
||||||||||||||
чисел а * Ъ, причем |
Фх |
отвечает |
|
на |
вопрос |
«а > |
ЬЪ, 2^ |
||||||||||||||
перерабатывает |
а*Ь |
в |
а — |
b * Ь, |
|
212 |
перерабатывает |
а * b |
|||||||||||||
в b * а. Тогда |
алгоритм |
«если Фъ |
|
|
то |
211( |
иначе 912» |
пере |
|||||||||||||
рабатывает |
а * 6 |
в |
а — b * b |
или |
в |
6 * а |
в |
зависимости |
|||||||||||||
от того, имеет ли место а > |
b или а |
< |
Ь. Далее, |
обозначим |
|||||||||||||||||
через Ф 2 |
распознающий |
алгоритм, |
|
отвечающий |
на |
вопрос |
|||||||||||||||
тфЬЪ, |
|
и |
через |
21 3 |
— алгоритм, |
перерабатывающий а*6 |
|||||||||||||||
в а. |
Тогда, |
применяя |
|
дважды |
|
разветвление, |
получаем |
||||||||||||||
алгоритм: «если Ф2 , |
то (если Ф ь |
то |
21ь иначе 212), иначе |
5(а». |
|||||||||||||||||
Этот алгоритм в точности осуществляет |
один |
цикл |
евкли |
||||||||||||||||||
дова |
алгоритма: |
в |
применении |
к паре |
а |
* |
b |
он |
выдает |
||||||||||||
результат |
а, |
если |
а = |
Ь, |
результат |
а — b *6, если а~> b |
|||||||||||||||
и результат 6 * а, если Ь> |
а. |
|
|
|
|
|
|
|
|
|
|
|
|||||||||
Как и прежде, естественно спросить: если |
алгоритмы |
||||||||||||||||||||
ф, |
3t, |
25 |
заданы |
|
в |
|
виде |
тьюрииговых |
|
программ, |
|||||||||||
то можно ли |
построить (и как?) тьюрингову |
программу |
для |
||||||||||||||||||
алгоритма |
«если |
Ф, то |
9(, |
иначе |
|
58»? Справедлива |
следу |
||||||||||||||
ющая |
|
|
|
(о программировании |
|
разветвления). |
Како |
||||||||||||||
Т е о р е м а |
|
||||||||||||||||||||
вы бы ни были |
тьюринговы |
программы |
St и S3 и |
распознаю |
|||||||||||||||||
щая |
тыорингова программа |
Ф, |
применимые |
к словам в од |
|||||||||||||||||
ном и том лее алфавите |
А, |
может |
быть |
эффективно |
|||||||||||||||||
построена |
тыорингова |
программа |
|
S, |
такая, |
что для |
всех |
||||||||||||||
слов |
Р |
в |
алфавите |
А: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
^. |
|
|21(Р), |
еслиФ(Р) |
|
утвердительно, |
|
|
||||||||||||
|
|
|
|
|
\23 (Р)* если |
Ф(Р) |
отрицательно. |
|
|
|
|||||||||||
Опишем программирующий алгоритм, который достав |
|||||||||||||||||||||
ляет |
программу £ |
исходя из программ |
2(, |
33, |
Ф . В каче |
||||||||||||||||
стве |
составных |
его |
частей |
будут |
|
|
использованы алгорит |
мы, программирующие последовательную и параллельную композиции. Кроме того, будут использованы уже извест ные нам стандартные программы: Е (тождественный алго ритм), Konl (удваивающий алгоритм), а также еще одна стандартная программа, так называемая ветвящая про грамма (обозначаемая далее Ветв) Ветв имеет 3 внутренних состояния р, р0, Pi и внешние символы 0, 1, || . Среди команд для нас важны лишь следующие четыре команды:
{р-^Пр,:, Н Л; Ор^Пр0; ||р„-»-Л.
95
Построим сначала |
программу Ф, которая |
в применении к |
||||||
слову |
Р работает |
так: она перерабатывает Р в |
1 || Р или в |
|||||
О II Р |
в зависимости от того, |
имеет |
ли |
место |
Ф(Р) |
= 1 |
||
или |
Ф(Р) = |
0. |
Очевидно, в |
качестве |
Ф можно |
взять |
||
1\оп1°(Ф || Е). |
Дальнейшее построение программы S проис |
|||||||
ходит так (рис. 26): программы |
Ф, |
Ветв |
21, 23 сливаются |
tf . . . |
tn Р Р0 |
ФВет8
рвместо!
Р(1) Р{2) . . |
. |
Р(о) |
||
tf |
|
|
. . . |
|
6 |
II |
Pff) |
||
! |
|
|
|
|
6 |
II |
Pff) . |
• • |
' |
Р |
|
|
|
|
Pit) |
Р(2) |
|
|
|
tf |
|
|
|
|
Pff) Р(2)
Р, ?/. . . |
?т "t . . . "с |
?/ |
23 |
а) |
|
Pfu)
P(v)
Pfv)
Pfv)
Рис. 26. |
|
в одну программу (после предварительной |
препарации — |
см. 10,1), причем заключительное состояние |
Ф заменяется |
состоянием р из Ветв, а состояния р} ир0 из Ветв заменяются соответственно на начальные состояния программ 31 и 23. В качестве начального состояния программы & объявляется начальное состояние ty программы Ф. Проследим (рис. 27) теперь, как будет протекать работа в соответствии с пост роенной программой (£, исходя из стандартного изображения
слова |
Р (конфигурация |
I). Сначала работает подпрограмма |
Ф, но |
теперь вместо |
заключительной конфигурации II |
появится конфигурация |
I I I : здесь а обозначает один из двух |
возможных символов: 0 или 1.
Начиная с этого момента включится в работу подпро грамма Ветв, которая после двух тактов приведет к конфи гурации IV,- если а = 1 , или к конфигурации V, если о = = 0. Этим обеспечивается нужное разветвление: далее
96
уже будет |
работать |
именно |
та из программ 9!, S3, |
которой |
||||||
•и положено работать. |
|
|
|
|
|
|||||
10.5. Повторное |
применение |
алгоритма. |
В рассмотрен |
|||||||
ной выше |
(рис. 26) |
конструкции |
для программы |
«если Ф, |
||||||
то 21, иначе 53» произведем |
следующее |
изменение: в каче |
||||||||
стве S3 возьмем стандартную |
программу |
Е, а в подпрограм |
||||||||
ме 91 заключительное |
состояние |
! заменим |
начальным со |
|||||||
стоянием |
4 подпрограммы Ф; состояние (1 пусть |
остается |
||||||||
1 |
#1* 1 |
Л |
1 |
|
|
|
к |
|
|
|
|
|
|
|
|
|
|||||
|
к, |
|
|
|
|
|
|
|
|
|
\ |
* |
#1* |
Л |
1 |
|
|
|
к |
|
|
|
|
|
|
|
|
|||||
|
|
«2 |
|
|
|
|
|
|
|
|
|
х*-/ палочек |
|
|
код |
(Kp)-^-f--f |
|||||
|
|
|
f(x) |
-1 |
палочек |
|
|
|
|
|
|
|
|
|
|
|
|
|
код•(/(£)= |
fiffx>-1-1 |
Рис. 27.
начальным состоянием всей полученной таким образом программы; саму программу обозначим ©. Тогда в приме нении к слову Р работа программы SD будет протекать сле дующим образом: (I) проверяется условие Ф применительно к слову Р; (II) если оно выполнено, то Р перерабатывается по программе 31 в слово ЩР). Однако вместо того, чтобы на этом закончить работу, как это было в случае программы®, программа £> предписывает на этот раз: (III) проверить условие Ф применительно к слову Ч1(Р) (ибо в 91 заключи тельное состояние заменено начальным состоянием ({). Если условие выполнено, то будет вычислено ЩЩР)), потом условие Ф будет проверяться применительно к этому слову и т. д. Мы обнаружили здесь часто встречаемую ситуацию, когда исходя из распознающего алгоритма Ф и произволь ного алгоритма 91 предписывается: для любого слова Р, если выполнено условие Ф, вычислить Ш(Р); если для него выполнено условие Ф, вычислить ЩЩР)) и так далее до
4 Зак. 263 |
97 |
тех пор, пока впервые не получится слово, не обладающее свойством Ф. Тогда процесс останавливается и это слово (им могло оказаться исходное слово Р, если оно не удов летворяет условию Ф) объявляется результатом. В против ном случае процесс никогда не заканчивается и порождает последовательно слова ЩР), ЩЩР)), 21 (31 (St (Я)))), ... и т. д. Это предписание составляет новый алгоритм, который можно называть повторением алгоритма 31, пока выполне но условие CD; этот новый алгоритм обозначим так: «пока Ф, повторяй 9!». Рассмотренная выше модификация алгоритма, программирующего разветвление, фактически перестраи вает его в алгоритм, программирующий повторение. Итак, нами доказана
|
Т е о р е м а |
(о программировании |
повторения). |
Каковы |
|||||
бы |
ни были |
тыорингова |
программа |
91 |
и распознающая |
||||
тьюрингова |
программа |
Ф, можно эффективно |
построить |
||||||
тыорингову |
программу |
55 |
для алгоритма |
тока |
Ф, повто |
||||
ряй |
31». |
|
|
|
|
|
|
|
|
|
10.6. Языки |
программирования. |
Мы |
изучили |
отдельно |
четыре типа сочетания алгоритмов (последовательную и па раллельную композиции, разветвление и повторение) и вве ли для них формальные обозначения: St S3, St || 23, «если ф, то 21, иначе S3», «Пока Ф, повторяй 31». Ясно, что посред ством элементарных формул этих четырех типов и подхо дящей расстановки скобок можно записать естественным образом более сложные формулы, описывающие более слож ные сочетания алгоритмов. По существу такие формулы уже применялись выше (например, запись многократной ком позиции, или многократного разветвления). Мы не станем определять более точно и педантично этот язык формул, который будем называть входным языком программирования
или просто входным ЯЗБ1КОМ, считая его достаточно понят
ным, и ограничимся лишь |
иллюстрацией его на примерах. |
Рассмотрим еще раз алгоритм Евклида и сохраним |
|
обозначения Ф ь Ф2 , 2(х, |
$2> &з Д л я «элементарных» ал |
горитмов, использованных ранее (см. 10.4) при иллюстра ции разветвления алгоритма. Обычное словесное описание
алгоритма Евклида вполне |
естественно |
(почти дословно!) |
|
записывается |
в виде следующей формулы входного языка: |
||
(пока Ф2 , |
повторяй (если |
Ф ь то Э[ъ |
иначе Э(2))° 9(3(:j±). |
Следовательно, |
если уже |
имеются |
тыорииговы программы |
|
ф1г |
ф 2 , Щ, .912, 31 з (а они |
очень |
просты и составление их |
|
не |
составляет |
труда), то |
посредством программирующих |
|
98 |
|
|
|
|