Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка_Курсовая.docx
Скачиваний:
17
Добавлен:
03.03.2016
Размер:
880.01 Кб
Скачать

3 Разработка аналитической и программной модели алгоритма для распознающей машины тьюринга

3.1 Формальное определение распознающей машины Тьюринга

Программная модель была написана с целью распознания языка

L = { wwRwR │w {0,1}* }. Обработка слова не является трудоемкой и не потребует более одной ленты.

/*Вход в машину Тьюринга. Установка разделителя в конце слова*/

0->0R

1->1R

~->*L

/*Замена "1" и "0" на символы "а" или "b"*/

0->aL

1->bL

a->aL

b->bL

*->*L

d->dL

~->~R

/*Замена "1" и "0" на "а" и "b" */

0->aL

1->bL

~->~R

/*Замена "1" и "0" на "а" и "b"*/

0->aR

1->bR

~->~R

/*Возврат в конец слова и установка признака mod 3*/

a->aR

b->bR

*->*R

~->dL

d->dR

/*Повторение действий предыдущих состояний, пока не встретим пустой символ*/

a->aR

b->bR

*->*R

d->dR

~->~L

//Если преждевременно находим пустой символ возвращаемся назад

d->~L

*->*R

Рисунок 3.1, лист 1 – Система команда МТ

/*Установка признака "0" - слово не является словом языка*/

~->0L

d->~L

*->*R

//Замена всех разделителей (кроме "*") на "1" или "0". //Конец работы машины

*->*L

b->1L

a->0L

d->dR

n->1L

0->0L

1->1L

p->0L

o->1L

h->0L

~->~R

~->~R

/*Если слово подходит по количеству символов - меняем разделитель

Возврат в конец слова*/

a->aR

b->bR

*->*R

d->mL

m->mR

p->pR

n->nR

h->hR

o->oR

~->~L

1->1R

0->0R

//Проходим снова влево, устанавливаем новый разделитель для последнего символа слова

a->pR

b->oR

m->mL

*->*L

p->pL

o->oL

0->hR

1->nR

n->nL

h->hL

/*Проходим снова влево, устанавливаем новый разделитель для предпоследнего символа слова*/

m->dL

n->nR

*->*R

~->~L

d->dR

o->oR

p->pR

h->hR

//Проходим снова влево, устанавливаем новый разделитель символа слова

h->hL

*->*L

b->nR

n->nL

a->hR

p->pL

o->oL

d->dL

m->mL

1->1R

0->0R

Рисунок 3.1, лист 2 – Система команд МТ

//Проверка на равенство двух последних триад

d->dL

*->*L

p->0R

o->1R

0->0L

1->1L

a->aR

b->bR

~->~R

// Если первый был символ "p"

*->*L

0->0L

1->1L

o->oL

p->pL

h->0R

n->nR

//Проход вправо до “*”

p->pR

o->oR

1->1R

0->0R

*->*L

//Проверка на реверс двух первых триад

0->uL

1->vL

u->uL

n->nL

h->hL

v->vL

~->~R

//Если первый был символ “0”

0->0L

1->1L

b->bL

a->aL

v->vL

u->uL

~->~R

//Проход в конец слова

0->0R

1->1R

o->oR

p->pR

n->nR

a->aR

b->bR

h->hR

u->uR

v->vR

*->*R

d->dR

m->mR

~->~L

//Замена разделителей (n->1)

*->*L

0->0L

1->1L

o->oL

p->pL

n->1R

h->hR

//Проход вправо до “*”

p->pR

o->oR

1->1R

0->0R

*->*L

// Проход вправо до “~”

0->0L

1->1L

v->vL

u->uL

b->bL

a->aL

~->~R

Рисунок 3.1, лист 3 – Система команд МТ

//Замена старого символа на новый (b->v)

b->vR

v->vR

u->uR

a->aR

//Проход вправо до границы слова

b->bR

a->aR

0->0R

1->1R

v->vR

u->uR

n->nL

h->hL

//Замена старого символа на новый (a->u)

a->uR

v->vR

u->uR

b->bR

//Проход вправо до границы слова

b->bR

a->aR

0->0R

1->1R

v->vR

u->uR

n->nL

h->hL

//Очистка всех признаков

d->~L

m->~L

*->*R

//Проход в конец слова

0->0R

1->1R

o->oR

p->pR

n->nR

a->aR

b->bR

h->hR

u->uR

v->vR

*->*R

d->dR

m->mR

~->~L

//Очистка всех признаков

d->~L

m->~L

*->*R

//Слово не принадлежит

~->0L

//Замена всех разделителей

1->1L

0->q300L

q30o->1L

p->0L

n->1L

v->1L

u->0L

h->0L

a->0L

b->1L

~->~R

//Слово принадлежит

*->*L

~->1L

Рисунок 3.1, лист 4 – Система команд МТ

3.2 Протоколы работы машины Тьюринга (на двух словах языка и двух словах, не принадлежащих языку)

Пример работы алгоритма на слове “01”, которое не является словом исходного языка приведен в таблице 3.1.

Таблица 3.1 – Протокол работы МТ на слове “01”

Шаг

Состояние

Слово на ленте

Команда

1

λ0

2

λ01λ

1 -> 1R

3

λ01λ

λ -> *L

4

λ0b

1 ->bL

5

λab*λ

0 -> aL

6

λab*λ

λ -> λR

7

λab*λ

a -> aR

8

λab

b -> bR

9

λab*λ

* -> *R

10

λab*λ

~ -> ~L

11

λab*λ

* -> *R

12

λab*0

~ -> 0L

13

λab*0

* -> *L

14

λab*0

b -> 1L

15

λa1*0

a -> 0L

16

λ01*0

~ -> ~R

λ01*0

В таблице 3.2 представлен протокол работы машины Тьюринга на пустом слове. Это слово принадлежит языку, что совпадает с результатом работы машины.

Таблица 3.2 – Проток работы МТ на пустом слове

Шаг

Состояние

Слово на ленте

Команда

1

λλλ

2

λ

R

3

λ*λ

4

λ*λ

5

λ*λ

6

λ*λ

7

λ*λ

8

λ

9

λ*λ

10

λ*1

11

λ*1

12

λ*1

13

λ*1

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

Таблица 3.3 – Протокол работы МТ на слове “1”

Шаг

Состояние

Слово на ленте

Команда

1

λ1λ

2

λ1*

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

3

λb*

1 ->bL

4

λb*

-> R

5

λb*

b -> bR

6

λb*

* -> *R

7

λb*λ

-> L

8

λb*λ

* -> *R

9

λb*0

-> 0L

10

λb*0

* -> *L

11

λ1*0

b -> 1L

12

λ1*0

-> R

13

λ1*0

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

3.3 Программная модель машины Тьюринга

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

Программная модель распознающей машины Тьюринга реализована на языке программирования С#. Исходный код программы представлен в приложении Д.

Лента моделируется с помощью множества элемента управления Label, а создается в момент запуска пользователем программы. При должной настройки параметров экземпляров этого класса, получается точная графическая модель машины Тьюринга.

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

В программе предусмотрено пошаговое прохождение слова с выполнением команд, автоматическая обработка слова, построение и сохранение графика алгоритма.

3.4 Протоколы работы машины Тьюринга, построенные программно (на двух словах языка и двух словах, не принадлежащих языку)

Протоколы работы машины Тьюринга, построенные программно, приведены в приложении В. Стрелкой в них выделено положение УУ. Символом “~” обозначен пустой символ.

3.5 Расчет временной сложности (график функции временной сложности)

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

Как видно из эскиза, график имеет полиномиальную зависимость 2-го порядка с неединичными коэффициентами. Также, из-за резких скачков на точках, кратных трем, можно определить, что график описывается системой из трех квадратичных уравнений.

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

Для слов длины кратной трем используется проход до конца слова и обратно за 2(n+2) шагов, после чего делается снова возврат на конец слова и начинается сравнение частей слов, тактами длиной (n+2)/3.

Для слов длины не кратной трем используется 2(n+2) шагов для установки разделителя, после чего осуществляется (n+2)/3 шагов для проверки слова на четность. Так как слово не принадлежит алфавиту, то делается возврат на начало слова, длиной n+2.

Таким образом, график состоит из трех частей, и экспериментально были выведены уравнения определенных точек. Уравнения приведены формулой 3.3.

(3.3)

Построенный программой график практически совпадает с теоретическими расчетами. На рисунке 3.2 приведен график сложности алгоритма.

Рисунок 3.2 – График сложности алгоритма