Как найти метку в машине поста

0 / 0 / 0

Регистрация: 26.09.2019

Сообщений: 68

1

Найти метку на машине Поста

21.02.2020, 08:07. Показов 3645. Ответов 3


Студворк — интернет-сервис помощи студентам

Известно, что на ленте есть метка , напишете программу которая находит её



0



Эксперт по математике/физике

3968 / 2948 / 893

Регистрация: 19.11.2012

Сообщений: 6,061

21.02.2020, 10:30

2

Цитата
Сообщение от Maiddragon
Посмотреть сообщение

программу которая находит её

Используйте метод маятника (хождения туда-сюда) с увеличивающейся амплитудой.



0



0 / 0 / 0

Регистрация: 26.09.2019

Сообщений: 68

21.02.2020, 13:00

 [ТС]

3

А можно поподробнее пожалуйста. Я просто видимо делаю что-то не то , и вышло так что команд >15 штук и на проверке заданной метки ничего не происходит (задавал амплитуду с помощью других меток и отталкивался от них)



0



417 / 352 / 108

Регистрация: 23.05.2016

Сообщений: 1,467

21.02.2020, 15:46

4

1 если головка стоит на метке, то метка найдена, конец
2 проверяете две ячейки справа, если в одной из них есть метка, останавливаетесь на ней, конец. Иначе сдвигаетесь в ячейку на одну правее начального состояния и ставите в ней метку
3 сдвигаетесь вправо до первой пустой ячейки. Проверяете, есть ли метка еще на одну ячейку правее. Если есть – стираете поле меток слева от неё, возвращаетесь и останавливаетесь на метке. конец. Иначе добавляете к полю меток еще одну справа.
4 двигаетесь влево до первой пустой ячейки. Проверяете, есть ли метка еще на одну ячейку левее. Если есть – стираете поле меток справа от неё, возвращаетесь и останавливаетесь на метке. конец. Иначе добавляете к полю меток еще одну слева.
5 перейти на п.3



0



ПРЕДЛАГАЮ КОЛЛЕГАМ

И.Н. Фалина, Е.Л. Радченко

Изучение машины Поста в школьном курсе
информатики

Одним из центральных понятий
информатики является понятие алгоритма. В 1936
году американский математик и логик Эмиль Леон
Пост (1897–1954) предложил абстрактную
вычислительную конструкцию, позволяющую
формально определить алгоритм и названную
впоследствии машиной Поста. При разработке
вычислительной конструкции Пост
руководствовался принципом создания
максимально простой абстракции: минимумом
операций при обработке информации, входная
информация должна быть закодирована с
использованием минимального набора символов.

Несмотря на “примитивность” машины
Поста, любой существующий алгоритм может быть
записан в виде программы для машины Поста. В
теории алгоритмов существует так называемый
“тезис Поста”: “Всякий алгоритм представим в
форме машины Поста”. Этот тезис одновременно
является формальным определением алгоритма. Алгоритм
(по Посту) — программа для машины Поста,
приводящая к решению поставленной задачи.

Тезис Поста является гипотезой. Его
невозможно строго доказать (так же, как и тезис
Тьюринга), потому что в нем фигурируют, с одной
стороны, интуитивное понятие “всякий алгоритм”,
а с другой стороны — точное понятие “машина
Поста”. Для того чтобы опровергнуть гипотезу
Поста, необходимо придумать алгоритм, который
невозможно записать в виде программы для машины
Поста. На сегодняшний день такого алгоритма не
существует.

Машина Поста — это абстрактная (т.е. не
существующая в арсенале действующей техники), но
очень простая вычислительная машина. Она
способна выполнять лишь самые элементарные
действия, и потому ее описание и составление
простейших программ может быть доступно
ученикам начальной школы. Тем не менее на машине
Поста можно запрограммировать — в известном
смысле — любые алгоритмы. Изучение машины Поста
можно рассматривать как начальный этап обучения
теории алгоритмов и программированию.
Разработка программ для машин Поста —
достаточно эффективный этап в обучении
алгоритмизации, т.к. в процессе написания этих
программ учащиеся учатся разбивать интуитивно
понятные вычислительные процедуры на
элементарные действия. Изучение машины Поста
полезно как школьникам, интересующимся
информатикой и математикой, так и студентам
младших курсов, обучающимся по специальности
“прикладная математика и информатика”. При этом
теоретический материал доступен даже школьникам
младших классов, но требует в этом случае
некоторых методических поправок.

В статье предлагается материал для
практикума по теме “Машина Поста” в рамках
изучения основ алгоритмизации. Практикум
включает в себя теоретическую часть и набор
задач с решениями.

Для проверки работ учащихся, для
отладки программ для машины Поста можно
использовать имитатор машины Поста. Из Интернета
можно скачать свободно распространяемые
имитаторы как машины Поста, так и машины
Тьюринга, например, по адресу http://softsearch.ru/programs/45-346-interpretator-mashiny-posta-download.shtml.

Теоретическая часть. Состав машины Поста

Машина Поста состоит из ленты и каретки
(называемой также считывающей и записывающей
головкой
). Лента бесконечна и разделена на
секции одинакового размера — ячейки.


Рис. 1. В каждый момент времени
каретка указывает на одну из ячеек

