Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория алгоритмов (конспект).doc
Скачиваний:
95
Добавлен:
03.03.2016
Размер:
1 Мб
Скачать
☆

Разработка машин Тьюринга

Пример №1 – Замена символа и перемещение головки.

А = {0,1,2,3,4,5,6,7,8,9}

Пусть Р не пустое слово поступающее на вход МТ. Необходимо получить число на 1 больше чем входное.

Действия:

  1. Переместить головку к последней цифре числа;

  2. Если эта цифра от 0 до 8, нужно заменить цифрой больше на 1 и остановиться;

  3. Ели цифра 9 то заменить на 0 и переместиться к предыдущему разряду, т.е. сдвинуть ленту вправо. Повторяем действия 2 и 3.

  4. Если считана пустая ячейка то число состояло из одних 9 и заменяем S0 на 1 и стоп.

0

1

2

3

4

5

6

7

8

9

S0

q0

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q1п

q1

q3 1С

q3 2С

q3 3С

q3 4С

q3 5С

q3 6С

q3 7С

q3 8С

q3 9С

q2 0П

-

q2

q3 1С

q3 2С

q3 3С

q3 4С

q3 5С

q3 6С

q3 7С

q3 8С

q3 9С

q2 0П

q3 1С

q4

q4 S0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q3 1С

q4 – добавляем что бы стирать незначащие нули.

q02345

q0 2→ q0Л 2q0345

q03→ q0Л 23q045

q04→ q0Л 234q05

q05→ q0Л 2345q0

q0S0→ q1П 234q15

q15→ q36С 234q36

Пример №2 – Анализ символов.

Дан алфавит {a,b,c}, первый символ не пустого слова Р переместить в конец.

Действия:

  1. Запоминаем первый символ и стираем его;

  2. Перемещаемся в конец, на пустую ячейку;

  3. Пишем запомненный символ.

Для запоминания символа используются состояния автомата, в данном случае: q1 = a, q2 = b, q3 = c.

a

b

c

S0

q0

q1 S0Л

q2 S0Л

q3 S0Л

q4C

q1

q1Л

q1Л

q1Л

q4aC

q2

q2Л

q2Л

q2Л

q4bC

q3

q3Л

q3Л

q3Л

q4cC

q0baca

q0b→ q2 S0Л q2aca

q2a→ q2Л aq2ca

q2c→ q2Л acq2a

q2a→ q2Л acaq2

q2 S0→q4bC acaq4b

Пример №3 – Сравнение символов и стирание слова.

Дан алфавит {a,b,c}, если первый и последний символы не пустого слова Р одинаковы, то слова не менять, иначе – стереть.

Действия:

  1. Запоминаем первый символ слова, не стирая его, перемещаемся в конец слова;

  2. Если первый и последний символы совпадают то стоп;

  3. Если не одинаковы заменяем S0 и двигаемся вправо. Повторяем это действие пока не дойдем до S0.

a

b

c

S0

q0

q1Л

q2Л

q3Л

q8C

q1

q1Л

q1Л

q1Л

q4П

q2

q2Л

q2Л

q2Л

q5П

q3

q3Л

q3Л

q3Л

q6П

q4

q8C

q7 S0П

q7 S0П

-

q5

q7 S0П

q8 S0C

q7 S0П

-

q6

q7 S0П

q7 S0П

q8 S0C

-

q7

q7 S0П

q7 S0П

q7 S0П

q8C

q0babc

q0b→ q2Л bq2abc

q2a→ q2Л baq2bc

q2b→ q2Л babq2c

q2c→ q2Л babcq2

q2S0→ q5П babq5c

q5c→ q7 S0П baq7b

q7b→ q7 S0П bq7a

q7a→ q7 S0П q7b

q7b→ q7 S0П q7S0

q7S0→ q8C q8S0

Пример №4 – Удаление символов.

Дан алфавит {a,b}, из входного слова Р удалить второй символ.

Действия:

  1. Запомнить первый символ, стереть его и переместить ленту влево;

  2. Записать запомненный символ во вторую ячейку, стоп.

a

b

S0

q0

q1 S0Л

q2 S0Л

q3C

q1

q3aC

q3aC

q3aC

q2

q3bC

q3bC

q3bC

q0bab

q0b→ q2 S0Л q2ab

q2 a→ q3bC q3bb

Пример №5 – Сжатие слова.

Дан алфавит {a,b,с}, из входного слова Р удалить первое вхождение символа а.

Действия:

  1. Анализируем первый символ, если это а→S0 и стоп. Если это b или c запоминаем его и стираем, переходим в соответствующее состояние;

  2. Анализируем следующий символ если, а то вместо него пишем b или c и стоп. Если другой запоминаем и пишем предыдущий запомненный символ.

a

b

c

S0

q0

q3 S0C

q1 S0Л

q2 S0Л

q3C

q1

q3bC

q1bЛ

q2bЛ

q3bC

q2

q3cC

q1сЛ

q3сЛ

q3cC

q0baac

q0b→ q1 S0Л q1aac

q1 a→ q3bC q3bac

Пример №6 – Вставка символа в слово.

Дан алфавит {a,b,с}, если входное слово Р не пустое, то после его первого символа вставить символ а.

Действия:

  1. Анализируем первый символ и запоминаем его, записываем вместо него а, возвращаемся на одну позицию назад.

  2. В пустую ячейку записываем запомненный символ и стоп.

a

b

c

S0

q0

q1 аП

q2 аП

q3 аП

q4C

q1

-

-

-

q4aC

q2

-

-

-

q4bC

q3

-

-

-

q4cC

q0bbac

q0b→ q2 aП q2S0abac

q2 S0→ q4bC q4babac

Пример №7 – Раздвижка слова.

