Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теория алгоритмов. Учебное пособие для специальности 050201.65 – «Математика с дополнительной специальностью «Информатика», направление подготовки 050

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
1 Мб
Скачать

2.v 3 (печать метки, отсылка к команде 3)

3.стоп.

Задача 3.2.2. Каретка находится над массивом (числом).

v v v v v

Программа II:

1. ← 2 (сдвиг влево, отсылка к команде 2)

3 (если ячейка пуста, то переход к команде 3)

2.?

1(если ячейка помечена, то переход к команде 1)

3.v 4 (печать метки, отсылка к команде 4)

4.стоп.

По этой программе каретка смещается вдоль массива влево до тех пор,

пока не встретит пустую ячейку. В пустой ячейке печатается метка (v), после чего работа машины Поста прекращается.

Задача 3.2.3.

Случай 1. Каретка находится слева от массива меток.

v v v

Программа III1:

1→ 2

1

2.?

3

3.← 4

4.v 5

5.стоп.

По этой программе каретка движется вправо, пока не встретит первую метку, затем сдвигается влево, печатает метку. Останавливается.

41

Случай 2. Каретка находится справа от массива меток. v v v

Программа III2:

1. ← 2

1

2.?

3

3.→ 4

4.v 5

5.стоп.

По этой программе каретка движется влево до первой метки, сдвигается вправо. Печатает метку. Останавливается.

Задача 3.2.4.

Случай 1. Каретка находится над массивом, либо слева от массива меток.

 

 

v

v

v

v

v

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

либо

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

v

v

v

 

 

 

 

 

 

 

 

 

Случай 2. Каретка находится над массивом, либо справа от массива меток.

v v v v

либо

v v v

Программу для задачи 3.2.4 можно получить склеиванием программ задачи 3.2.2. (программа II) и 3.2.3 (программа III1).

42

Добавим команду

программа III1

(все номера и все отсылки

программы III1

увеличиваются на S 1)

1. ?

 

программа II (все номера и все отсылки

программы II увеличиваются на 1).

Если S - длина программы I, то команда 1 имеет вид:

S 1

1.?

2

Длина программы II равна 4, тогда S 1 5.

Программа IV:

6

1.?

2

2. ← 3

4

3.?

2

4. v 5

5. стоп

6. → 7

6

7.?

8

8.← 9

9.v 10

10.стоп.

43

Упростим программу IV. В ней дважды встречается команда «стоп».

Оставим только один «стоп» (команду 5). Заменим отсылку к команде 10

отсылкой к команде 5, получим:

Программа IV1:

6

1.?

2

2. ← 3

4

3.?

2

4.v 5

5.стоп

6.→ 7

6

7.?

8

8.← 9

9.v 5.

Впрограмме дважды встречается одинаковая команда: строки 4 и 9.

Удалим команду 9, для этого в строке 8 заменим отсылку к команде 9 отсылкой к команде 4, получим:

Программа VI2:

6

1.?

2

2. ← 3

4

3.?

2

44

4.v 5

5.стоп

6.→ 7 6

7.?

8

8. ← 4

Выясним, нельзя ли ещё «поглотить» команды? Сравним команды 2 и 8.

Их нельзя объединить в одну, так как у них разные отсылки. И всё-таки команда 2 может взять на себя функции команды 8 и поглотить её.

Пусть выполняется команда 8, и следующая ячейка пуста:

v v v

Тогда печатаем метку, переходим к команде 5. Если в этом случае вместо команды 8 выполнить команду 2, то тоже напечатается метка.

Если после выполнения команды 8 каретка обозревает отмеченную ячейку, то машина Поста остановится (безрезультатная остановка). Остановки машины не случится, если выполняется команда 2. Таким образом, если последовательно выполнять команды 8, 4, то можно прийти к безрезультатной остановке. Если выполнять последовательно команды 2, 3, 4, безрезультатной остановки не случается. Поэтому команду 8 заменить на команду 2 можно, а

