
- •1.2.2Замечание о кодировке входных и выходных значений алгоритмов
- •§ 1.3Вычислимые функции и разрешимые множества
- •1.3.1Вычислимые функции
- •1.3.2Разрешимые множества
- •§ 1.4Вопросы для самопроверки и задачи к §1.1 и 1.2
- •1.4.1Вопросы для самопроверки
- •1.4.2Задачи к §1.1 и 1.2
- •§ 1.5Исчисления алгоритмов
- •1.5.1Необходимость исчислений
- •1.5.2Методы построения исчислений алгоритмов
- •§ 1.6Марковские подстановки (нормальные алгоритмы)
- •1.6.1Алфавит и правила кодирования
- •1.6.2Элементарные шаги нормального алгоритма – подстановки
- •1.6.3Порядок выполнения подстановок и правила извлечения результатов
- •1.6.4Примеры нормальных алгоритмов
- •§ 1.7Машины Тьюринга (мт)
- •1.7.1Предварительное описание мт
- •1.7.2Описание исчисления мт
- •1.7.3Примеры вычисления функций с помощью мт
- •1.7.4Операции над машинами Тьюринга
- •1.7.4.1Метод первый. Суперпозиция двух мт
- •1.7.4.2Метод второй. Итерация мт
- •1.7.5Операторный язык для синтеза машин Тьюринга
- •§ 1.8Рекурсивное построение вычислимых функций
- •1.8.1Базисные функции и операторы
- •Монина Мария Дмитриевна, преподаватель двггу Классические идеи решения нестандартных задач Тема 1. Элементы теории делимости целых чисел
- •Тема 2. Доказательство от противного
- •Тема 3. Чётность
- •Тема 4. Обратный ход
- •Тема 5. Графы
- •Тема 6. Инварианты
- •Тема 7. Метод крайнего
- •Тема 8. Принцип Дирихле
- •Тема 9. Раскраски
- •Тема 10. Игры
- •Шмарин Сергей Владимирович, преподаватель пггпу олимпиадные планиметрические задачи
- •1. Вписанные углы
- •2. Замечательные точки треугольника
- •3. Вписанные и описанные четырехугольники
- •3.1 Критерии вписанного четырехугольника
- •3.1 Критерии описанного четырехугольника
- •4 Классические теоремы о коллинеарности трех точек
- •Упражнения
- •Разные задачи
1.7.3Примеры вычисления функций с помощью мт
Перейдем к построению примеров МТ, вычисляющих функции, имеющие важное практическое применение. Сначала мы рассмотрим несколько простых примеров, а затем используем полученные результаты для вычисления более сложных функций.
Пример 1.6.16
Построить МТ, которая находит правый конец слова (кодировка – унарная) и останавливается на последней его букве.
Решение. В состоянии q1 каретка должна перемещаться вправо до тех пор, пока не обнаружит маркер пустой ячейки. Найдя маркер пустой ячейки, каретка возвращается на одну ячейку влево, и машина переходит в заключительное состояние. Весь процесс описывается следующей функциональной таблицей:
|
q1 |
1 |
1q1r |
|
q0l |
Будем называть реализацию МТ правильной, если она начинает работу, находясь в первой слева букве входного слова и после выполнения основной программы возвращается в первую слева букву слова – результата. При этом переход в заключительное состояние выполняется без изменения буквы текущей ячейки и без сдвигов каретки влево или вправо.
Пример 1.6.17
Построить МТ, правильно реализующую вычисление функции следования в унарной системе счисления (кодировке).
Решение. Шаг 1. Поиск правого конца слова. Он описан в примере 1.6.2. Когда машина находит первый справа маркер пустой ячейки, она заменяет его на 1 и переходит в состояние q2.
Шаг 2. В новом состоянии машина ищет начало слова: она последовательно перемещается влево, не изменяя содержимое ячеек, пока не найдет первый справа маркер пустой ячейки. В последнем случае каретка перемещается в ячейку справа, и машина переходит в состояние q3.
Шаг 3. Состояние предназначено для корректной остановки машины. Независимо от того, какая буква находится в текущей ячейке, машина из этого состояния переходит в заключительное состояние q0, не выполняя при этом ни каких других действий.
Заметим, что при корректном вводе входных слов случай, когда каретка в состоянии q3 обозревает пустую клетку невозможен. Такая конфигурация называется недостижимой. В ячейках функциональной таблицы, соответствующих недостижимым конфигурациям, можно записывать любые команды, так как они не влияют на процесс вычисления. Для удобства мы всегда будем записывать в такие ячейки команды корректной остановки.
|
q1 |
q2 |
q3 |
1 |
1q1r |
1q2l |
1q0s |
|
1q2l |
q3r |
q0s |
Пример 1.6.18
Построить МТ, которая корректно вычисляет аннулятор Z(x)=0 в унарной кодировке.
Решение. Неформально машина должна выполнить следующее действие: стереть все буквы, кроме одной (так как в унарной кодировке нулю соответствует одна палочка). Опишем алгоритм.
Шаг 1. Первую букву слова оставляем без изменений и переходим к следующей букве справа.
Шаг 2. Стираем все буквы справа до тех пор, пока не дойдем до пустой ячейки.
Шаг 3. Возвращаемся назад, к первой букве (проходим влево пустые ячейки без изменения, пока не найдем непустую ячейку).
Шаг 4. Организуем корректную остановку машины.
|
q1 |
q2 |
q3 |
1 |
1q2r |
q2l |
1q0s |
|
q0s |
q3r |
q3l |
Как и в предыдущем примере, при корректных начальных условиях невозможен случай пары: q1. Поэтому в ячейку таблицы с таким адресом помещена команда корректной остановки, которая, по сути, никогда не будет выполняться. С целью экономии места и времени, а так же по другим соображениям, в дальнейшем мы будем оставлять ячейки, в которых стоит команда корректной остановки, пустыми. Например, приведенная выше таблица измениться так:
|
q1 |
q2 |
q3 |
1 |
1q2r |
q2r |
|
|
|
q3l |
q3l |
Пример 1.6.19
Построить МТ,
реализующую функцию – проектор1
в унарной кодировке.
Решение. Для начала нам потребуется уточнить ряд вопросов, связанных с корректным видом начальных данных. Мы будем считать, что числа x1 и x2 записаны на ленте в виде двух последовательностей единиц, разделенных несколькими пустыми ячейками. При этом в начальный момент времени каретка находится в ячейке, соответствующей первой слева букве первого слова.
При указанных условиях машина должна выполнить следующий процесс: найти начало второго слова, стереть это слово и вернуться к началу первого слова для корректной остановки. Опишем шаги алгоритма.
Шаг 1. Поиск конца первого слова (оператор q1).
Шаг 2. Поиск начала второго слова (оператор q2).
Шаг 3. Стирание букв второго слова до тех пор, пока не достигнута первая пустая ячейка за ним (оператор q3).
Шаг 4. Возвращение с поиском конца первого слова (оператор q4).
Шаг 5. Поиск начала первого слова (оператор q5).
Шаг 6. Корректная остановка работы машины (оператор q6).
|
q1 |
q2 |
q3 |
q4 |
q5 |
q6 |
1 |
1q1r |
q3r |
q3r |
1q5l |
1q5l |
|
|
q2r |
q2r |
q4l |
q4l |
q6r |
|
Пример 1.6.20
Построить МТ, правильно реализующую вычисление функции следования в двоичной системе счисления (кодировке).
Решение. Процесс вычисления аналогичен тому, который описан в примере 1.5.4.: к входному слову слева нужно приписать ноль, затем найти конец слова и инициировать процесс прибавления единицы по известному правилу. Когда операция прибавления будет выполнена, машина должна вернуться к началу слова, стереть приписанный ноль, если он не был использован, и корректно остановиться. Будем считать, что в начальный момент времени каретка находится в любой ячейке слова.
Шаг 1. Поиск начала слова, приписывание к нему слева нуля.
Шаг 2. Поиск конца слова.
Шаг 3. Процесс прибавления единицы.
Шаг 4. Поиск начала слова.
Шаг 5. Удаление первого нуля, если он есть.
Шаг 6. Корректная остановка.
|
q1 |
q2 |
q3 |
q4 |
q5 |
q6 |
0 |
0q1l |
0q2r |
1q4l |
0q4l |
q6r |
|
1 |
1q1l |
1q2r |
0q3l |
1q4l |
1q6s |
|
|
0q2r |
q3l |
|
q5r |
|
|