Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UchebnoePosobie.doc
Скачиваний:
72
Добавлен:
11.11.2019
Размер:
6.36 Mб
Скачать

5.2.2. Примеры машин Тьюринга

Рассмотрим машины Тьюринга, реализующие и обеспечивающие формирование рекурсивных функций.

T1:= базовая функция Сn=0 на правой полуленте:

T1: qо|x + 1#  qk|#.

Протокол T1.

1) qо|q1# П;

2) q1|q1# П;

3) q1#q2# Л;

4) q2 #qk|C.

Текущее

Символы vt

состояние

1

#

qо

q1 # П

q1

q1 # П

q2

q2

qk |C

Пусть x = 3. Тогда для C1(3)=0 на информационной ленте машины Тьюринга будут проведены следующие преобразования:

x= 3 x= 0

# |||| #  ## ||| #  ### || #  #### | #  #####  #### | #

qn q1 q1 q1 q2 qk

T2:= базовая функция Сn=1 на правой полуленте:

T2: qо|x + 1#qk||#;

Протокол T2.

1) qо|q1# П;

2) q1|q1# П;

3) q1#q2# |Л;

4) q2 #qk|C.

Текущее

Символы vt

состояние

1

#

qо

q1

q1

q1

Q2

q2

q1 |C

T3:= базовая функция (x) = х+1 на правой полуленте:

T3: qo | x+1# qk |(õ+1)+1#.

Протокол T2..

1) qo|  q1|П; 4) q2|  q2|Л;

2) q1|  q1|П; 5) q2#  q3 # П;

3) q1 #  q2|Л; 6) q3|  qk|C;

Текущее

Символы vt

состояние

|

#

qí

q1 | П

-

q1

q1 | П

q2 | Л

q2

q2 | Л

q3 # П

q3

qk | C

-

Пусть х=3. Тогда для (3)=3+1=4 на информационной ленте машины Тьюринга будут проведены следующие преобразования:

x=3

# ||||#  # ||||# # ||||#  # ||||# # |||||#  # |||||#  # |||||# # ||||| # 

q0 q1 q1 q1 q1 q2 q2 q2

x=4

# ||||| #  # ||||| # # ||||| # # ||||| # # ||||| #

q2 q2 q2 q3 qk

T4:= базовая функция Im,n на правой полуленте:

T4: qo|1x1+1 # |2x2+1 #...#|mxm+1# ...#|nxn+1#qk|xm+1#,

где |i - слово на i-м месте информационной ленты,

|xi+1 – число “палочек”.

Чтобы найти на информационной ленте i-е слово, следует установить счетчик |m, указывающий место слова |mxm+1 в последовательности слов.

T4’: qo|m #|1x1+1#|2x2+1#...#|mxm+1#|nxn+1  qk|mxm+1.

Текущее

Символы vt

Это позволит при каждом проходе вправо, отмечая один символ в слове |m, удалять очередное слово |m-1, предшествующее |mxi+1.

Для организации вычисления такой функции необходимо увеличить число символов алфавита внешней памяти, что позволит уменьшить число состояний управляющего устройства и упорядочить весь процесс вычисления.

Пусть Vт = {|, #, (}.

Считывающая головка находится под первым символом слова счетчика |m.

состояние

|

#

)

qo

q1

-

-

q1

q1

q2

-

q2

q2

q3

-

q3

-

q3

q4

q4

q4

q5 # П

-

q5

q6

-

q8

q6

q6

-

q7

q7

-

q7

q2

q8

-

q8

q9

q9

q9

q10

-

q10

q10

q11

-

q11

q10

q12

-

q12

q13

q12

-

q13

q13

q14

-

q14

qk |C

-

-

На рис. 5. 6 приведен граф, реализующий базовую функцию Im,n.

При подаче команды “старт” стирается первый символ слова |m и начинается перемещение головки вправо.

После прочтения всех символов слова |m по команде q1#q2) П ставится скобка, закрывающая оставшиеся символы слова |m, и головка перемещается на слово |x1+1.

По команде q2| q2#П стираются все символы слова |1x1+1 и ставится закрывающая скобка q2#q3)Л. Начинается перемещение считывающей головки влево за очередным символом слова |m-2.

Так организован цикл. Затем управляющее устройство стирает второе слово, третье и т. д. пока есть символы “|” в счетчике.

После стирания всех символов в счетчике по команде q5)q8#П головка стирает закрывающую скобку, пробегает все пробелы “#”, по команде q8)q9#П фиксирует место слова |mxm+1, пробегает все символы слова |mxm+1 и продолжает удалять все слова справа от слова |mxm+1по командам q10|q10#П и q11|q10#П. Если при чтении ленты в соседних ячейках будут символы “#”, то конец и головка возвращается на первый символ слова |mxm+1 по командам: q11#q12#Л, q12#q12#Л, q12|q13|Л, q13|q13|Л, q13#q14#П и q14|qk|C.

T5:= функция предшествования -1(x) = х-1 на правой полуленте:

T5: qí | x+1 #  qk | (õ +1) - 1 #.

Протокол T5:

1) qо|q1|П; 5) q3|q3|Л;

2) q1|q1|П; 6) q3#q4#П;

3) q1 #q2#Л; 7) q4|qk|C.

4) q2|q3#Л;

Текущее

Символы vt

состояние

|

#

qо

q1 | П

-

q1

q1 | П

q2 # Л

q2

q3 # Л

-

q3

q3 | Л

q4 # П

q4

qk | C

-

T6 копирование m раз слово |x+1 на правой полуленте:

T6: qо|x+1#  qk|1x +1#|2x+1 # ..#|mx+1#.

