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

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

Пример №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

q3

q3

q3

q3

q3

q3

q3

q3

q2

-

q2

q3

q3

q3

q3

q3

q3

q3

q3

q3

q2

q3

q4

q4 S0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q0Л

q3

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

q1

q2

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

q3

-

q4cC

q2

q2П

q3 аП

-

q4aC

q3

q2

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Л

q1

q3Л

q4

q4Л

q4Л

q4Л

q1

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П

q2

q2

q2Л

q1П

q2

q3

q4

-

-

-

q5C

q3

q3Л

q3Л

-

-

q1

q3Л

q4

q4Л

q4Л

-

-

q1

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-количество лент

...

...

...