В каждой ячейке ленты может быть либо
ничего не записано, либо стоять метка V.
Информация о том, какие ячейки пусты, а какие
содержат метки, образует состояние ленты.
Иными словами, состояние ленты — это
распределение меток по ячейкам. Состояние ленты
меняется в процессе работы машины. Заметим, что
наличие метки в ячейке можно интерпретировать
как “1”, а отсутствие — “0”. Такое двоичное
представление информации подобно представлению,
используемому практически во всех современных
ЭВМ.

Каретка может передвигаться вдоль
ленты влево и вправо. Когда она неподвижна, она
стоит против ровно одной ячейки ленты; говорят,
что каретка обозревает одну ячейку. За единицу
времени каретка может совершить одно из трех
действий: стереть метку, поставить метку,
совершить движение на соседнюю ячейку. Состояние
машины Поста
складывается из состояния ленты и
положения каретки.

Действия каретки подчинены программе,
состоящей из перенумерованного набора команд
(команды можно представлять как строки
программы). Команды бывают шести типов:

1. записать 1 (метку), перейти к i
строке программы;

2. записать 0 (стереть метку), перейти к i
строке программы;

3. сдвиг влево, перейти к i-й строке
программы;

4. сдвиг вправо, перейти к i-й строке
программы;

5. останов;

6. если 0, то перейти к i, иначе
перейти к j.

Приведем список недопустимых
действий, ведущих к аварийной остановке машины:

  • попытка записать 1 (метку) в заполненную
    ячейку;
  • попытка стереть метку в пустой ячейке;
  • бесконечное выполнение (вообще говоря,
    это трудно назвать аварийным остановом, но
    бессмысленное повторение одних и тех же действий
    — зацикливание — ничуть не лучше
    вышеперечисленного).

Машина Поста, несмотря на внешнюю
простоту, может производить различные
вычисления, для чего надо задать начальное
состояние каретки и программу, которая эти
вычисления сделает. Машиной эта математическая
конструкция названа потому, что при ее
построении используются некоторые понятия
реальных машин (ячейка памяти, команда и др.).
Условимся каждый шаг программы обозначать
номером. Команды машины будем обозначать
следующим образом:

Будем говорить, что мы можем применить
программу к текущему состоянию машины Поста
,
если выполнение программы не приведет к
зацикливанию, т.е. рано или поздно мы выполним
команду останов.

Пример программы, которая не применима
ни к одному состоянию машины Поста:

Рассмотрим задачу для машины Поста и
ее решение.

Задача. На ленте проставлена
метка в одной-единственной ячейке. Каретка стоит
на некотором расстоянии левее этой ячейки.
Необходимо подвести каретку к ячейке, стереть
метку и остановить каретку слева от этой ячейки.

Решение. Сначала попробуем описать
алгоритм обычным языком. Поскольку нам известно,
что каретка стоит напротив пустой ячейки, но
неизвестно, сколько шагов нужно совершить до
пустой ячейки, мы можем сразу сделать шаг вправо;
проверить, заполнена ли ячейка; если она пустая,
то повторять эти действия до тех пор, пока не
наткнемся на заполненную ячейку. Как только мы ее
найдем, мы выполним операцию стирания, после чего
нужно будет лишь сместить каретку влево и
остановить выполнение программы.

Программа для машины Поста:

Практическая часть практикума “Машина
Поста”

Все задачи практикума сгруппированы
по темам. Начинать знакомство с машиной Поста
рекомендуется с первой темы “Применимость
программ. Определение результата выполнения
программ”.

Пояснения к условиям задач

1) В задачах под массивом
понимается последовательность подряд идущих
меток, ограниченная пустыми ячейками.

2) Если в задаче говорится, что на ленте
задано число в унарной системе, то имеется в виду,
что натуральное число n закодировано с
помощью массива длины n.

3) В задачах при описании начального
состояния ленты будем указывать то, что записано
начиная с самой левой непустой ячейки и
заканчивая самой правой непустой ячейкой. При
этом будем использовать следующие обозначения: n
подряд идущих меток будем обозначать 1n, а m
пустых ячеек — 0m. При обозначении одной
заполненной или пустой ячейки будем писать
просто 1 или 0, соответственно.

К примеру, запись “12012” будет
соответствовать записи “11011” на ленте.

4) Если не сказано ничего о
местонахождении каретки в начальный момент
времени, то будем считать, что каретка обозревает
ячейку с самой левой меткой.


1. Применимость программ. Определение
результата выполнения программ

1. Выяснить, применимы ли
программы к заданным состояниям машины Поста,
указать результат работы машины Поста для
каждого состояния.

Ответы:

a) 1) 1110011000

    2) зацикливание

    3) 1001011000

b) 1) зацикливание

    2) 010011

    3) 01010110

c) 1) зацикливание (…111)

    2) зацикливание (…1111001)

    3) зацикливание (1010111…)

2. Определить состояние, в
котором окажется машина Поста в результате
выполнения программы при заданном начальном
состоянии ленты.


Пояснение: выделенная цифра,
например 1, означает, что эту ячейку
каретка обозревает в начальный момент времени.

Решение. Выделенная цифра
показывает, на какой ячейке остановится машина.

a) 1) 110000001

    2) 11000001

b) 1) 1100101

     2) 10001

     3) 111111

3. Написать программы для
машины Поста, которые обладают следующими
свойствами:

