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




МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение

Высшего профессионального образовании

“Ижевский государственный технический университет имени М.Т.Калашникова” (ИжГТУ)
Кафедра «Конструирование радиоэлектронной аппаратуры»
Приборостроительный факультет

 

 

Лабораторная работа № 1

 

Создание имитационных моделей абстрактных автоматов Тьюринга и Маркова средствами Excel MS Office.


 


Выполнил работу: Симанов В.В.
Проверил работу: О.Я. Шамсиахметов


Группа:Б21-071-1

 


Цель работы: Создать имитационную модель абстрактных автоматов Тьюринга и Маркова средствами Excel MS Office.


Машина Тьюринга

Название задачи: A={0,1}. Считая непустое слово P записью двоичного числа, удалить из него незначащие нули, если такие есть.

Ход работы: Составил таблицу для нахождения всех решений данной задачи. В Microsoft Excel создал имитационную модель машины Тьюринга для решения данной задачи.

Алгоритм решения: 1) Перетащим головку в левую сторону до пустой клетки.

1.1) Перетащим головку на 1 клетку вправо на конец слова

2) Если последний символ не единица то удаляем цифры до первой появившейся единицы

3) Все последующие элементы оставить без изменения

 


Основные формулы:


1) B13 Ячейка Шаг

=ЕСЛИ(

D11=2;"конец";ЕСЛИ(D11;ЕСЛИ(C11=1;СУММ(B13;1);B13);"начало"))

2) C11 Ячейка для промежуточной информации о шаге выполнения

=ЕСЛИ(D11;ЕСЛИ(C11=4;1;C11+1);1)

3) D11 Ячейка для промежуточной информации о положении программы

=ЕСЛИ(B11;ЕСЛИ(МАКС(B24:AH24)=МАКС($A$3:$A$7)+1;2;B11);)

4) B20-AH20 Изображение действующей ленты с ячейками состояния

=ЕСЛИ($D$11=2;B20;ЕСЛИ($D$11;ЕСЛИ($C$11=4;;ЕСЛИ($C$11=1;ЕСЛИ(B24;ВПР(B24;$A$3:$M$5;ПОИСКПОЗ(B23;$A$1:$M$1;)+1;);B20);B20));))

5) B21-AH21 Изображение действующей ленты с ячейками движения

=ЕСЛИ($D$11=2;B21;ЕСЛИ($D$11;ЕСЛИ($C$11=4;;ЕСЛИ($C$11=1;ЕСЛИ(B24;ВПР(B24;$A$3:$M$5;ПОИСКПОЗ(B23;$A$1:$M$1;)+2;);B21);B21));))

6) B22-AH22 Изображение действующей ленты с ячейками числа

=ЕСЛИ($D$11=2;B22;ЕСЛИ($D$11;ЕСЛИ($C$11=4;B22;ЕСЛИ($C$11=1;ЕСЛИ(B24;ВПР(B24;$A$3:$M$5;ПОИСКПОЗ(B23;$A$1:$M$1;););B22);B22));ЕСЛИ(B16="";"x";B16)))

7) B23-AH23 Изображение действующей ленты с ячейками текущего числа ленты

=ЕСЛИ($D$11=2;B23;ЕСЛИ($D$11;ЕСЛИ($C$11=3;B22;B23);B22))

8) B24-AH24 Ячейки номера состояния головки

=ЕСЛИ($D$11=2;B24;ЕСЛИ($D$11=1;ЕСЛИ($C$11=2;ЕСЛИ(A21=1;A20;ЕСЛИ(C21=-1;C20;));B24);B17))

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

Название задачи: A={f,h,p}. В слове P заменить все пары «ph» на «f».

Алгоритм решения:

1) Начальное положение программы “0” →вводим исходное слово заполняем таблицу формул подстановки (последовательность формул не менять, иначе измениться алгоритм).

2) Запускаем программу →положение программы “1”.

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

4) Если нет совпадений в первой формуле, тогда переходим ко второй формуле подстановки.

5) Если ни одна формула подстановки не подошла, тогда останов и вывод конечного слова.

6) Если есть совпадение, тогда заменяем левую часть использованной формулы на правую часть этой же формулы в исходном слове (всю правую часть на всю левую независимо от количества символов). Возможно подстановка “пустоты”, то есть отсутствия левой и/или правой части, что равносильно удалению символов (если правая часть “пустота”) или вставке новых символов (если левая часть-“пустота”).