Входной алфавит {a,b,c} в слово Р вставить а после первого вхождения символа с.

Действия:

  1. Перемещаем ленту влево пока не встретим символ с;

  2. Вместо с записываем а, перемещаемся вправо;

  3. Запоминаем символ ячейки, записываем с, сдвигаемся вправо. Повторяем пока не дойдем до S0, вместо которого пишем запомненный символ и стоп.

a

b

c

S0

q0

q0Л

q0Л

q1 аП

q4C

q1

q2 cП

q3 cП

-

q4cC

q2

q2П

q3 аП

-

q4aC

q3

q2 bП

q3П

-

q4bC

q0abac

q0a→ q0Л aq0bac

q0b→ q0Л abq0ac

q0a→ q0Л abaq0c

q0c→ q1аП abq1aa

q1a→ q2cП aq2bca

q2b→ q3аП q3aaca

q3a→ q2bП q2S0baca

q2S0→ q4aC q4abaca

Пример №8 – Формирование слова на новом месте.

Дан алфавит {a,b,c}, удалить из входного слова Р все символы а.

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

Действия:

  1. Перемещаемся в конец слова и добавляем туда символ =;

  2. Возвращаемся к началу слова;

  3. Запоминаем первый символ и удаляем его, если это был символ а, то переходим к следующему символу. Если это другой символ, то перемещаемся в конец слова, где записываем запомненный символ;

Действия 2 и 3 повторяем до тех пор пока первым символом слова не окажется знак =, удаляем его и останавливаем МТ.

a

b

c

S0

=

q0

q0Л

q0Л

q0Л

q1=П

-

q1

q1П

q1П

q1П

q2Л

q1П

q2

q2S0Л

q3S0Л

q4S0Л

-

q5S0C

q3

q3Л

q3Л

q3Л

q1bП

q3Л

q4

q4Л

q4Л

q4Л

q1cП

q4Л

q0cba

q0c→ q0Л c q0ba

q0b→ q0Л cb q0a

q0a→ q0Л cba q0

q0S0→ q1=П cb q1a=

q1a→ q1П c q1ba=

q1b→ q1П q1cba=

q1c→ q1П q1S0cba=

q1S0→ q2Л q2cba=

q2c→ q4S0Л q4ba=

q4b→ q4Л b q4a=

q4a→ q4Л ba q4=

q4=→ q4Л ba= q4

q4S0→ q1cП ba q1=c

q1=→ q1П b q1a=c

q1a→ q1П q1ba=c

q1b→ q1П q1S0ba=c

q1S0→ q2Л q2ba=c

q2b→ q3S0Л q3a=c

q3a→ q3Л a q3=c

q3=→ q3Л a= q3c

q3c→ q3Л a=c q3

q3S0→ q1bП a= q1cb

q1c→ q1П a q1=cb

q1=→ q1П q1a=cb

q1a→ q1П q1S0a=cb

q1S0→ q2Л q2a=cb

q2a→ q2S0Л q2=cb

q2=→ q5S0C q5S0cb

Пример №9 – Фиксирование места на ленте.

Входной алфавит {a,b} удвоить входное слово Р, поставить между ним и его копией =.

Для фиксирования позиции в которую необходимо вернуться используется метод замены считаного символа его дубликатом: а→А, b→B.

Действия:

  1. В конец слова записываем =4;

  2. Возвращаемся к первому символу входного слова;

  3. Если первый символ а заменяем на А и двигаемся в конец слова, где записываем копию а. тоже самое делаем с символом b.

  4. Возвращаемся к первому не прочитанному символу, заменяя дубликат на исходный символ.

Действия 3 и 4 повторяем до тех пор пока не скопированы все символы.

a

b

А

В

S0

=

q0

q0Л

q0Л

-

-

q1=П

-

q1

q1П

q1П

q2aЛ

q2bЛ

q2Л

q1П

q2

q3AЛ

q4BЛ

-

-

-

q5C

q3

q3Л

q3Л

-

-

q1aП

q3Л

q4

q4Л

q4Л

-

-

q1bП

q4Л

q0ba

q0b→ q0Л bq0a

q0a→ q0Л baq0

q0S0→ q1=П bq1a=

q1a→ q1П q1ba=

q1b→ q1П q1S0ba=

q1 S0→ q2Л q2ba=

q2b→ q4BЛ Bq4a=

q4a→ q4Л Baq4=

q4=→ q4Л Ba=q4

q4S0→ q1bП Baq1=b

q1=→ q1П Bq1a=b

q1a→ q1П q1Ba=b

q1B→ q2 bЛ bq2a=b

q2a→ q3AЛ bAq3=b

q3=→ q3Л bA=q3b

q3b→ q3Л bA=bq3

q3S0→ q1аП bA=q1ba

q1b→ q1П bAq1=ba

q1=→ q1П bq1A=ba

q1A→q2aЛ baq2=ba

q2=→q5C baq5=ba

Машина Тьюринга с двумя выходами

Рассмотрим устройство МТ добавив в устройство управления машиной некоторое состояние При этом -конечное, тогда МТ переходит весли оно принимает слово х и запрещает-MT с двумя выходами

Определить имеется ли во входном слове подслово System

System

S

Y

T

E

M

др

Л

Л

Л

Л

С

Л

Л

Л

Л

Л

C

Л

Л

Л

Л

Л

С

Многоленточная машина Тьюринга

Схема машины:

▼

Устройство управления машины в каждый момент времени находится в одном из состояний множества q. Конфигурация машины считается заданной, если известно начальное состояние, входные слова каждой из лент и указана какая из ячеек каждой ленты считывается в данный момент конфигурация машины задается последовательно, где n-количество лент

... …

... …

…

... …