Решение

  • программа, применимая к любому
    состоянию машины Поста:

    ! 1

  • программа, не применимая ни к какому
    состоянию машины Поста, и зона работы для любого
    начального состояния бесконечна:

    –> 1

  • машина, не применимая ни к какому
    состоянию машины Поста, и зона работы для любого
    начального состояния ограничена одним и тем же
    числом ячеек, не зависящим от выбранного
    начального состояния ленты:

    1. –> 2

    2. <– 1

  • программа, применимая к состояниям 13n,
    и не применимая к состояниям 13n+a, где a
    = 1, 2 и n 1:

  • программа применима к состояниям 1a01a,
    где a 1, и не
    применима к 1a01b, a b (a 1 и b 1):

    в качестве примера такой программы
    может быть взята программа, удаляющая
    последовательно по одному элементу из каждого из
    двух массивов меток и уходящая на бесконечность
    в случае, если остались элементы в одном из
    массивов.




2. Арифметические задачи

Программы для решения всех задач этого
раздела могут быть интерпретированы как
выполнение элементарных арифметических
операций. Важно показать, как с помощью
простейших операций, которыми располагает
машина Поста, можно выполнять арифметические
операции — основу любого современного
процессора.

4. На ленте задан массив меток.
Увеличить длину массива на 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. !

5. Даны два массива меток,
которые находятся на не-
котором расстоянии друг от друга. Требуется
соединить их в один массив. Каретка находится над
крайней левой меткой первого массива.

Решение.

6. На ленте задана
последовательность массивов, включающая в себя
один и более массивов. При этом два соседних
массива отделены друг от друга одной пустой
ячейкой. Необходимо на ленте оставить один
массив длиной равной сумме длин массивов,
присутствовавших изначально. Каретка находится
над крайней левой меткой первого (левого)
массива.

Решение.

7. На ленте заданы два массива
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. !

8. На ленте заданы два массива.
Найти модуль разности длин массивов. Каретка
располагается над первой ячейкой левого массива.

Решение.

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. !

9. На ленте задан массив.
Удвоить массив в два раза. Каретка располагается
над первой ячейкой массива.

Решение. В результате работы
программы справа от исходного массива будет
сформирован новый массив удвоенной длины,
исходный массив будет стерт.

10. На ленте задан массив.
Вычислить остаток от деления длины заданного
массива на 3. Каретка располагается над первой
ячейкой массива.

Решение.

11. На ленте машины Поста
расположен массив из n меток. Составить
программу, действуя по которой машина выяснит,
делится ли число n на 3. Если да, то после
массива через одну пустую ячейку поставить
метку.

Решение. Нужно проверить, что
массив состоит не менее чем из трех меток,
сместиться правее них и снова решать ту же
задачу. Если правее очередных трех меток
окажется пробел, то за ним поставить еще одну
метку.

3. Ориентация на ленте

12 На ленте имеется некоторое множество
меток (общее количество меток не менее 1). Между
метками множества могут быть пропуски, длина
которых составляет одну ячейку. Заполнить все
пропуски метками.

Решение.

13. На ленте имеется массив из n
отмеченных ячеек. Каретка обозревает крайнюю
левую метку. Справа от данного массива на
расстоянии в m ячеек находится еще одна метка.
Составьте для машины Поста программу,
придвигающую данный массив к данной ячейке.

Решение.

1. X 2 (удаляем левую метку массива)

2. –> 3

3. ? 4; 2 (передвигаем каретку к концу
массива)

4. V 5 (ставим справа от массива метку,
раннее нами была удалена самая левая метка)

5. –> 6

6. ? 7; 10 (проверяем, передвинули ли мы уже
наш массив к заданной метке)

7. <– 8

8. ? 9; 7 (идем к левой метке массива)

9. –> 1 (и начинаем все сначала)

10. !

14. Известно, что на ленте
машины Поста находится метка. Напишите
программу, которая находит ее.

Решение. Этот алгоритм решения
заимствован из замечательной книги В.А.
Успенского “Машина Поста”. Мы не знаем, в какую
сторону нам надо двигаться, но, в какую бы сторону
мы ни пошли, может случиться, что метка стоит в
другой стороне. Очевидно, что нам надо двигаться
попеременно, то в одну сторону, то в другую,
постоянно увеличивая размах своих колебаний. Но
как определить момент, когда надо поворачивать,
т.е. менять направление? Выход из положения есть.
Вначале работы выставим метки слева и справа от
исходного положения каретки, а затем будем
ходить между ними и передвигать их.

1. V 2 (выставили левую метку)

2. –> 3

3. ? 5; 4

4. ! (нашли метку, конец)

5. V 6 (выставили правую метку)

6. <– 7 (ищем левую метку)

7. ? 6; 8

8. X 9 (стираем левую метку)

9. <– 10

10. ? 11; 4

11. V 12 (передвигаем левую метку)

12. –> 13 (ищем правую метку)

13. ? 12; 14

14. X 15 (стираем правую метку)

15. –> 3 (повторяем действия)


4. Действия над заданным на ленте множеством
меток

15. Дан массив меток. Каретка
располагается где-то над массивом, но не над
крайними метками. Стереть все метки, кроме
крайних, и поставить каретку в исходное
положение.

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

1. –> 2

2. X 3

3. –> 4

4. ? 5, 2 (удаляем метки справа от
исходного положения)

5. <– 6

6. V 7