7) Если было совпадение, тогда проверяем маркер останова у использованной формулы подстановки в таблице НАМ - если есть (символ “!”), тогда останавливаем программу и выводим конечное слово, если нет (“символ пустота”), тогда продолжаем программу алгоритма подстановки.

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

9) Если нет совпадений в первой формуле, тогда переходим ко второй формуле подстановки.

10) Если ни одна формула подстановки не подошла, тогда останов и выводим конечное слово.

11) Если есть совпадение, тогда заменяем левую часть использованной формулы на правую часть этой же формулы в исходном слове. Возможно подстановка “пустоты”, то есть отсутствия левой и/или правой части, что равносильно удалению символов (если правая часть “пустота”) или вставке новых символов (если левая часть-“пустота”).

12) Если было совпадение, тогда проверяем маркер останова у использованной формулы подстановки в таблице НАМ - если есть (символ “!”), тогда останавливаем программу и выводим конечное слово, если нет (“символ пустота”), тогда продолжаем программу алгоритма подстановки.

13) Повторяем пункты 8-12 до полного останова (нет ни одного совпадения в модифицированном слове).

Ход работы:

1. Оформить таблицу формул алгоритма:

 

 


В столбике Номер (адреса A1÷A3) пересчитать построчно,начиная с 1,все номера используемых формул. У нас 1-2.

В столбике Левая часть (адреса B1÷B3) указать левые части используемых формул по мере их использования (порядок важен) У нас ph-пусто (ячейка остается пустой. Если есть 0, то его надо убрать клавишей Delete).

В столбике Правая часть (адреса C1÷C3) указать правые части используемых формул, соответствующих левым частям. У нас f-пусто.

В столбике Маркер останова (адреса D1÷D3) останова указать символ “!”, если формула после выполнения должна остановиться (может быть несколько маркеров или не одного).У нас пусто-!.

Для повышения наглядности необходимо выделить контуры ячеек таблицы толщиной и цветом по своему вкусу. Это делается командой Меню→Главная→Шрифт→Границы.

2. Оформить вспомогательную таблицу запуска программы:

 


Ячейка F1-содержимое “запуск программы”

Ячейка G1-содержимое “старт”

Ячейка G2-содержимое “0” (первоначально. Далее при запуске программы оно меняется вручную на 1)

Ячейка H1-содержимое “шаг”

Ячейка F2-содержимое

=ЕСЛИ($G$2;ЕСЛИ(СЧЁТЕСЛИ(F10:F40;"Конечное слово");"конец";"начало");"'' 1--> старт''")

(набирать в ячейке по нажатию клавиши =,(тогда = в самой формуле не нужно набирать) и закончит набор клавишей Enter).

Ячейка H2-содержимое

=ЕСЛИ(G2;ЕСЛИ(H2=100;1;H2+1);0)

Для повышения наглядности необходимо выделить контуры ячеек таблицы толщиной и цветом по своему вкусу. Это делается командой Меню→Главная→Шрифт→Границы.

Для ячейки F2 ввести первое условное форматирование цветом и шрифтом.Для этого выделяем ячейку F2 и в меню выполняем команды Главная→Условноеформатирование→Управлениеправилами→Создатьправило→Использовать формулу для форматируемых ячеек →набрать формулу =$F$2=”начало”

и выбрать цвет и шрифт (у нас цвет желтый и шрифт по умолчанию), а также в графе Применяется к добавить

=$F$2

Для ячейки F2 ввести второе условное форматирование цветом и шрифтом.Для этого выделяем ячейку F2 и в меню выполняем команды Главная→Условноеформатирование→Управлениеправилами→Создатьправило→Использовать формулу для форматируемых ячеек →набрать формулу =$F$2=”конец”

и выбрать цвет и шрифт (у нас цвет красный и шрифт по умолчани ю), а также в графе Применяется к добавить

=$F$2

3. Создаем таблицу исходной задачи.

Создается таблица на любом пустом месте в виде двух столбиков (Задано слово и Получить слово).В единственной строке указываем данные задачи(у нас pphhhphp и pfhhfp). Оформляем таблицу по своему вкусу согласно предыдущим настройкам.

4. Оформляем таблицу решений.

Ячейка F9 -содержимое “ Исходное слово

Ячейка G9 -содержимое “ Метка останова

Ячейка F10 -содержимое “ pphhhphp

Ячейка G10 -содержимое “ 0

