Думаю, для полноты картины будет интересно сравнить эти эзотерические системы с еще одним важным алгоритмическим примитивом — машиной Поста, которой я как раз занимаюсь. Машина Поста (wiki; для простоты оттуда же взят вариант синтаксиса) похожа на всем известную машину Тьюринга, однако обладает интересными особенностями.
Она содержит лишь 6 команд, кроме того, в ячейки- биты памяти могут записываться лишь 2 символа (двоичное кодирование информации). Таким образом, при программировании на машине Поста помимо необходимости совладать с оккамовским синтаксисом надо думать о том, как записать на ленте все промежуточные результаты, не потеряв по пути обратную тропинку к остаткам входных данных. Почему «остаткам»? Зачастую ввиду отсутствия дополнительной памяти приходится обрабатывать входные данные итеративно (а иногда и рекурсивно). Надеюсь, вышеизложенное убедительно доказывает, что написание привычных алгоритмов на машине Поста — неплохая разминка для мозгов и весьма увлекательное занятие. Пример. Рассмотрим одну из кратчайших реализаций умножения двух натуральных чисел. Числа n и m записываются на ленте в единичной системе счисления, разделяются одной пустой ячейкой. Финал Кубок Ссср По Футболу 1987 Г. Динамо Минск-Динамо Киев.
Вход/выход алгоритма может быть таким (отмечено начальное положение каретки). В каждом проходе цикла машина «откусывает» один бит от левого множителя и «копирует» самый правый имеющийся блок (сперва это второй множитель, затем — его последняя копия). Когда левый множитель «закончится», на ленте остается n блоков по m единиц. Их слияние дает искомое число n*m. Код. 0. 0 - главный цикл.
Проверить корректность алгоритма можно в уме, на листочке, либо с помощью этой программы. Это самая короткая известная мне реализация умножения. Однако, потенциально ее можно ужать еще сильнее, если придумать, как экономно объединить процессы создания копий и их слияния в единый массив. Если вас заинтересовала тема, предлагаю подумать над следующими задачами: Вывод i- го числа Фибоначчи. Деление двух натуральных чисел c остатком«Сборщик мусора». На ленте неизвестным образом распределено конечное количество (n) отмеченных ячеек. Необходимо «сгрести» их в одну кучу, т.
Успенский В.А. Машина поста — М.: Наука, 1988. Упражнение 1. Составить программу деления чисел на 2, на 3, на 4., на заданное число k.
Написать для машины Поста программу деления числа, записанного метками, на 2. Исходное число должно делиться на 2 без остатка. На ленте машины Поста расположен массив в Nотмеченных секций. Составить программу сложения 2-х целых неотрицательных чисел aиb. Каретка находится над крайней левой меткой левого числа. Найти остаток от деления целого неотрицательного числаkна 3, если известно, . Алгоритм (по Посту) — программа для машины Поста, приводящая к решению. 2) Если в задаче говорится, что на ленте задано число в унарной системе. Вычислить остаток от деления длины заданного массива на 3. Машина Поста, составить программу целочисленного деления двух. На ленте записаны 2 числа в унарной системе счисления(как . Алгоритм (по Посту) — программа для машины Поста, приводящая к решению. 2) Если в задаче говорится, что на ленте задано число в унарной. Вычислить остаток от деления длины заданного массива на 3. Программой машины Поста называется непустой список команд.
Машина Поста Программа Деления Числа На 2© 2017