7. <– 8 (возвращаемся к исходному
положению)

8. ? 7; 9

9. <– 10

10. X 11

11. <– 12

12. ? 13; 10 (удаляем метки слева от
исходного положения)

13. –> 14

14. V 15

15. –> 16

16. ? 15; 17 (возвращаемся к исходному
положению)

17. X 18 (удаляем метку, соответствующую
исходному положению каретки)

18. !

16. На ленте машины Поста
расположен массив из n меток (метки
расположены через пробел). Нужно сжать массив
так, чтобы все n меток занимали n
расположенных подряд ячеек.

Решение. Идея решения состоит в
последовательном придвижении каждой отдельной
метки к уже сформированному массиву. Считаем, что
каретка находится над левой меткой массива.
Программа решения данной задачи эквивалентна
программе сложения произвольного количества
чисел (см. задачу 6).

17. Дано несколько массивов
меток. Удалить четные массивы. Каретка находится
над первым массивом.

Решение.

1. –> 2

2. ? 3; 1 (идем до конца нечетного массива)

3. –> 4

4. ? 5; 6 (смотрим, есть ли еще массивы)

5. ! (массивов больше нет — завершение)

6. X 7 (удаляем четный массив)

7. –> 8

8. ? 9; 6

9. –> 10

10. ? 5; 1 (смотрим: есть ли еще массивы)

18. На ленте машины Поста
расположено n массивов меток, отделенных друг
от друга свободной ячейкой. Каретка находится
над крайней левой меткой первого массива.
Определить количество массивов.

Решение. Идея решения такова: будем
“считать” массивы слева направо, удаляя каждый
“посчитанный” массив. При этом слева от
последовательности оставшихся массивов будем
держать массив меток, длина которого
соответствует числу “посчитанных” массивов.

19. На ленте машины Поста
расположен массив из 2n – 1 меток. Составить
программу удаления средней метки массива.

Решение. Идея решения состоит в
следующем: во вторых ячейках от каждого края
массива ставим “маячки-пузырьки” (эти ячейки
делаем пустыми). Далее последовательно
перемещаем к центру левый и правый пузырьки. Эти
пузырьки встретятся ровно на центральном
элементе исходного массива. При реализации
программы надо отдельно учесть три случая: n =
1, n = 3, n > 3. Считаем, что в начале работы
каретка стоит на самой левой метке массива.

1. –> 2

2. ? 3; 4

3. <– 4 (n = 1)

4. Х 5

5.

6. –> 7

7. ? 8; 6

8. 9

9. <– 10

10. ? 20; 11

11. Х 12 (n > 3)

12. <– 13

13. ? 14; 12

14. V 15 (дошли до левого конца)

15. –> 16

16. X 17

17. –> 18

18. ? 19; 17

19. V 9 (дошли до правого конца)

20. ! (стерли центральную метку, конец)

20. На ленте машины Поста
расположен массив из 2n ячеек. Составить
программу, по которой машина Поста раздвинет на
расстояние в одну ячейку две половины данного
массива.

Решение. Идея решения состоит в
следующем. Сначала между двумя левыми и двумя
правыми метками ставим “маячки” — пустые
клетки. Первым ставим левый маячок. Затем
поочередно сдвигаем эти маячки к центру. Как
только маячки сомкнутся, вместо правого маячка
ставим метку, идем к правому краю массива и
удаляем самую правую метку. Для простоты решения
считаем, что каретка стоит под самой левой
меткой.

21. Написать программу,
которая осуществляет преобразование 1n01m
–> 1m01n (n 1 и m 1).

Решение. Правый массив длины m
остается на месте, левый массив переносится
слева направо относительно неподвижного
массива.

5. Сравнение

22. На ленте расположены два
массива разной длины. Каретка обозревает крайний
элемент одного из них. Составьте программу для
машины Поста, сравнивающую длины массивов и
стирающую больший из них. Отдельно продумайте
случай, когда длины массивов равны.

Решение аналогично нахождению
разности двух чисел.

23. На ленте машины Поста
находятся два массива в m и n меток.
Составить программу выяснения, одинаковы ли
массивы по длине.

Решение аналогично нахождению
разности двух чисел.

24. Дано N массивов меток.
Массивы разделены тремя пустыми ячейками.
Количество меток в массиве не меньше двух. Если
количество меток в массиве кратно трем, то
стереть метки в этом массиве через одну, в
противном случае стереть весь массив. Каретка
находится над крайней левой меткой первого
массива.

Решение. В задаче присутствует
большое количество условий. Вместе с тем
реализация этих условий требует лишь
внимательного составления программы.


Литература

1. Успенский В.А. Машина Поста. Серия
“Популярные лекции по математике”, выпуск 54. М.:
Наука, 1988.

2. http://math.ru/lib/plm/54
(электронная версия книги В.А. Успенского
“Машина Поста”).

3. Андреева Е., Босова Л., Фалина И.
Математические основы информатики. Учебное
пособие. М.: БИНОМ. Лаборатория знаний, 2005.

4. Андреева Е., Босова Л., Фалина И.
Математические основы информатики. Методическое
пособие. М.: БИНОМ. Лаборатория Знаний, 2007.

5. http://softsearch.ru/programs/45-346-interpretator-mashiny-posta-download.shtml
(имитатор машины Поста).