Ячейка F11 -содержимое =ЕСЛИ($H$2>=СЧЁТЗ($F$11:F11);ЕСЛИ(G10=1;"Конечное слово";ЕСЛИ(ЕЧИСЛО(ПОИСК($B$2;F10;1));ЗАМЕНИТЬ(F10;ПОИСК($B$2;F10;1);ДЛСТР($B$2);$C$2);ЕСЛИ(ЕЧИСЛО(ПОИСК($B$3;F10;1));ЗАМЕНИТЬ(F10;ПОИСК($B$3;F10;1);ДЛСТР($B$3);$C$3);ЕСЛИ(ЕЧИСЛО(ПОИСК($B$4;F10;1));ЗАМЕНИТЬ(F10;ПОИСК($B$4;F10;1);ДЛСТР($B$4);$C$4);ЕСЛИ(ЕЧИСЛО(ПОИСК($B$5;F10;1));ЗАМЕНИТЬ(F10;ПОИСК($B$5;F10;1);ДЛСТР($B$5);$C$5);"стоп")))));"")

Так как ячейка F11 содержит много формул, ее необходимо тщательно проверить на предмет ошибок. Дальше необходимо повторить с некоторыми изменениями содержание этой ячейки в ячейках F12-F**( количество определяется шагами программы (взять по своему усмотрению с запасом (запас можно легко отрегулировать добавлением или удалением ячеек))).

Чтобы избежать ошибок необходимо воспользоваться приемом Excel протаскивание.

Для этого надо выделить ячейку F11 и за правый нижний край (при появление на углу крестика нажать левую клавишу мышки) протащить до желаемой нижней ячейки и отпустить кнопку мышки. Все ячейки будут заполнены с требуемыми изменениями. Необходимо помнить, что адреса ячеек со знаками $ не меняются от протаскивания. У нас необходимо заполнить ячейки по F18.

Ячейка G11-содержимое

=ЕСЛИ(F11="Конечное слово";1;ЕСЛИ(ЕЧИСЛО(ПОИСК($B$2;F10;1));ЕСЛИ(И(ЕЧИСЛО(ПОИСК($B$2;F10;1));ЕТЕКСТ($D$2));1;0);ЕСЛИ(ЕЧИСЛО(ПОИСК($B$3;F10;1));ЕСЛИ(И(ЕЧИСЛО(ПОИСК($B$3;F10;1));ЕТЕКСТ($D$3));1;0);ЕСЛИ(ЕЧИСЛО(ПОИСК($B$4;F10;1));ЕСЛИ(И(ЕЧИСЛО(ПОИСК($B$4;F10;1));ЕТЕКСТ($D$4));1;0);ЕСЛИ(ЕЧИСЛО(ПОИСК($B$5;F10;1));ЕСЛИ(И(ЕЧИСЛО(ПОИСК($B$5;F10;1));ЕТЕКСТ($D$5));1;0);0)))))

Заполняем ячейки методом протаскивания для G11÷G18.

Ячейка E11 -содержимое

=ЕСЛИ($H$2>=1;"шаг " & ЕСЛИ(ЕПУСТО(F11);"";СЧЁТЗ($F$11:F11));"")

Заполняем ячейки методом протаскивания для E11÷E18.

Для ячеек F11÷F18 применим условное форматирование цветом и шрифтом.

Для этого выделим ячейку F11 и в меню выполняем команды Главная→Условноеформатирование→Управлениеправилами→Создатьправило→Использовать формулу для форматируемых ячеек →набрать формулу

=$F$11=”Конечное слово”

и выбрать цвет и шрифт (у нас цвет красный и шрифт по умолчанию), а также в графе Применяется к добавить

=$F$11:$F$18)

Для наглядности вспомогательные ячейки G9÷G18 сделаем невидимыми для пользователя. Для этого надо выделить эти ячейки и нажать правую клавишу мышки→ ФорматячеекЦвет →установить “ Белый ” (то есть они сольются с фоном ячеек)→ Enter.

5. Запускаем программу вводом в ячейку G2 цифры “ 1 ” и нажать клавишу Enter. В соседней ячейке H2 появиться цифра 1 (выполниться первый цикл итераций).

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

Если при оформлении модели программа Excel выдаст предупреждение и недопустимых циклических ссылках, необходимо в Главное меню→Параметры→Формулы→Включить итеративные вычисления (установить шаг итерации 1 (за одно нажатие клавиши F9 будет совершаться один шаг)).


Вывод:

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-07-17 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: