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

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

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

1)если f (n) y, то машина Поста, примененная к n, через конечное число шагов напечатает y и остановится;

2)если f(n) не определена, то машина Поста, примененная к n, не

приходит к результативной остановке.

Тезис Поста. Класс функций, вычислимых по Посту, совпадает с классом вычислимых функций.

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

Задание.

1.На ленте машины Поста расположен массив из N меток. Необходимо справа от данного массива через одну пустую секцию разместить массив вдвое больший (он должен состоять из 2N меток). При этом исходный массив может быть стёрт.

2.

На ленте машины Поста расположен массив из

N

меток (метки

 

расположены через пробел). Надо сжать массив так, чтобы все N

 

меток занимали N

расположенных подряд секций.

 

 

3.

На информационной ленте машины Поста расположено

N

массивов

 

меток, отделенных

друг от друга свободной

ячейкой.

Каретка

находится над крайней левой меткой первого массива. Определите число массивов.

4.Игра Баше. В игре участвуют двое (человек и машина Поста).

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

предмет. Первым ходит человек. Каждый из играющих может брать 1, 2, 3 или 4 предмета. Проигрывает тот, кто берет последний предмет.

51

5.Составьте программу сложения двух целых неотрицательных чисел a

и b, расположенных на ленте машины Поста. Каретка расположена

над одной из меток, принадлежащих числу a. Число b находится

правее числа a через несколько пустых секций.

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

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

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

k на 3, если известно, что каретка находится справа от заданного

числа.

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

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

11.На ленте машины Поста расположен массив из 2N 1 меток.

Составьте программу отыскания средней метки массива и стирания её.

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

52

13. На информационной ленте машины Поста находятся два массива в

M и N меток. Составьте программу выяснения, одинаковы ли массивы по длине.

14. Задача В.А. Успенского. На информационной ленте либо вправо,

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

15. На ленте машины Поста находится n массивов меток, после последнего массива на расстоянии более трех пустых секций находится одна метка. Массивы разделены тремя пустыми ячейками.

Количество меток в массивах не может быть меньше двух.

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

16.Составьте программу умножения двух чисел a и b.

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

18.На ленту машины Поста нанесены два массива меток на некотором расстоянии друг от друга. Соедините эти два массива в один. Каретка находится над крайней левой меткой левого массива.

19.На ленте машины Поста отмечен массив n меток. Найдите число

2n 1 и проверьте, делится ли оно на 3. Если да, то после числа,

через одну пустую секцию поставьте две метки, если нет – поставьте три метки. Каретка находится над крайней левой отмеченной секцией.

53

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

21.Составьте программу сложения произвольного количества чисел,

записанных на ленте машины Поста через одну пустую секцию.

Каретка обозревает крайнюю левую секцию левого числа.

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

23.На ленте машины Поста находятся n массивов меток. Каретка находится где-то над первым массивом. Удалите все массивы с четными номерами (соседние массивы разделены тремя пустыми секциями).

24.На информационной ленте машины Поста находится массив меток.

Каретка находится где-то над массивом (но не над крайней меткой).

Сотрите все метки, кроме крайних, таким образом, чтобы положение каретки при этом не изменилось.

54

ГЛАВА 4. АЛГОРИТМЫ НУМЕРАЦИИ

В основе современных цифровых технологий лежит гениальная идея сопоставления числа звуку, рисунку, цвету. Число, сопоставляемое элементу a

множества M , назовём номером (или кодом)

элемента

a. Номера элементов

принадлежат множеству N0 целых неотрицательных чисел. Под нумерацией

элементов множества M

будем понимать взаимно однозначное соответствие

, позволяющее для любого элемента a

из множества M

вычислить его

номер. Потребуем, чтобы

отображение

 

было

задано

определённым

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

К настоящему времени построены разнообразные алгоритмы нумерации.

Рассмотрим некоторые из них.

4.1. Нумерация кортежей

Нумерация целых неотрицательных чисел

Естественно считать номером целого неотрицательного числа n само это число.

Нумерация пар целых неотрицательных чисел

Рассмотрим способ Кантора нумерации пар (a,b), где (a,b) N0 N0,

целых неотрицательных чисел. Расположим пары чисел в виде треугольной

таблицы.

 

 

 

 

 

 

(0,0)

 

 

 

(0,1)

(1,0)

 

 

(0,2)

(1,1)

 

(2,0)

(0,3)

(1,2)

(2,1)

(3,0)

 

….

 

(0,x+y)

(x,y)

(x+y,0).

55

Рис.3. Треугольная таблица пар целых неотрицательных чисел

Отметим особенности построенной таблицы. Если в ней перенумеровать строки, начиная с нулевой, то в i-й строке перечислены все пары, сумма компонент которых, равна i. Так, в нулевой строке записана пара, сумма компонент которой равна нулю. В первой строке записаны пары, сумма компонент которых равна единице. Во второй строке записаны пары, сумма компонент которых равна двум и т.д. Первые пары каждой строки имеют вид

(0,x), где x принимает всевозможные целые

неотрицательные значения.

Вторые пары в строках имеют вид (1,x), где

x принимает всевозможные

целые неотрицательные значения, и т.д.

 

Обозначим через C2(a,b) номер пары

(a,b). Пары в построенной

таблице перенумеруем по порядку сверху вниз:

 

C2(0,0) 0,C2(0,1) 1,C2(1,0) 2,...,C2 (7,3) 62,....

Найдём формулу для вычисления номера C2(x, y).

Заметим, что пара (x, y) находится в строке вида (4.1.1):

(0,x y),(1,x y 1),(2,x y 2),...,(x, y),(x 1, y 1),...,(x y,0)

Этой строке

предшествуют

строки, содержащие, соответственно,

1,2,...,x y пар. Тогда номер пары

(0,x y) равен сумме чисел:

 

1 2 3 ... (x y)

(1 x y)(x y)

.

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

В строке 4.1.1

пара (x, y)) отстоит от пары (0,x y) на x

позиций,

тогда искомый номер равен:

 

 

 

 

 

 

 

 

 

C2(x, y) C2(0,x y) x

(x y 1)(x y)

x.

4.1.2

 

 

 

 

 

 

2

 

 

 

 

Например, C (3,7)=

(3 7 1)(3 7)

3

11 10

3 58.

 

 

 

 

2

2

2

 

 

 

 

 

 

 

 

 

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

56

Решим обратную задачу: по заданном у номеру C2 найдём соответствующую пару. Для решения этой задачи подвергнем анализу

полученную формулу 4.1.2. Обозначим через n сумму

x y.

Числа вида

 

n(n 1)

равные сумме первых n натуральных

 

 

 

 

,

чисел,

называются

2

 

 

 

 

треугольными и обозначаются через tn. Запишем первые члены ряда треугольных чисел.

n

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

tn

1

3

6

10

15

21

28

36

45

55

66

78

91

105

120

 

 

 

 

 

Рис.4. Таблица треугольных чисел

 

 

 

 

Построенный ряд можно продолжить как угодно далеко.

Соотношение 4.1.2. перепишем в виде 4.1.3:

 

 

C2(x, y) tn x, где

n x y.

4.1.3

Выясним, как по заданному номеру C2 найти tn.

 

Так как x 0, то C2

tn. Найдём верхнюю оценку для C2.

Оценим

разность двух соседних треугольных чисел:

 

 

 

 

 

tx y 1 tx y

(x y 2)(x y 1)

 

(x y 1)(x y)

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

2

 

 

 

(x y 1)(x y 2 x y)

 

(x y 1) 2

x y 1.

 

 

 

 

 

 

2

 

 

 

2

 

 

 

Тогда

tx y 1 tx y x y 1 x, или tx y 1 tx y x. Обозначим

x y через

n, для номера

C2 получим соотношение:

 

 

 

 

tn C2 tn x tn 1.

 

Таким образом, tn

равно наибольшему треугольному числу, не

превышающему C2. Тогда числа C2,x, y,tn удовлетворяют

системе

соотношений:

 

 

 

 

 

 

 

 

 

 

 

 

57

 

 

 

 

 

 

 

x y n,

 

4.1.4

C2

tn x.

Пусть задан номер C2, найдём пару (x, y) с этим номером. Обратимся к таблице треугольных чисел (рис.4). Найдём в ней наибольшее треугольное

число tn, не превышающее C2. При этом будет найдено и число

n. Тогда,

используя соотношения 4.1.4, найдём x и y.

 

Например, пусть дано C2 100. По таблице (Рис.4)

найдём

n 13,t13 91. Подставляя в соотношения 4.1.4 найденные значения, найдём x 9, y 4.

Нумерация кортежей конечной длины