Работу поддержал “Клуб ФМШ
Колмогорова”, объединяющий выпускников,
преподавателей и ветеранов школы

  1. Проверяем
    делится ли массив на 3 (используем
    алгоритм из первой задачи).

    Если
    массив делится, то переходим к пункту
    2.

    Если не делится, то переходим
    к пункту 3.

  2. Удаляем
    каждую вторую метку в массиве слева
    направо. Переходим к пункту 4.

  3. Удаляем
    все метки в массиве. Переходим к пункту
    4.

  4. Ищем
    первую ячейку с меткой справа.

  5. Проверяем
    следующую за ней метку.

    Если метки
    нет, то переходим к пункту 7

    Если
    метка есть, то переходим к пункту 6.

  6. Делаем
    шаг влево. Переходим к пункту 1.

  7. Конец работы.

Задача
1
.
На ленте машины Поста расположен массив
из N меток. Составить программу, действуя
по которой машина выяснит, делится ли
число на 5. Если да, то после массива
через одну пустую секцию поставить
метку V . Будем считать, что каретка в
начале работы обозревает крайнюю слева
метку.

Алгоритм

  1. Известно, что вначале каретка обозревает первую слева метку.

  2. Проверяем
    вторую справа ячейку, если она пустая,
    то число N на 5 не делится. Переходим
    на пункт 9.

  3. Проверяем
    третью справа ячейку, если она пустая,
    то число N на 5 не делится. Переходим
    на пункт 9.

  4. Полвеояем
    четвертую справа ячейку, если она
    пустая, то число N на 5 не делится.
    Переходим на пункт 9.

  5. Полвеояем пятую
    справа ячейку, если она пустая, то число
    N на 5 не делится. Переходим на пункт 9.

  6. Проверяем шестую
    срава ячейку.

    Если ячейка пустая,
    значит на ленте расположены подряд 5
    меток. Следовательно, число N на 5
    делится. Переходим на пункт 7.

    Если
    ячейка с меткой, значит на ленте
    расположено более 5 меток, возвращаемся
    на пункт 2, считая текущую ячейку первой.

  7. Делаем
    шаг вправо, пропуская одну ячейку.

  8. Ставим
    метку.

  9. Конец
    работы.

Задача
1
.
На ленте машины Поста расположен массив
из N меток. Составить программу, действуя
по которой машина выяснит, делится ли
число на 6. Если да, то после массива
через одну пустую секцию поставить
метку V . В начале работы каретка обозревает
крайнюю слева метку.

Алгоритм

  1. Известно,
    что вначале каретка обозревает первую
    слева метку.

  2. Проверяем
    вторую справа ячейку, если она пустая,
    то число N на 6 не делится. Переходим
    на пункт 10.

  3. Проверяем
    третью справа ячейку, если она пустая,
    то число N на 6 не делится. Переходим
    на пункт 10.

  4. Полвеояем
    четвертую справа ячейку, если она
    пустая, то число N на 6 не делится.
    Переходим на пункт 10.

  5. Полвеояем пятую
    справа ячейку, если она пустая, то число
    N на 6 не делится. Переходим на пункт
    10.

  6. Полвеояем шестую
    справа ячейку, если она пустая, то число
    N на 6 не делится. Переходим на пункт 10.

  7. Проверяем седьмую
    срава ячейку.

    Если ячейка пустая,
    значит на ленте расположены подряд 6
    меток. Следовательно, число N на 6
    делится. Переходим на пункт 8.

    Если
    ячейка с меткой, значит на ленте
    расположено более 6 меток, возвращаемся
    на пункт 2, считая текущую ячейку первой.

  8. Делаем
    шаг вправо, пропуская одну ячейку.

  9. Ставим
    метку.

  10. Конец
    работы.

Задача
1
.
Число k представлено на ленте машины
Поста k +1 идущими подряд метками. Найти
остаток от деления целого неотрицательного
числа k на 2, если известно, что каретка
находится справа от заданного числа.

Алгоритм.
В основе алгоритма лежит идея вычитать
из числа последовательно по две
метки. Как только останется меньше двух
меток, то это и будет остаток от деления.

  1. Находим
    первую пустую ячейку справа от числа.

  2. Делаем два
    шага вправо.

  3. Проверяем
    наличие метки.

    Если метка есть,
    значит число больше двух. Переходим на
    пункт 4.

    Если метки нет, значит число
    закончилось. Переходим на пункт 5.

  4. Возвращаемся
    назад и удаляем подряд две метки.
    Переходим на пункт 2.

  5. Конец
    работы.

Задача
1
.
Дан массив меток. Каретка обозревает
первую пустую секцию перед началом
массива. Раздвиньте массив ток, чтобы
после каждой метки была пустая секция.

Алгоритм

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Машина Поста

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

В 1936 г. американский математик Эмиль Пост в статье описал систему, обладающую алгоритмической простотой и способную определять, является ли та или иная задача алгоритмически разрешимой. Если задача имеет алгоритмическое решение, то она представима в форме команд для машины Поста.

Машина Поста состоит из …

  1. бесконечной ленты, поделенной на одинаковые ячейки (секции). Ячейка может быть пустой (0 или пустота) или содержать метку (1 или любой другой знак),
  2. головки (каретки), способной передвигаться по ленте на одну ячейку в ту или иную сторону, а также способной проверять наличие метки, стирать и записывать метку.

