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

Несмотря на количество лент такая машина может выполнять стандартный набор действий: -лево

-право

-стоять на месте

И при этом менять или нет содержимое считанной ячейки

Пример:

Разработать МТ, которая позволяет сложить 2 числа в троичной системе исчисления

(на 1ленте)x=x+y(2лента)

Результат поверх первого оператора

Σ

0

0

0

1

1

1

2

2

2

0

1

2

Q

0

1

2

0

1

2

0

1

2

0

1

2

0Л0Л

0Л1Л

0Л2Л

ЛЛ

ЛЛ

ЛЛ

ЛЛ

ПП

ЛЛ

ЛЛ

ЛСЛ

ЛСЛ

ПСЛ

ЛПС

ЛЛС

ЛПС

ПП

1ПП

2ПП

1ПП

ПП

0ПП

2ПП

СС

0ПП

1ПП

0ПП

1ПП

2ПП

СС

СС

СС

1ПП

2ПП

0ПП

2ПП

0ПП

1ПП

0ПП

1СС

1ПП

2ПП

1ПП

2ПП

ОПП

1ПП

2ПП

0ПП

Композиции машин Тьюринга

С математической точки зрения машина Тьюринга — просто определенный алгоритм для переработки слов.

Операции композиции, выполняемые над алгоритмами, позволяют образовы-вать новые, более сложные алгоритмы из ранее известных простых алгоритмов. Поскольку машина Тьюринга—алгоритм, то операции композиции применимы и к машинам Тьюринга. Рассмотрим основные из них, а именно: произведение, возве-дение в степень, итерацию.

Пусть заданы машины Тьюринга Т1 и Т2, имеющие какой-то общий внешний алфавит А = {а0, а1,..., аm} и внутренние алфавиты Q1 = {q0, q1,..., qn} и cоответственно Q2 = {q0,q1,…,qt}. Композитом, или произведением, машины Т1 на машину T2 будем называть машину Т с тем же внешним алфавитом А= {а0, а1,..., аm}, внутренним алфавитом Q = {q0, q1,...,qn, qn+1, ...,qn+t} и программой, получающейся следующим образом. Во всех командах Т1 содержащих заключитель-ный символ q0, заменяем его на символ qn+1. Все остальные символы в командах T1 оставляем неизменными. В командах Т2, напротив, символ q0 оставляем неизменным, но зато каждый из остальных символов заменяем символом qn+j. Совокупность всех команд Т1 и Т2, измененных указанным способом, и будет программой композита или произведения машин T1 и T2. Произведение машины T1 на машину Т2 обозначается через Т = T1 • T2, или Т = T1 * Т2.

Таким же образом определяется операция возведения в степень: n-й степенью машины T называется произведение T ... Т с n сомножителями. Возведение в степень. Это такая МТ, которая повторяет свой раб цикл n раз, при этом заключит. состояние этой МТ "склеивается" со своим же начальным состоянием.

Операция итерации применима к одной машине и определяется следующим образом. Пусть машина Т1 имеет несколько заключительных состояний. Выберем ее r-е заключительное состояние и отождествим его в схеме машины с ее начальным состоянием. Полученная машина является результатом итерации машины Т1T = Т1. Итерация. Это операция применима, когда в Q существует несколько заключит. состояний. Выбирается одно или несколько из них и отождествляется с начальным состоянием этого же алгоритма

Итерация

Применима только к одной машине

Суть операции:

Пусть некоторая машина Т1 имеет несколько заключительных состояний. Выберем некоторое частное заключительное состояние и отождествим его с начальным состоянием данной машины. Такая машина обозначается .r- заключительное состояние по которому выполнена итерация.

Если исходная машина Т1 имеет одно заключительное состояние, то результат ее итерации – это машина без заключительного состояния.

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

Пример:

Дана МТ с таблицей состояний

-стирает все 1 слева

0

1

-Поиск первой группы единиц после группы 0 справа от начальной ячейки и останавливается после последней 1 в этой группе

0

1

-Начинает работу с заполненной ячейки. Движется влево до тех пор пока не встречает группу 1 и останавливается после этой группы через 2 ячейки

0

1

-конечные

0

1

Распознавание символа

-“0”

-“1”

0

1

П

С

Нормальные алгоритмы Маркова (НАМ)

Алгоритмическая система, основанная на соответствии м/у словами в абстрактном алфавите включает в себя объекты двух видов

-элементарные операторы (ЭО)

-элементарные распознаватели 0(ЭР)

ЭО- просто задаваемые алфавитные операторы с помощью последовательного выполнения которых реализуется конкретные алгоритмы

ЭР- распознавание тех или иных свойств перерабатываемой алгоритмом информации и изменения ее в зависимости от результата распознавания с помощью следующих за ними ЭО

