Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Элементы теории делимости целых чисел 25 Тема Д...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.22 Mб
Скачать

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