Текущее состояние машины Поста описывается состоянием ленты и положением каретки. Состояние ленты – информация о том, какие секции пусты, а какие отмечены. Шаг – это движение каретки на одну ячейку влево или вправо. Состояние ленты может изменяться в процессе выполнения программы.

Кареткой управляет программа, состоящая из строк команд. Каждая команда имеет следующий синтаксис:

i K j,

где i – номер команды, K – действие каретки, j – номер следующей команды (отсылка).

Всего для машины Поста существует шесть типов команд:

  • V j – поставить метку, перейти к j-й строке программы.
  • X j – стереть метку, перейти к j-й строке программы.
  • <- j – сдвинуться влево, перейти к j-й строке программы.
  • -> j – сдвинуться вправо, перейти к j-й строке программы.
  • ? j1; j2 – если в ячейке нет метки, то перейти к j1-й строке программы, иначе перейти к j2-й строке программы.
  • ! – конец программы (стоп).

У команды «стоп» отсылки нет.

Варианты окончания выполнения программы на машине Поста:

  1. Команда “стоп” – корректная остановка. Возникает в результате выполнения правильно написанного алгоритма.
  2. Выполнение недопустимой команды – нерезультативная остановка. Случаи, когда головка должна записать метку там, где она уже есть, или стереть метку там, где ее нет, являются аварийными (недопустимыми).
  3. Уход в бесконечность, зацикливание. Машина Поста в результате работы алгоритма может вообще не остановиться (никогда не дойти до команды «стоп» и никогда не завершиться аварийной ситуацией).

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

Пример работы машины Поста:

Задача: увеличить число 3 на единицу (изменить значение в памяти с 3 на 4).
Целое положительное число на ленте машины Поста представимо идущими подряд метками, которых на одну больше, чем кодируемое число. Это связано с тем, что одна метка обозначает ноль, а уже две – единицу, и т.д.
Допустим, точно известно, что каретка стоит где-то слева от меток и обозревает пустую ячейку. Тогда программа увеличения числа на единицу может выглядеть так:
1 -> 2
2 ? 1;3
3 <- 4
4 V 5
5 !

А процесс выполнения может быть таким:

Привет, Вы узнаете про машина поста, Разберем основные ее виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое
машина поста , настоятельно рекомендую прочитать все из категории Теория автоматов.


машина поста
(МП) — абстрактная вычислительная машина, предложенная Эмилем Леоном Постом (англ. Emil Leon Post), которая отличается от машины Тьюрингабольшей простотой. Обе машины алгоритмически «эквивалентны» и были придуманы для уточнения понятия «алгоритм». В 1936 г. американский математик Эмиль Пост в статье описал систему, обладающую алгоритмической простотой и способную определять, является ли та или иная задача алгоритмически разрешимой. Если задача имеет алгоритмическое решение, то она представима также в форме последовательности команд для машины Поста.

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

Машина Поста - как вычислительная машина

В 1936 г. американский математик Эмиль Пост в статье описал систему, обладающую алгоритмической простотой и способную определять, является ли та или иная задача алгоритмически разрешимой.
Если задача имеет алгоритмическое решение, то она представима в форме команд для машины Поста.

Машина Поста состоит из ленты и каретки (называемой также считывающей и записывающей головкой).

Машина Поста - как вычислительная машина

Лента бесконечна и разделена на секции одинакового размера — ячейки.

В каждой ячейке ленты может быть либо ничего не записано, либо стоять метка V. Информация о том, какие ячейки пусты, а какие содержат метки, образует состояние ленты. Состояние ленты меняется в процессе работы машины.
Заметим, что наличие метки в ячейке можно интерпретировать как “1”, а отсутствие — “0”. Такое двоичное представление информации подобно представлению, используемому практически во всех современных ЭВМ.
Каретка может передвигаться вдоль ленты влево и вправо. Когда она неподвижна, она стоит против ровно одной ячейки ленты.
За единицу времени каретка может совершить одно из трех действий:
– стереть метку,
– поставить метку,
– совершить движение на соседнюю ячейку.

Состояние машины Поста складывается из состояния ленты и положения каретки.

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

Принцип работы

Машина Поста состоит из каретки (или считывающей и записывающей головки) и разбитой на ячейки бесконечной в обе стороны ленты (см. пример ниже). Каждая ячейка ленты может находиться в 2 состояниях — быть либо пустой — 0, либо помеченной меткой 1. За такт работы машины каретка может сдвинуться на одну позицию влево или вправо, считать, изменить символ в своей текущей позиции.

Работа машины Поста определяется программой, состоящей из конечного числа строк. Для работы машины нужно задать программу и ее начальное состояние (то есть состояние ленты и позицию каретки). Кареткой управляет программа, состоящая из пронумерованных не обязательно упорядоченных строк команд, если в каждой команде указана строка, на которую нужно перейти. Обычно принимается, что если в команде переход не указан, то переход происходит на следующую строку. Каждая команда имеет следующий синтаксис:

    i. K j

где i — номер команды, K — действие каретки, j — номер следующей команды (отсылка).

Всего для машины Поста существует шесть типов команд:

   V j      - поставить метку, перейти к j-й строке программы.
   X j      - стереть метку, перейти к j-й строке программы.
   ← j      - сдвинуться влево, перейти к j-й строке программы.
   → j      - сдвинуться вправо, перейти к j-й строке программы.
   ? j1; j2 - если в ячейке нет метки, то перейти к j1-й строке программы, иначе перейти к j2-й строке программы.
   !        – конец программы (стоп).