Для составления порядка ЭО и ЭР удобно пользоваться ориентированным графом который называется граф-схемой алгоритма

Вершина с одним входом- входная

Вершина с одним выходом- выход

ЭР-2входа и 2выхода

ЭО- 1вход 1 выход

Если входное слово P, поданое на вход граф-схемы, проходя через ее вершины преобразуется и попадает на выход через конечное число шагов, то считается, что этот алгоритм применим к слову P, т.е слово P входит в область определения алгоритма.

Результатом воздействия на входное слово P будет слово на выходе граф-схемы.

В нормальных алгоритмах в качестве элементарного оператора используется оператор подстановки, а в качестве ЭР – распознаватель вхождения( входит ли подслово Р в слово А)

Оператор подстановки заменяет найденное подслово Р на некоторое заданное слово S.

p->s

bc->cb- оператор подстановки

abcbabca->acbabca->acbacba

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

Алгоритмы, составленные только из распозн. вхожд. и операторов подстановок называются обобщенными нормальными алгоритмами

ba->ab

bc->ba

bb->ac

bcbaab -> bcabab -> bcaabb -> baaabb -> abaabb -> aababb -> aaabbb -> aaaacb

Нормальными алгоритмами называются такие обобщенные нормальные алгоритмы граф-схемы которых удовлетворяют условиям:

  1. Все узлы-распознаватели упорядочиваются и нумеруются от 1 до n.

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

Входная вершина подсоединяется к первому распознавателю

Если ЭО соединяется с выходом он называется заключительным

Пример:

A= {+, 1}

1) ‘1+’->’11’

2)’1’->’1’

P=’11+11+1’->’1111+1’->11111->11111

Наличие в нормальных алгоритмах двух подстановок являются необходимыми условиями универсальности нормального алгоритма т.е возле построения нормального алгоритма эквивалентного любому наперед заданному алгоритму.

Универсальность формируется из принципа нормализации для любого алгоритма в произведении конечном алгоритму А можно построить эквивалентный ему нормальный алгоритм алфавита А.

Понятие “над алфавитом А” в отличии от “ в алфавите А” означает, что в нормальном алгоритме используются символы, отсутствовавшие в А, но этот алгоритм обработка слова в алфавите А и результатом есть слова в алфавите А.

Одноместная частичная, словарная функция F(p) заданная в алфавите А называется нормально вычислимой, если существует нормальный алгоритм N над алфавитом А такой, что

для каждого слова р в алфавите А выполнено равенство F(p) —N(p).

Пример:

F(p)=pa F(p)=N(p)

A={0,1}

Ā={0,1,2} расширяем исходный алфавит А

  1. 20->02 ->удаление символа слева

  2. 2` -> `2;

  3. 2-> Q

  4. ->2 -дописываем символ слева

F(0110)=0110a

_0110->20110->02110->01210->01102->0110a

Основные выводы по Нормальным алгоритмам Маркова:

  1. В нормальных алгоритмах Маркова используется элементарное действие – подстановка. Формирующие подстановки являются записью выражения £->ϐ, где £ и ϐ- любые слова. При этом £- левая часть формулы, ϐ- правая.

  2. Суть подстановки сводится к тому, что во входном слове отыскивается часть, совпадающая с £ и заменяется ϐ, остальные части слова не меняются.

  3. Если £ входит в P, то говорят, что формула применима и к P

  4. Если £ не входит в P, то подстановка не выполняется и формула не выполняема к P.

  5. Если £ входит несколько раз, то на правую часть (P) заменяется только первое входное £

  6. Если ϐ- пустое слово, то из P удаляется £

  7. Если £- пустое слово, то слева к слову P значения ϐ

НАМ- называется непустой конечный упорядоченный набор формул подстановок

При этом используется 2 вида стрелок ->(Обычная подстановочная)

->| (Заключительная подстановка)

|-> (Заключительная подстановка)

->.(Заключительная подстановка)

Разработать Нормальный алгоритм Маркова означает определить набор формул.

Правила выполнения НАМ:

  1. На каждом шаге входящие в НАМ формулы просматривается и выбирается первая из формул применимая к З. Выполняется подстановка и выполняется новое слово P`

  2. На следующем шаге в качестве входного берется слово P` и к нему применяется (1) . Получаем P`` и т.д

В НАМ после получения промежуточного слова формулы просматриваются сначала. Если была применена заключительная формула на очередном этапе , то работа НАМ прекращается.

Если на очередном шаге не применима ни одна из формул НАМ тоже прекращаем работу

Примеры:

Пример 1

Вставка и удаление символа

Дан алфавит А{a,b,c,d} необходимо разработать алгоритм, который заменяет первое вхождение “bb” на “ddd” ,а также удалить все символы “c”.

Например: abbcabbca -> adddabba

Решение.

