Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПЗ_03

.doc
Скачиваний:
20
Добавлен:
09.02.2015
Размер:
99.33 Кб
Скачать

4

ПЗ-03 Нормальные алгоритмы Маркова

1 Цель занятия изучить методику разработки и трассировки работы нормальных алгоритмов Маркова (НАМ).

2 Краткие методические указания. Любое преобразование информации можно свести к преобразованию слов некоторого алфавита. Например =1.4142… , =1.7120 описание преобразования обозначения величины корня из двух и трех в их значения в виде чисел. Однако такое перечисление значений не обладает свойством массовости. А калькулятор, из которого взяты эти значения, выполняет алгоритм, который этим свойством обладает. На этом занятии мы изучим методику описания и трассировки алгоритмов предложенных советским ученым Марковым. На сайте http://cmcmsu.no-ip.info/1course/alg.schema.nam.htm# дано краткое описание методики описания алгоритмов Маркова и размещен эмулятор, который выполняет эти алгоритмы.

Рассмотрим пример построения и трассировки работы НАМ. Рассматриваются слова в алфавите А={0,1}. Требуется описать НАМ, который заменит в слове из алфавита А все 0 на 1 и 1 на 0.

Нормальный алгоритм может быть таким:

0→1

1→0

Однако этот алгоритм не результативен. Он завершается только для пустого слова, так как в нем нет символов. Для любого другого слова из алфавита А алгоритм будет бесконечно заменять значение первого символа. Для получения результативного алгоритма введем в алфавит дополнительный символ, например *. Этот символ (маркер), будет обозначать позицию обрабатываемого символа и позволит завершить выполнение за конечное число шагов.

Алгоритм может быть таким:

1 *0→1* Обработка очередного символа 0 и сдвиг маркера к следующему символу;

2 *1→0* Обработка очередного символа 1 и сдвиг маркера к следующему символу;

3 * Заключительная формула преобразования и стирание маркера;

4 →* Установка маркера перед первым символом слова.

Этот НАМ состоит из четырех формул подстановки. Первые две формулы заменяют значение символа и продвигают символ * - маркер позиции. Третья формула является заключительной. Она выполняется, если маркер достиг конца слова. В трассе мы будем записывать шаги выполнения алгоритма. Вначале будем записывать состояние слова с подчеркиванием обнаруженного фрагмента для замены, затем номер формулы подстановки в круглых скобках, затем вид формулы подстановки и результат подстановки. Знак → означает обычную подстановку, а знак  - заключительную.

Трасса работы алгоритма для слова 1001 будет следующей

1001 (4) → *1001 Ставим дополнительный символ перед словом

*1001 (2)→ 0*001 Заменяем первую 1 на 0 и продвигаем *

0*001 (1)→ 01*01 Заменяем 0 на 1 и продвигаем *

01*01 (1)→ 011*1 Заменяем 0 на 1 и продвигаем *

011*1 (2)→ 0110* Заменяем 1 на 0 и продвигаем *

0110* (3) 0110 Стираем * и завершаем

В рабочее поле эмулятора не следует записывать номера правил.

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

Рассмотрим решение некоторых задач из [1].

1 Замена bb на ddd и стирание с в словах алфавита А={abcd}.

c->

bb=>ddd

1 Стираем в слове все с

2 заменяем первую пару bb на ddd.

Для слова abcdbbbcd получим трассу выполнения.

аbcdbbbcd (1)→abdbbbcd исключили первую букву с

abdbbbcd (1)→abdbbbd исключили вторую букву с

abdbbbd (2)→abddddbd заменили bb на ddd

Завершили так как ни одно из правил не применяется.

После применения алгоритма к слову abcdbbbcd получим Результат: abddddbd

bbcddabbcd - Результат: dddddadddd

cbbbbdcbba - Результат: dddddddddda

2 Размещаем в слове сначала буквы а, а затем b.

ba->ab

abbabbaaabb (1)→ababbbaaabb

ababbbaaabb (1)→aabbbbaaabb

aabbbbaaabb (1)→ aabbbabaabb

aabbbabaabb (1)→ aabbabbaabb

aabbabbaabb (1)→ aababbbaabb

aababbbaabb (1)→ aaabbbbaabb

aaabbbbaabb (1)→ aaabbbababb

aaabbbababb (1)→ aaabbabbabb

aaabbabbabb (1)→ aaababbbabb

aaababbbabb (1)→ aaaabbbbabb

aaaabbbbabb (1)→ aaaabbbabbb

aaaabbbabbb (1)→ aaaabbabbbb

aaaabbabbbb (1)→ aaaababbbbb

aaaababbbbb (1)→ aaaaabbbbbb

Алгоритм завершен так как нет подстановок.

3 стираем первый символ в слове алфавита A={a,b}

*a=>

*b=>

* =>

->*

(4) Устанавливаем символ * перед словом.

(1,2) Удаляем первый символ и завершаем.

(3) Завершение для пустого слова.

baab (4)→ *baab

*baab (2)→ aab