В команде «стоп» переход на следующую строку не указывается.

После программы запуска возможны варианты:

  • работа может закончиться невыполнимой командой (стирание несуществующей метки или запись в помеченное поле);
  • работа может закончиться командой Stop;
  • работа никогда не закончится.

Пример прибавление единицы к числу

Машина Поста - как вычислительная машина

Машина Поста - как вычислительная машина

Примеры: сложение и вычитание натуральных чисел P, Q

Пусть натуральные (целые неотрицательные) числа P и Q изображаются набором из P и Q единиц и разделены нулем. Пусть исходное положение каретки находится на крайней левой «1» группы единиц Q (помечено символом «v»).

            v
 ...00111110111000...
      ----- ---
        P    Q

Сложение двух чисел тривиально — достаточно поставить 1 между ними и стереть одно крайнее правое «1» у Q . Об этом говорит сайт https://intellect.icu . Программа вычитания состоит из последовательного изменения крайних левых «1» у последовательности «1» в изображении Q и правых «1» у последовательности «1» в изображении P. В начале программы каретка установлена на крайнюю левую «1» у Q:

1. ←       - шаг влево
2. ? 1, 3  - если в ячейке пусто, перейти к 1 шагу, если нет, к 3
3. 0       - удалить метку
4. →       - шаг вправо
5. ? 4, 6  - если в ячейке пусто, перейти к 4 шагу, если нет, к 6
6. 0       - удалить метку
7. →       - шаг вправо
8. ? 9, 1  - если в ячейке пусто, перейти к 9 шагу, если нет, к 1
9. !       - конец

Отметим, что номер команды перехода не указывается, если переход происходит на следующую по порядку строку (для наглядности текста). В 6-й строке возможно зацикливание, если Q > P.

Абстрактные (т.е. существующие не реально, а лишь в воображении) машины Поста и Тьюринга, предназначенные для доказательств различных утверждений о свойствах программ для них, были предложены независимо друг от друга (и практически одновременно) в 1936 г. американским математиком Эмилем Постом и английским математиком Алланом Тьюрингом. Эти машины представляют собой универсальных исполнителей, являющихся полностью детерминированными, позволяющих «вводить» начальные данные, и после выполнения программ «читать» результат. Машина Поста менее популярна, хотя она значительно проще машины Тьюринга. С ее помощью можно вести обучение первым навыкам составления программ для ЭВМ.

Абстрактная машина Поста представляет собой бесконечную ленту, разделенную на одинаковые клетки, каждая из которых может быть либо пустой, либо заполненной меткой «V», и головки, которая может перемещаться вдоль ленты на одну клетку вправо или влево, наносить в клетку ленты метку, если этой метки там ранее не было, стирать метку, если она была, или проверять наличие в клетке метки. Информация о заполненных метками клетках ленты характеризует состояние ленты, которое может меняться в процессе работы машины. В каждый момент времени головка («-») находится над одной из клеток ленты и, как говорят, обозревает ее. Информация о местоположения головки вместе с состоянием ленты характеризует состояние машины Поста, рис.1.16.

Машина Поста - как вычислительная машина

Рис.1.16. Абстрактная машина Поста

Команда машины Поста имеет следующую структуру:

п Km,

где п – порядковый номер команды, K-действие, выполняемое головкой, т – номер следующей команды, подлежащей выполнению.

Существует всего шесть команд машины Поста, рис.1.17:

Машина Поста - как вычислительная машина

Рис.1.1. Команды машины Поста.

Ситуации, в которых головка должна наносить метку там, где она уже имеется, или, наоборот, стирать метку там, где ее нет, являются аварийными (недопустимыми).

Программой для машины Поста будем называть непустой список команд, такой что 1) на п-м месте команда с номером n; 2) номер т каждой команды совпадает с номером какой-либо команды списка.

С точки зрения свойств алгоритмов, изучаемых с помощью машины Поста, наибольший интерес представляют причины останова машины при выполнении программы:

1) останов по команде «стоп»; такой останов называется результативным и указывает на корректность алгоритма (программы);

2) останов при выполнении недопустимой команды; в этом случае останов называется безрезультативным;

3) машина не останавливается никогда; в этом и в предыдущем случае мы имеем дело с некорректным алгоритмом (программой).

Будем понимать под начальным состояние головки против пустой клетки левее самой левой метки на ленте. Рассмотрим реализацию некоторых типичных элементов программ машины Поста.

1. Пусть задано исходное состояние головки и требуется на пустой ленте написать две метки: одну в секцию под головкой, вторую справа от нее. Это можно сделать по следующей программе (справа от команды показан результат ее выполнения):

Машина Поста - как вычислительная машина

Рис.1.2. Пример элемента программы машины Поста.

2. Покажем, как можно воспользоваться командой условного перехода для организации циклического процесса. Пусть на ленте имеется запись из нескольких меток подряд и головка находится над самой крайней меткой справа. Требуется перевести головку влево до первой пустой позиции.

Программа будет иметь следующий вид:

Машина Поста - как вычислительная машина

Команда условного перехода является одним из основных средств организации циклических процессов, например, для нахождения первой метки справа (или слева) от головки, расположенной над пустой клеткой; нахождение слева (или справа) от головки пустой клетки, если она расположена над меткой и т.д.