Прежде всего отметим, что в НАМ, в отличие от машины Тьюринга, легко реализуются вставки и удаления символов. Вставка новых символов в слово- это замена некоторого подслова на подслово с большим числом символов; например, с помощью формулы bb -> ddd два символа будут заменены на три символа. При этом не надо заботиться о том, чтобы предварительно освободить место для дополнительных символов, в НАМ слово раздвигается автоматически. Удаление же символов- это замена некоторого подслова на подслово с меньшим числом символов; например, удаление символа “c” реализуется формулой “c->” (с пустой правой частью). При этом никаких пустых позиций внутри слова не появляется, сжатие слова в НАМ происходит автоматически.

С учетом сказанного нашу задачу должен, казалось бы решать такой НАМ:

Однако это не так. Проверим этот НАМ на входном слове abbcabbca

abbcabbca -> adddcabbca -> adddcadddca -> adddadddca -> …

Как видно, заменив первое вхождение bb на ddd, этот НАМ не перешел сразу к удалению символов “c” , а стал заменять и другие вхождения bb. Почему?

Напомним, что на каждом шаге работы НАМ формулы подстановки всегда просматриваются сверху вниз начиная с первой из них. Поэтому, пока применима первая формула, она и будет применяться, блокируя доступ к остальным формулам. Это означает, что в НАМ важен порядок перечисления формул подстановки.

Учтем это и переставим наши две формулы

Проверим этот новый алгоритм на том же входном слове:

abbcabbca -> abbabbca -> abbabba -> adddabba -> adddaddda

Итак, НАМ сначала удалил все символы “c” и только затем заменил первое вхождение bb на ddd. Однако НАМ на этом не остановился и стал заменять остальные вхождения bb. Почему? Дело в том, что, пока применима хотя бы одна формула, НАМ продолжает свою работу. Но нам этого не надо, поэтому мы должны принудительно остановить НАМ после этого, как он заменил первое вхождение bb. Вот для этого и нужны заключительные формулы подстановки, после применения которых НАМ останавливается. Следовательно, в нашем алгоритме обычную формулу bb -> ddd надо заменить на заключительную формулу bb |-> ddd:

Вот теперь наш алгоритм будет работать правильно:

abbcabbca -> abbabbca -> abbabba |-> adddabba

Слово, которое получилось после применения заключительной формулы, является выходным словом, т.е результатом применения НАМ к заданному входному слову.

Проверим наш НАМ еще и на входном слове, в которое не входит bb:

dcacb -> dacb -> dab

К последнему слову (dab) неприменима ни одна формула, поэтому, согласно определению НАМ алгоритм останавливается и это слово объявляется выходным.

Пример 2

Перестановка символов

Дан алфавит А={a,b} ,преобразовать P так, чтобы вначале были символы “a”, а в конце “b” .

Например : babba -> aabbb

Решение.

Казалось бы для решения этой задачи нужен сложный НАМ. Однако это не так, задача решается с помощью НАМ, содержащего всего одну формулу:

ba->ab

Пока в слове P справа хотя бы от одного символа “b” есть символ “a”, эта формула будет переносить “a” налево от этого “b”. Формула перестает работать, когда справа от “b” нет ни одного “a”, это означает, что все “a” оказались слева от b. Например:

babba -> abbba -> abbab -> ababb -> aabbb

Алгоритм остановился на последнем слове, т.к к нему уже неприменима наша формула.

Этот и предыдущий примеры показывают, что в НАМ, в отличие от машины Тьюринга, легко реализуются подстановки, вставки, и удаления символов. Однако в НАМ возникает другая проблема: как зафиксировать символ(подслово), который должен быть обработан? Рассмотрим эту проблему на следующем примере.

Пример 3 (использование спецзнака) А={а,b}. Удалить из непустого слова Р его первый символ. Пустое слово не менять.

Решение.

Ясно, что удалив первый символ слова, надо тут же остановиться. Поэтому, казалось бы, задачу решает следущий НАМ:

Однако это неправильный алгоритм, в чём можно убедиться, применив его к слову bbaba:

bbaba |-> bbba

Как видно, этот НАМ удалил не первый символ слова, а первое вхождение символа “a”, а это разные вещи. Данный алгоритм будет правильно работать, только если входное слово начинается с символа “а”. Ясно, что перестановка формул в этом НАМ не поможет, т.к. тогда он будет, напротив, неправильно работать на словах, начинающихся с “а”.

Что делать? Надо как-то зафиксировать, пометить первый символ слова, например, поставив перед ним какой-либо знак, скажем *

отличный от символов алфавита слова. После этого уже можно с помощью формул вида *ξ|-> заменить этот знак и первый символ ξ слова на пусто и остановиться: bbaba -> *bbaba |-> baba

А как поставить * перед первым символом? Это реализуется формулой ->* с пустой левой частью, которая, по определению, приписывает свою правую часть слева к слову.