Для того, чтобы выполнить m копий, необходимо занести на информационную ленту счетчик., т.е. изменить начальную конфигурацию машины, определяющий число копий |m:

T6: qо|m #|x+1#  qk|1x +1 # |2x+1 # ..#|mx+1#.

При каждом проходе вправо в слове |m удаляется один символ, затем выполняется обычное копирование слова |x +1, маркируя каждый переносимый символ командой q2|q3(П и закрывая слово |x+1 командой q3#q4(П. После переноса всех символов слова |x +1 головка возвращается на самый левый символ слова |m и стирает его.

Пусть Vт.={|, #, (, )}.

Текущее

Символы vt

состояние

|

#

(

)

qо

q1

-

-

q8

q1

q1

q2

-

q2

q2

q3

-

q2

q2

q3

q3

q4

-

q4

q4

q4

q5

-

-

q5

q5

-

q6

q5

q6

q3

-

-

q7

q7

q7

q7

q7

q7

q8

q9

-

q8

q8

q9

qk |C

q9

q9

q9

Процесс продолжается до тех пор, пока не будут удалены все символы в слове 1m. После этого следует удалить все вспомогательные символы "("и")" и поставить головку машины в начало первого слова |x+1 . Множество команд представлены таблицей, а работа машины показана графом на рис. 5.6.

T7:= перестановка слов на правой полуленте:

T7: qо|x+1# |y+1#  qk|y +1# |x+1#.

Протокол T7:

1)qо| q1(П; 12)q4)q4)Л;

2)q1| q1|П; 13)q5|q1(П;

3)q1# q2)П; 14)q5)q6)П;

4)q1) q2)П; 15)q6|q6|П;

5)q2| q2|П; 16)q6)q7# Л;

6)q2# q3)П; 17)q7|q7|Л;

7)q2) q3)П; 18)q7(q7#Л;

8)q3| q3|П; 19)q7)q7#Л;

9)q4 # q4|Л; 20)q7#q8#П;

10)q4| q4|Л; 21)q8# q8 #П;

11)q4( q5(П; 22)q8|qk|C.

Текущее

состояние

Символы vt

|

#

(

)

qо

q1

-

-

-

q1

q1

q2

-

q2

q2

q2

q3

-

q3

q3

q3

q4

-

-

q4

q4

-

q5

q4

q5

q1

-

-

q6

q6

q6

-

-

q7

q7

q7

q7

q7

q7

q8

qk |C

q8

-

-

T8:= сравнение длины двух слов на правой полуленте:

T 8(1): qo1x+1 #|y+1qk1|(x - y)

при x > y;

T8(2): qo1x+1 #|y+1qk3|

при x = y;

T8(3): qo |x+1 #|y+1 qk2| (y - x)

при x < y.

В таблице приведен набор команд, реализующих поставленную задачу, а ниже - граф, иллюстрирующий работу алгоритма.

таблица

Продолжение таблицы

Тек-е

сост-е

Символы vt

Тек-е

сост-е

Символы vt

|

#

)

|

#

)

qо

q1

-

q4

q4

q5

q4

q1

q1

q2

q2

q5

q1

-

q8

q2

q2

q3

-

q6

q6

q7

-

q3

q4

-

q6

q7

qk1 |C

-

-

q8

qk2 |C

qk3 |C

-

T9:= устранение пробелов между словами на правой полуленте:

Т9:qo|x1+1##...#|x2+1# qk|x1+1# |x2+1#.

Для реализации алгоритма необходим алфавит Vt = {|, #, )}.

После просмотра символов первого слова ставится “)” для ограничения переноса символов второго слова.

текущее состояние

Символы алфавита Vt

Последний символ второго слова также замещается “)” для ограничения движения вправо. После переноса всех символов второго слова устраняются “)”, и считывающая головка возвращается на первый символ первого слова.

|

#

)

qo

q1

-

-

q1

q1

q2

-

q2

q3

q2

q7

q3

q3

q4

q4

q4

q5

-

-

q5

q5

q5

q6

q6

q6

q2

-

q7

q7

q7

q8

q8

q8

q9

-

q9

qk

-

-

T10:= поиск последнего слова на правой полуленте:

T10: qo|x1+1#|x2+1#... # |xm+1  |x1+1#|x2+1#... # qk|xm+1.

Поиск крайнего правого слова на информационной полуленте завершается после нахождения не менее двух рядом стоящих #. Затем считывающая головка возвращается на первый символ последнего слова.

На рис. 5.12 представлен граф алгоритма.

Текущее состояние

Символы Vt

|

#

qo

q1

-

q1

q1

q2

q2

q1

q3

q3

q4

q3

q4

q4

q5

q5

qk|C

-

T11:= вычисление усеченного вычитания.

qk1|x-y#, если xy;

Т11: qo|x+1# |y+1# 

qk2|, если xy.

Для вычисления на машине Тьюринга усеченного вычитания можно использовать машины Т8 и Т1, изменив команды машины Т8: q8|qk2|C и q8#qk3|C на команды машины Т1:q8|q8#П, q8#Пq8#П (состояния q1 и q2 машины Т1 есть, соответственно, q8 и q9 машины T11 ).

Текущее

Символы vt

состояние

|

#

)

qо

q1

-

q1

q1

q2

q2

q2

q2

q3

-

q3

q4

-

q6

q4

q4

q5

q4

q5

q1

-

q8

q6

q6

q7

-

q7

qk1 |C

-

-

q8

q9

q9

-

q9

-

qk2|C

-

Т12:= вычисление предиката:

qk||, если Р(x, y):= “истина”,

Т12: qo|x+1# |y+1#...

qk|, если Р(x, y):= “ложь”.

Для этого можно использовать машины Тьюринга Т8 , Т1 и Т2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]