заменить команду 2 на команду 8 нельзя.

Удалим команду 8, заменим в команде 7 отсылку к команде 8, отсылкой к команде 2, получим:

Программа IV3:

6

1.?

2

2. ← 3

45

4

3.?

2

4. v 5

5 стоп

6.→ 7

6

7.?

2

В программе IV3 две одинаковые команды: 1 и 7. Удаляем команду 7,

заменяем в команде 6 отсылку к команде 7 отсылкой к команде 1,

получим:

Программа IV4:

6

1.?

2

2. ← 3

4

3.?

2

4.v 5

5.стоп

6.→ 1.

Можно строго доказать, что более короткого решения задачи не существует.

Задача 3.2.5. (обобщение)

В произвольном месте на ленте записано число n. Каретка находится тоже в произвольном месте. Построить машину Поста, увеличивающую число n на 1, то есть вычисляющую функцию f(n) = n + 1.

46

Основная трудность задачи состоит в том, чтобы найти число,

записанное на ленте. Данная задача похожа на следующую. …

Вы находитесь на бесконечной в обе стороны дороге, на которой слева или справа находится клад. Неизвестно, в какую сторону и на какое расстояние следует двигаться. Можно было бы последовательно расширять район поиска: влево 1 шаг, вправо 1 шаг, влево 2 шага, вправо 2 шага.

Машина Поста не умеет считать, но кое-что она умеет запоминать,

именно, если она будет метить исследованный район (метить пройденную дорогу), то, встретив в данном направлении метку, она «поймет», что

«добралась» до числа. Тогда печатает ещё одну метку, стирает все метки пройденного пути и останавливается.

Составим блок-схему программы.

начало

+

2

_

проверка

 

 

влево

 

 

 

 

6

 

3

стирание

 

движение

вправо

 

вправо

 

 

 

8

 

 

4

остановка

 

проверка

 

 

+

вправо

 

 

 

 

 

_

7

 

 

стирание

 

 

влево

 

 

 

 

5

 

 

 

 

 

 

движение

 

 

 

 

 

 

влево

 

 

 

 

Рис. 1. Блок-схема программы

47

Программа V:

2

1. ?

3

2.← 4

3.→ 4

5

4.?

3

5.v 6

6.← 7

8

7.?

15

8.→ 9 10

9.?

8

10.v 11

11.→ 12

13

12.?

19

13. ← 14

5

14.?

13

48

15.→ 16

16.→ 17

23

17.?

18

18.16

19.← 20

20.← 21

23

21.?

22

22.20

23.стоп.

Вкачестве комментария к работе программы V прилагаем диаграмму программы.

1-й блок –

«начало» – состоит из команд 1, 2, 3, 4;

2-й блок –

«блок проверки влево» – состоит из команд 5, 6, 7;

3-й блок –

«блок движения вправо» – состоит из команд 8, 9;

4-й блок – «блок проверки вправо» – состоит из команд 10, 11, 12; 5-й блок – «блок движения влево» – состоит из команд 13, 14;

6-й блок – «блок стирания вправо» – состоит из команд 15, 16, 17, 18; 7-ой блок – «блок стирания влево» – состоит из команд 19, 20, 21, 22; 8-ой блок – «блок остановки» – состоит из команды 23.

49

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

4

 

 

начало

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проверка

 

 

3

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

влево

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

Блок стирания вправо

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

15

 

 

16

 

17

 

 

18

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

движение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вправо

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Блок

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проверки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вправо

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

12

19

 

 

20

 

21

 

 

22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Блок стирания влево

13

Блок движения

влево

14

Рис. 2. Диаграмма программы

3.3. Функции, вычислимые по Посту. Тезис Поста

Определение 3.3.1. Функция f(n) вычислима по Посту, если

существует машина Поста, вычисляющая f(n) и обладающая свойствами:

50

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