Нумерация кортежей длины n сводится к нумерации пар следующим образом. Обозначим номер тройки целых неотрицательных чисел (x, y,z) через

C3, номер четвёрки (x, y,z,t) – через C4, номер кортежа (x1,x2,..., xn) длины n – через Cn. Определим номер тройки C3(x, y,z) C2(C2(x, y),z), далее –

C4 (x, y,z,t) C2 (C3 (x, y,z),t),…, Cn (x1,x2 ,..., xn ) C2 (Cn 1(x1,x2 ,..., xn 1),n).

Тогда для любого кортежа (x1,x2,..., xn) длины n мы сможем найти его номер

Cn и, наоборот, по известному номеру Cn и известной длине n кортежа сможем найти кортеж (x1,x2,..., xn). Мы испытали удовлетворение, заметив,

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

числа, n и Cn, чтобы найти соответствующий кортеж. «Высшим пилотажем» явилось бы умение по одному заданному числу найти соответствующий кортеж. И такой способ был найден. Назовём обобщённым номером кортежа (x1,x2,..., xk ) длины k число

A(x1,x2,..., xk ) C2(Ck (x1,x2,..., xk ),k 1).

58

A 100.

Если задан обобщённый номер A, то можно найти (k 1) – длину кортежа, уменьшенную на единицу, и номер Ck кортежа, т.е. те два числа,

зная которые, можно найти сам кортеж.

Пример. Дано:

Найти кортеж с таким обобщённым номером.

Решение.

A C2(Ck ,k 1). Находим: Ck 9,k 1 4. Это означает, что

искомый кортеж имеет длину 5 и его номер равен 9. Располагая такими данными, находим кортеж (0,0,0,2,0).

Алгоритм нумерации числовых наборов, рассмотренный выше, можно распространить на нечисловые объекты.

Известны иные алгоритмы нумерации. Рассмотрим алгоритм Гёделя нумерации машин Тьюринга.

4.2. Гёделевская нумерация машин Тьюринга

Курт Гёдель впервые применил числовое кодирование нечисловых объектов в доказательстве знаменитой теоремы о неполноте арифметики.

Поясним идею Гёделя на примере кодирования машин Тьюринга.

Занумеруем все простые натуральные числа: P1 2, P2 3, P3 5,....

Любое натуральное число можно представить в виде произведения степеней простых чисел:

n P1r1 P2r2 ... Pkrk ,

где r1,r2,...,rk - целые неотрицательные числа.

Например, 500 22 30 53.

Аналогичное представление получат номера машин Тьюринга.

Пусть дана машина Тьюринга МТ. Обозначим её номер через .

Для вычисления номера сначала занумеруем алфавит заданной машины следующим образом. Сопоставим нечётные целые числа, отличные от единицы,

59

MTZ2
MTZ2
MTZ1,

символам алфавита a0 0,a1 1 машины Тьюринга, движениям влево (L),

вправо (R), на месте (E) и внутренним состояниям q0,q1,q3,...,qn :

a0 a1 L R E q0 q1 q2 ... ,

3 5 7 9 11 13 15 17 ...

а номерам мест в команде сопоставим простые числа:

1 2 3 4 5 ... k

.

2 3 5 7 11 ... Pk

Тогда команде Q 1q10Lq2 будет сопоставлено число

(Q) 25 315 53 77 1117.

Если машина Тьюринга задана упорядоченной последовательностью команд Q1,Q2,Q3,...,Qt , то её номер равен

2 (Q1) 3 (Q2 ) .... Pt (Qt ).

Пример.

Машина Тьюринга MT задана последовательностью команд:

Q 1q 0Lq

2

,

(Q ) 25

315

53 77 1117

1

1

 

 

 

1

 

 

Q2 1q2 0Lq2 ,

(Q2 ) 25 317 53 77 1117

Q 0q

2

0Eq

0

,

(Q ) 23

317

53 711 1113.

3

 

 

 

 

3

 

 

Гёделевский номер машины равен:

(MT) 225 315 53 77 1117

325 317 53 77 1117

523 317 53 711 1113.

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

можно поручить находить по гёделевскому номеру соответствующую машину Тьюринга. Машина для любого положительно целого числа n

выдаёт один из двух ответов:

-n не является гёделевским номером никакой МТ,

-n является гёделевским номером MTZ , имеющей следующие команды

(печатает номера команд).

60

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