4 Записать символ а в конец слова алфавита А={a,b}.

*a->a*

*b->b*

*=>a

->*

(4) устанавливаем маркер * перед словом.

(1,2) Сдвигаем маркер к концу слова.

(3) Завершаем с вставкой символа а вместо маркера в конце слова.

Нормальный алгоритм Маркова целесообразно разрабатывать поэтапно. Вначале описать процесс подготовки к решению основной задачи, затем последовательно описывать остальные процессы. Рассмотрим процесс описания алгоритма перевода унарного числа в позиционное двоичное число.

Перевод унарного числа в двоичную систему счисления.

1-й шаг(H1). Маркер = вправо.

1) =| --> |= Двигаем маркер = вправо

2) = -->. = Завершаем, если он справа

3) ^ --> = Устанавливаем маркер = в начале слова.

Применяя алгоритм к слову ||||| получим Результат: |||||=.

2-й шаг(Н2). Маркер влево.

Деление на 2 будем делать двигая маркер вправо на две единицы. Но маркер = уже использовался. Поэтому вместо завершающего правила 2) = -->. = выполняем правило установки нового маркера * в правиле 4. Добавляем правило 2 сдвига маркера * влево и завершаем в правиле 3 при достижении маркером * начала слова.

Новый алгоритм H2 получаем как композицию алгоритма H2 и H1. Для этого вместо подчеркнутого заключительного правила в алгоритме Н1 записываем правила алгоритма Н2. Алгоритм Н2 работает со словом Р=, которое получено после работы алгоритма Н1 со словом Р Н2=Н2(Н1(Р)).

1) =| --> |= Двигаем маркер = вправо H1

2) |* --> *| Двигаем маркер * влево H2

3) * -->. * Завершаем, если маркер * слева. H2

4) = --> *= Установка нового маркера * справа H2

5) ^ --> = Устанавливаем маркер = в начале слова. H1

Применяя алгоритм к слову ||||| получим Результат: *|||||=

3-й шаг (Н3). Получаем остаток от деления на 2

После перемещения маркера * в начало слова заменяем его на маркер & (правило 6) и продвигаем его на две единицы вправо с заменой пары единиц на одну (деление). Завершаем (4,5) после того как маркер & достигнет маркера =.

Новый алгоритм Н3=Н3(Н2(Н1(Р))) получаем заменяя заключительное правило алгоритма Н2 алгоритмом Н3.

1) =| --> |= Двигаем маркер = вправо Н1

2) |* --> *| Двигаем маркер * влево Н2

3) &|| --> |& Двигаем маркер & вправо и делим, заменяя || на | Н3

4) |&= -->. |*=0 Завершаем с записью остатка 0, если получили |&= Н3

5) &|= -->. *=1 Завершаем с записью остатка 1, если получили &|= Н3

6) * --> & Замена маркера * на & Н3

7) = --> *= Установка нового маркера * справа Н2

8) ^ --> = Устанавливаем маркер = в начале слова. Н1

Применяя алгоритм к слову ||||| получим Результат: ||*=1

4-й шаг(Н4). Перевод унарного числа в двоичную систему счисления.

В правилах (4,5) не завершаем, делаем замену маркера & на маркер *. После этого маркер * сдвигаем в начало слова (частного) и определяем новый остаток.

Алгоритм Н4=Н4(Н3(Н2(Н1(Р)))) получим как композицию алгоритма Н4 и алгоритма Н3, заменив заключительные правила алгоритма Н3 обычными правилами подстановки и добавив заключительное правило алгоритма Н4 (*= -->. =).

1) =| --> |= Н1

2) |* --> *| Н2

3) &|| --> |& Н3

4) |&= --> |*=0 Н3

5) &|= --> *=1 Н3

6) *= -->. = Н4

7) * --> & Н3

8) = --> *= Н2

9) ^ --> = Н1

Применяя алгоритм к слову |||||, которое представляет число 5 получим Результат: =101.

Применеие алгоритма Н4 можно продемонстрировать следующей последовательностью преобразований

m

3 Порядок выполнения задания.

3.1 Изучить методику разработки НАМ [1] и методику трассировки работы НАМ .

3.2 Изучить порядок разработки НАМ для перевода числа из унарной системы в двоичную.

3.3 Описать НАМ и выполнить трассировку работы НАМ для задачи 2.i из [1], где i Ваш номер варианта в классном журнале.

3.4 Описать НАМ для перевода унарного числа в систему счисления с основанием (№mod5)+3, где № Ваш номер в классном журнале.

Литература

1 В. Н. Пильщиков, В.Г Абрамов, А.А. Вылиток, И.В. Горячая. Машина Тьюринга и алгоритмы Маркова. Решение задач. (Учебное пособие) М. 2006г (http://cmcmsu.no-ip.info/1course/ электронный ресурс)

2 Эмулятор нормальных алгоритмов Маркова. Электронный ресурс: http://cmcmsu.no-ip.info/1course/alg.schema.nam.htm#

3 Эмулятор НАМ - http://binofem.wallst.ru/