3. Остановимся на представлении чисел на ленте машины Поста и выполнении операций над ними.

Число k представляется на ленте машины Поста идущими подряд k + 1 метками (одна метка означает число «О»). Между двумя числами делается интервал как минимум из одной пустой секции на ленте. Например, запись чисел 3 и 5 на ленте машины Поста будет выглядеть так:

Машина Поста - как вычислительная машина

Обратим внимание, что используемая в машине Поста система записи чисел является непозиционной.

Составим программу для прибавления к произвольному числу единицы. Предположим, что на ленте записано только одно число и головка находится над одной из клеток, в которой находится метка, принадлежащая этому числу:

Машина Поста - как вычислительная машина

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

Программа, добавляющая к числу метку слева, имеет вид:

Машина Поста - как вычислительная машина

Программа, добавляющая к числу метку справа, имеет вид:

Машина Поста - как вычислительная машина

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

Предположим, что головка расположена на расстоянии нескольких клеток слева от числа, к которому нужно прибавить единицу. В этом случае программа усложняется. Появится «блок поиска числа» – две команды, приводящие головку в состояние, рассмотренное в предыдущем примере:

Машина Поста - как вычислительная машина

Ниже – полные тексты программ, добавляющие единицу слева и справа, соответственно:

Машина Поста - как вычислительная машина

В первом случае не нужно перемещать головку к крайней левой метке числа

4. Приведем программу для сложения целых неотрицательных чисел а и и на машине Поста, когда головка находится над числом а, а число b находится правее числа а на некоторое число клеток. Эта программа реализует следующий алгоритм: первое число постепенно придвигается ко второму до их слияния, а потом стирается одна метка (иначе результат оказался бы на единицу больше правильного).

Машина Поста - как вычислительная машина

Машина Поста - как вычислительная машина

В случае более сложных начальных условий, когда неизвестно, справа или слева от головки (и на какое число клеток) находится число, можно применить такой принцип поиска числа: двигая головку вправо и влево и отмечая метками степень удаления головки от исходного положения, найти число, а потом уже применить известную программу сложения. При этом проверяется, находится ли головка над одной из меток числа и если да, то задача решена. Иначе проверяется, пуста ли секция справа от головки и следующая за ней; если обе пусты, то делается возврат головки на один шаг и ставится метка, а затем такая же операция выполняется слева и по отмеченной дорожке головка возвращается вправо и т.д. до тех пор, пока головка не натолкнется на число, после чего можно применить ранее рассмотренные выше программы:

Машина Поста - как вычислительная машина

Машину Поста можно рассматривать как упрощенную модель ЭВМ. В самом деле, как ЭВМ, так и машина Поста имеют:

• неделимые носители информации (клетки – биты), которые могут быть заполненными или незаполненными;

• ограниченный набор элементарных действий – команд, каждая из которых

выполняется за один такт (шаг).

Обе машины работают на основе программы. Однако, в машине Поста информация располагается линейно и читается подряд, а в ЭВМ можно читать информацию по адресу; набор команд ЭВМ значительно шире и выразительнее, чем команды машины Поста и т.д.

Пример 1

На ленте в одной из ячеек поставлена ​​метка (остальные ячеек являются пустыми). Каретка стоит на некотором расстоянии левее эту ячейку. Нужно подвести каретку к ячейке, стереть метку и остановить каретку слева от этой ячейки.

Решение . Сначала попробуем описать алгоритм обычным языком. Поскольку нам известно, что каретка стоит напротив пустой ячейки, но неизвестно, сколько шагов нужно сделать к заполненной ячейки, мы можем сразу сделать шаг вправо; проверить, заполнена ячейка; если она пуста, то повторять эти действия до тех пор, пока не столкнемся с заполненную ячейку. Как только мы ее найдем, мы выполним операцию стирания, после чего нужно будет только сместить каретку влево и остановить выполнение программы. Программа поиска и стирания единой метки на ленте для машины Поста имеет следующий вид:

Машина Поста - как вычислительная машина

Пример 2

На ленте заданный массив меток. Увеличить длину массива на 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.! (Стоп)

Пример 3

Задано два массива меток, которые находятся на некотором расстоянии друг от друга. Нужно объединить их в один массив. Каретка находится над крайней левой меткой первого массива (в исходном состоянии).

Машина Поста - как вычислительная машина

Вопросы:

1. Сравните машины Тьюринга и Поста.

2. Зачем нумеруются строки в программе для машины Поста?

Задачи:

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

Каретка расположена слева от числа.

2. Напишите программу для машины Поста, которая складывает два числа в единичной системе счисления.

Каретка расположена над пробелом, разделяющим эти числа на ленте.

3. Что делают следующие программы для машины Поста:
Машина Поста - как вычислительная машина

К сожалению, в одной статье не просто дать все знания про машина поста. Но я – старался.
Если ты проявишь интерес к раскрытию подробностей,я обязательно напишу продолжение! Надеюсь, что теперь ты понял что такое машина поста
и для чего все это нужно, а если не понял, или есть замечания,
то нестесняся пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории
Теория автоматов

Ответы на вопросы для самопроверки пишите в комментариях,
мы проверим, или же задавайте свой вопрос по данной теме.

Добавить комментарий