- •Основные понятия теории алгоритмов
- •Конечные автоматы
- •Рекурсивные функции
- •Операция суперпозиции
- •Операции примитивной рекурсии
- •Определение минимального корня. Метод минимизации.
- •Машины Тьюринга (мт)
- •Разработка машин Тьюринга
- •Несмотря на количество лент такая машина может выполнять стандартный набор действий: -лево
- •Пример:
- •Итого, получаем следущий нам:
- •Итого, получаем следующий алгоритм перевода чисел из четверичной системы в двоичную
- •Все эти действия реализуются в виде следующего нам
Разработка машин Тьюринга
Пример №1 – Замена символа и перемещение головки.
А = {0,1,2,3,4,5,6,7,8,9}
Пусть Р не пустое слово поступающее на вход МТ. Необходимо получить число на 1 больше чем входное.
Действия:
Переместить головку к последней цифре числа;
Если эта цифра от 0 до 8, нужно заменить цифрой больше на 1 и остановиться;
Ели цифра 9 то заменить на 0 и переместиться к предыдущему разряду, т.е. сдвинуть ленту вправо. Повторяем действия 2 и 3.
Если считана пустая ячейка то число состояло из одних 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}, первый символ не пустого слова Р переместить в конец.
Действия:
Запоминаем первый символ и стираем его;
Перемещаемся в конец, на пустую ячейку;
Пишем запомненный символ.
Для запоминания символа используются состояния автомата, в данном случае: 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}, если первый и последний символы не пустого слова Р одинаковы, то слова не менять, иначе – стереть.
Действия:
Запоминаем первый символ слова, не стирая его, перемещаемся в конец слова;
Если первый и последний символы совпадают то стоп;
Если не одинаковы заменяем 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}, из входного слова Р удалить второй символ.
Действия:
Запомнить первый символ, стереть его и переместить ленту влево;
Записать запомненный символ во вторую ячейку, стоп.
|
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,с}, из входного слова Р удалить первое вхождение символа а.
Действия:
Анализируем первый символ, если это а→S0 и стоп. Если это b или c запоминаем его и стираем, переходим в соответствующее состояние;
Анализируем следующий символ если, а то вместо него пишем 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,с}, если входное слово Р не пустое, то после его первого символа вставить символ а.
Действия:
Анализируем первый символ и запоминаем его, записываем вместо него а, возвращаемся на одну позицию назад.
В пустую ячейку записываем запомненный символ и стоп.
|
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} в слово Р вставить а после первого вхождения символа с.
Действия:
Перемещаем ленту влево пока не встретим символ с;
Вместо с записываем а, перемещаемся вправо;
Запоминаем символ ячейки, записываем с, сдвигаемся вправо. Повторяем пока не дойдем до 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}, удалить из входного слова Р все символы а.
Данную задачу можно решать, зациклив алгоритм удаления заданного символа, но задача будет решаться проще, если формировать новое слово без символа а.
Действия:
Перемещаемся в конец слова и добавляем туда символ =;
Возвращаемся к началу слова;
Запоминаем первый символ и удаляем его, если это был символ а, то переходим к следующему символу. Если это другой символ, то перемещаемся в конец слова, где записываем запомненный символ;
Действия 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.
Действия:
В конец слова записываем =4;
Возвращаемся к первому символу входного слова;
Если первый символ а заменяем на А и двигаемся в конец слова, где записываем копию а. тоже самое делаем с символом b.
Возвращаемся к первому не прочитанному символу, заменяя дубликат на исходный символ.
Действия 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-количество лент
... …
... …
…
... …