- •По дисциплине «Теория алгоритмов»
- •Глава 1. Машина Тьюринга
- •1. Теоретические сведения
- •1.1 Краткое описание машины Тьюринга
- •Глава 1. Машина Тьюринга 4
- •1. Теоретические сведения 4
- •2. Практическая часть: Примеры на составление программ для мт 9
- •Глава 2. Нормальные алгоритмы Маркова 31
- •1. Теоретические сведения 31
- •2.Практическая часть: Примеры на составление нам 34
- •Глава 3. Задачи теоретического характера 57
- •Глава 4. Машина Поста. 72
- •1.2 Программа для машины Тьюринга
- •1.3 Правила выполнения программы
- •1.4 Соглашения для сокращения записи
- •2. Практическая часть: Примеры на составление программ для мт
- •Практическая работа №1: Перемещение автомата, замена символов, анализ символов.
- •Задачи для решения
- •Практическая работа №2 Сравнение символов, стирание слова, удаление символа из слова.
- •Задачи для решения
- •Практическая работа №3: Сжатие слова, вставка символа в слово.
- •Задачи для решения
- •Практическая работа № 4: Раздвижка слова, формирование слова на новом месте, фиксирование места на ленте.
- •Задачи для решения
- •Глава 2. Нормальные алгоритмы Маркова
- •1. Теоретические сведения
- •1.1 Краткое описание нормальных алгоритмов Маркова
- •4. Если в левой части формулы подстановки указано пустое слово, то подстановка сводится, по определению, к приписыванию в слева к слову p:
- •1.2 Правила выполнения нам
- •2.Практическая часть: Примеры на составление нам
- •Практическая работа №5: Вставка и удаление символов, перестановка символов
- •Практическая работа №6: Использование спецзнака, фиксация спецзнаком заменяемого символа.
- •Практическая работа № 7: Перемещение спецзнака, смена спецзнака.
- •Практическая работа № 8: Перенос символа через слово, использование нескольких спецзнаков.
- •Глава 3. Задачи теоретического характера
- •Задачи для решения.
- •Практическая работа №10 Самоприменимость алгоритма
- •Задачи для решения.
- •Глава 4. Машина Поста.
- •Практическая работа №13. Работа с массивами
- •Практическая работа №14 Ориентация на ленте
- •Практическая работа 15. Действия над заданным на ленте множеством меток
- •Практическая работа 16. Сравнение
- •Простые программы
- •Литература
Задачи для решения.
1.Для каждой пары алгоритмов Н1 и Н2 построить их композицию относительно алфавита {a,b} в виде нормального алгоритма Н (Н=Н2(Н1)):
2.Заданы следующие три НАМ:
Является ли алгоритм Н композицией алгоритмов Н1 и Н2 (Н=Н2(Н1))относительно алфавита {a,b,c}? Ответ обосновать.
3. Заданы следующие пять НАМ:
Определить, есть ли среди этих алгоритмов такие, которые являються композицией других, если да, то указать все такие композиции.
Глава 4. Машина Поста.
Программы для решения всех задач этой главы могут быть интерпретированы как выполнение элементарных арифметических операций. Важно показать, как с помощью простейших операций, которыми располагает машина Поста, можно выполнять арифметические операции — основу любого современного процессора.
Практическая работа №13. Работа с массивами
Пример 1. Работа с массивами
На ленте задан массив меток. Увеличить длину массива на 2 метки. Каретка находится либо слева от массива, либо над одной из ячеек самого массива.
Решение.
1. ? 2; 3 (команды 1 и 2 — передвигаем каретку к массиву)
2. –> 1
3. –> 4 (команды 3 и 4 — передвигаем каретку к концу массива)
4. ? 5; 3
5. V 6 (команды 5–7 — ставим 2 метки в конце массива)
6. –> 7
7. V 8
8. !
Пример 2. Даны два массива меток, которые находятся на не- котором расстоянии друг от друга. Требуется соединить их в один массив. Каретка находится над крайней левой меткой первого массива.
Решение.
Пример 3. На ленте задана последовательность массивов, включающая в себя один и более массивов. При этом два соседних массива отделены друг от друга одной пустой ячейкой. Необходимо на ленте оставить один массив длиной равной сумме длин массивов, присутствовавших изначально. Каретка находится над крайней левой меткой первого (левого) массива.
Решение.
Пример 4. На ленте заданы два массива — m и n, m > n. Вычислить разность этих массивов. Каретка располагается над левой ячейкой правого массива.
Решение. Запишем решение алгоритма в словесной форме.
1. Ищем правый край массива m, двигаясь слева направо.
2. Стираем правую метку массива m.
3. Ищем правый край массива n, двигаясь слева направо.
4. Стираем левую метку массива n.
5. Проверяем, мы стерли последнюю метку в массиве n (в этом случае следующая справа ячейка должна быть пустой)?
6. Если стерли последнюю метку, то конец алгоритма.
7. Иначе ищем правый конец массива m, двигаясь справа налево.
8. Переход на шаг 2.
1. –> 2 (команды 1–3: ищем левую метку массива m)
2. ? 3; 1
3. <– 4
4. X 5 (стираем левую метку массива m)
5. ? 6; 7
6. –> 5
7. X 8 (стираем левую метку массива n)
8. –> 9
9. ? 12; 10 (стерли последнюю метку в массиве n?)
10. <– 11 (ищем левый край массива m)
11. ? 10; 4
12. !
Пример 5. На ленте заданы два массива. Найти модуль разности длин массивов. Каретка располагается над первой ячейкой левого массива.
Решение.
1. –> 2
2. ? 3; 1 (идем до конца первого массива)
3. <– 4
4. X 5 (удаляем крайний правый элемент 1-го массива)
5. <– 6
6. ? 14; 7 (проверяем, что в 1-м массиве еще остались метки)
7. –> 8
8. ? 7; 9
9. X 10 (удаляем первую метку 2-го массива)
10. –> 11
11. ? 17; 12 (проверяем, что во 2-м массиве еще остались метки, иначе — завершение)
12. <– 13
13. ? 12; 4
14. –> 15 (мы удалили полностью 1-й массив)
15. ? 14; 16
16. X 17
17. !
Пример 6. На ленте задан массив. Удвоить массив в два раза. Каретка располагается над первой ячейкой массива.
Решение. В результате работы программы справа от исходного массива будет сформирован новый массив удвоенной длины, исходный массив будет стерт.
Пример 7. На ленте задан массив. Вычислить остаток от деления длины заданного массива на 3. Каретка располагается над первой ячейкой массива.
Решение.
Пример 8. На ленте машины Поста расположен массив из n меток. Составить программу, действуя по которой машина выяснит, делится ли число n на 3. Если да, то после массива через одну пустую ячейку поставить метку.
Решение. Нужно проверить, что массив состоит не менее чем из трех меток, сместиться правее них и снова решать ту же задачу. Если правее очередных трех меток окажется пробел, то за ним поставить еще одну метку.
