3.2. Нормальные алгоритмы

advertisement
Теория алгоритмов
179
3.2. Нормальные алгоритмы
Пусть A — алфавит, не содержащий символов “.” и “→”.
Обыкновенной формулой подстановок называется запись вида
P → Q, где P и Q — некоторые слова в алфавите A.
Заключительной формулой подстановок называется запись
вида P → .Q, где P и Q — некоторые слова в алфавите A.
Нормальной схемой подстановок над алфавитом A называет⎧ P1 → d1Q1
⎪
⎪ P2 → d 2Q2
ся запись вида ⎨
, где Pi , Qi — слова в алфавите A,
⎪ ...
⎪⎩ Pk → d k Qk
di — либо пустое место, либо символ “.” .
Нормальным алгоритмом над алфавитом B называется пара
( A, S ) такая, что B ⊆ A, S — нормальная схема над алфавитом B.
Работа нормального алгоритма над словом R состоит из отдельных шагов, в результате которых получаются слова
R = R1 , R2 ,..., Ri ,... Слово Ri +1 получается из слова Ri так:
просматривается нормальная схема подстановок и из неё выбирается самая верхняя формула, левая часть которой входит
в слово Ri . Пусть, например, это будет формула Pj → d j Q j . Затем первое вхождение Pj в слово Ri заменяется на Q j , что
и даёт слово Ri +1 .
Работа нормального алгоритма над словом R заканчивается
в двух случаях:
1) существует i такое, что слово Ri получено с помощью
заключительной формулы подстановки;
2) существует i такое, что ни одна из левых частей нормальной схемы подстановок не входит в слово Ri .
И в том, и в другом случаях слово Ri объявляется результатом работы нормального алгоритма над словом R и говорят, что
нормальный алгоритм применим к слову R.
180
Глава 3
Изображением набора аргументов ( x1 , x2 ,..., xk ) называется
запись вида 1x1 +1 ∗1x2 +1 ∗1x3 +1 ∗ ... ∗ 1xk +1 , (*) где 1z = 11
{...1 .
z
Числовая функция f ( x1 , x2 ,..., xk ) называется вычислимой по
Маркову, если существует нормальный алгоритм, применимый к
любому слову вида (*), переводящий его в слово 1 y +1 , где
y = f ( x1 , x2 ,..., xk ).
Задание 3.2.1
1. Построить нормальный алгоритм, применимый ко всем словам x1 x2 ...xn в алфавите {a ,b} и переводящий их в слово α.
2. Проверить работу построенного нормального алгоритма над
некоторыми словами.
Таблица 3.2.1
№
α
1
ab, если n ≤ 3, ax1 x2 ...xn , если n > 3
2
aa, если в данном слове число букв b нечётно, x1 x2 ...xn −1 , если
чётно
3
x1 x2 ...xn −1 xn xn , если x2 = a , x1 x2 ...xnb , если x2 = b
4
abb, если слово начинается на ab, x1 x2 в остальных случаях
5
x1 ...xn b , если n — чётно, bx1 ...xn , если n — нечётно
6
ab, если x2 = a , x1 ...xn −1 , если x2 = b
7
a ∗ a , если n — нечётно, x1 ...xn −1 xn xn , если n — чётно
8
a n , если x1 = a , x2 , если x1 = b
9
x1 ...xn a n
10
ax2 ∗ x1 ∗ x3 ∗ ... ∗ xn
Теория алгоритмов
181
Таблица 3.2.1 (окончание)
№
α
11
x1 xn x2 x3 ...xn −1 xn
12
b n x1 ...xn
13
(ab) n
14
x1 x2 ...xn ∗ xn−1 ∗ xn − 2
15
x1 ∗ ∗ x3 ...xn −1 , если x2 = a , x3 x4 ...xn , если x2 = b
16
x1 ...xn , если в исходном слове количество букв a нечётно, aba , если
чётно
17
x1 ∗ x3 ∗ x5 ∗ ... ∗ xn , если n нечётно, x1 x2 ...xn , если n чётно
18
x1ax2bx3ax4b...xn
19
x1 x2 x3 ...xn −1 xn xn −1 ...x1
20
baba , если слово начинается на ba ,
x1 x2 ...xn a в других случаях
21
bx1 x2 ...xn , если xn = a , bbb , если xn = b
22
ab , если n — нечётно, xn −1 xn , если n — чётно
23
a n , если xn −1 = a , x1 x2 ...xn − 2 ab , если xn −1 = b
24
x1 x3 x2 x4 x5 ...xn − 2 xn xn −1
25
ax1 x1 x2 x2 ...xn − 2 xn − 2b
26
bb, если n ≤ 3, x1 ...xn −1 , если n > 3
27
x1 x2 ...xn a , если n — нечётно, bx1 ...xn , если n — чётно
28
b n x1 ...xn
29
x2 ∗ x1 ∗ x2 ∗ x1
182
30
Глава 3
xn xn −1 ...x2 x1 x2 x3 ...xn −1 xn
Пример решения задания 3.2.1
Решить задание 3.2.1 для
α = {xn , если xn −1 = a; b n −1 xn , если xn −1 = b}, (n > 1).
1. Опишем работу нормального алгоритма, решающего эту задачу.
Последней в схеме подстановок запишем формулу → α , тогда
слово x1 x2 ...xn перейдёт в αx1 x2 ...xn . Затем с помощью формул
подстановок αa → aα, αb → bα символ α прейдёт на конец слова: x1 x2 ...xn α.
Для разбора варианта xn −1 = a введём формулы подстановок
abα → βb, aaα → βa, aβ → β, β → .
Для разбора случая xn−1 = b введём формулы подстановок
bbα → γbb, baα → γba, aγ → γb, bγ → γb, γ → .
Запишем нормальную схему подстановок:
⎧αa → aα
⎪αb → bα
⎪
⎪abα → βb
⎪
⎪aaα → βa
⎪aβ → β
⎪
⎪β → .
⎨
⎪bbα → γbb
⎪baα → γba
⎪
⎪aγ → γb
⎪bγ → γb
⎪
⎪γ → .
⎪→ α
⎩
2. Проверим работу построенного нормального алгоритма над
словами abba и bbaaa :
abba, αabba , aαbba , abαba , abbαa , abbaα ,
Теория алгоритмов
183
abγba , aγbba , γbbba , bbba.
bbaaa, αbbaaa, bαbaaa , bbαaaa , bbaαaa , bbaaαa ,
bbaaaα , bbaβa , bbβa , bβa , βa , a.
Видим, что нормальный алгоритм работает так, как и требовалось.
Задание 3.2.2
1. Построить нормальный алгоритм, вычисляющий данную
числовую функцию f .
2. Проверить работу построенного нормального алгоритма над
некоторыми наборами значений переменных.
Таблица 3.2.2
f
№
1
f ( x, y , z) = 2 x + z
2
f ( x , y ) = { y − x , если y ≥ x; 0, если y < x}
3
f ( x , y , z , w) = {4, если x — чётно; x , если x нечётно }
4
f ( x , y ) = {1, если x > y; 0, если x ≤ y}
5
f ( x , y , z ) = { z - 3, если z ≥ 3; 0, если z < 3}
6
f ( x , y , z , w) = x + 3 y + 3 w
7
f ( x , y , z ) = {0 , если x = 0; y , если x ≠ 0}
8
f ( x , y ) = { x − y , если x ≥ y; 1, если x < y}
9
f ( x , y , z ) = {3, если y > 1; x , если y ≤ 1}
10
f (x, y , z) = y + z + 4
11
f ( x , y , z ) = {0 , если x ≠ 0; y + 1, если x = 0}
12
f ( x , y ) = { x, если x — чётно; 2 y , если x — нечётно}
184
13
Глава 3
f ( x , y , z ) = { x + y , если x ≥ y; 0, если x < y}
Таблица 3.2.2 (окончание)
f
№
14
f ( x , y , z ) = { z + 1, если z ≠ 0; 0, если z = 0}
15
f ( x , y ) = {0, если x — чётно; 2, если x — нечётно}
16
f ( x, y , z) = 3 y + z
17
f ( x , y , z , w) = {w , если x = 0; 2, если x ≠ 0}
18
f (x, y ) = {x − 2, если x ≥ 2; 0, если x < 2}
19
f ( x, y) = 4 x + 1
20
f ( x , y ) = { x, если x — чётно; 0, если x — нечётно}
21
f ( x , y ) = {0 , если xy = 0; x + y , если xy ≠ 0}
22
f ( x , y , z ) = { y + 2 , если y > 1; 0, если y ≤ 1}
23
f ( x , y ) = {1, х = 1; 0, если x ≠ 1}
24
f ( x , y , z , w) = 2 y + w
25
f ( x , y , z ) = min { x, y }
26
f ( x , y , z ) = { z − 2 , если z ≥ 2; 0, если z < 2}
27
f ( x , y ) = { y − x , если y > x; 2, если y ≤ x}
28
f ( x , y , z , w) = x + y + [ w / 2 ]
29
f ( x , y , z ) = {1, если z — чётно; 2 x + y , если z — нечётно}
30
f ( x , y , z , w) = x + 2 y + 3 z + 4
Пример решения задания 3.2.2
Решить задание 3.2.2 для f ( x , y ) = x + 2 y .
Теория алгоритмов
185
Вначале мы имеем запись изображения набора аргументов
1 ∗ 1 y +1.
Последней формулой подстановки мы введём символ α: → α.
Получим слово α1x +1 ∗ 1 y +1.
Затем с помощью подстановки α1→1α оно преобразуется
в слово 1x +1 α ∗ 1 y +1. Сотрём α и разделительную звёздочку: α*→β.
Удвоим количество единиц в блоке, изображающем второй аргумент: β1→11β. После выполнения всех перечисленных выше
подстановок
окажется
запись,
содержащая
x + 1 + 2( y + 1) = x + 2 y + 3 единицы. Сотрём лишние две единицы
и закончим работу подстановкой 11β→.
⎧α1 → 1α
⎪α∗ → β
⎪⎪
Запишем нормальную схему подстановок: ⎨β1 → 11β
⎪11β → .
⎪
⎪⎩→ α
x +1
2. Проверим работу алгоритма над изображением набора переменных (0,1), т. е. над словом 1*11:
1*11, α1*11, 1α*11, 1β11, 111β1, 11111β, 111.
Итак, осталось три единицы, которые являются изображением
числа 2, что и ожидалось, т. к. f (0,1) = 0 + 2 ⋅1 = 2.
Задание 3.2.3
1. Написать формулу для функции y = f ( x1 , x2 ,..., xn ), вычисляемой нормальным алгоритмом.
2. Проверить работу алгоритма над некоторым набором значений аргументов.
Таблица 3.2.3
№
n
f
№
n
f
186
1
Глава 3
⎧∗ → 11
⎪α 11 → 1α
⎪
⎨α 1 → α
⎪α → .
⎪⎩ → α
3
2
2
⎧ α1 →1α
⎪α∗ →β
⎪ β1 → γ
⎨ γ1→ γ
⎪
⎪ γ →.
⎩→α
Таблица 3.2.3 (продолжение)
№
3
5
7
9
n
f
2
⎧⎪ 1∗ 1→ ∗∗
⎨ 1∗∗→∗∗
⎪⎩ ∗∗→. 1111
3
⎧ α1 → α
⎪α∗→β
⎪ β1 →11β
⎨ β ∗→ α
⎪
⎪ α → . 111
⎩→α
2
⎧ 1∗ 1 →∗
⎪ ∗1 → β
⎪
⎨ ∗ → .1
⎪ β1 → β
⎪⎩ β → .1
3
⎧⎪ ∗ 1 → 1 ∗
⎨ ∗ ∗1→ ∗∗
⎪⎩ ∗∗ → . 111
№
4
6
8
10
n
f
2
⎧ α1 → 11α
⎪ α ∗ → 1β
⎪
⎨ β11 → .
⎪ β1 → . 1111
⎪⎩ → α
3
⎧1∗ 1→ 1∗
⎪1∗ ∗ → α
⎨ α1 → 11 α
⎪
⎩ α →.
2
⎧ ∗ 1 → ∗∗
⎪ ∗∗ →
⎪1 ∗→ β
⎨1 β → β111
⎪
⎪ β → .1
⎩1 → . 1
3
⎧1∗ ∗1→∗ ∗
⎪∗ ∗ ∗1→∗ ∗ ∗
⎪⎪∗ ∗ ∗→.1
⎨∗ ∗1→α
⎪ α1→α
⎪ α∗→.
⎩⎪∗→∗ ∗
Теория алгоритмов
11
4
187
⎧ α1→α
⎪ α∗→β
⎪β1→1β
⎪β∗→γ
⎨ γ∗→γ
⎪ γ1→γ
⎪ γ→.
⎪ →α
⎩
12
3
⎧ α11→β
⎪ α1→γ
⎪β1→β
⎪⎪β∗→β
⎨β→.1
⎪ γ1→1γ
⎪ γ∗→γ
⎪ γ→.11
⎪⎩ →α
Таблица 3.2.3 (продолжение)
№
13
15
n
f
3
⎧1∗ 1→ 1∗
⎪ ∗∗ → α
⎪
⎨ α11 → 1 α
⎪ α 1 →.
⎪⎩ α → .
3
⎧ α 1 →1 α
⎪α∗ →β
⎪ β1 →111β
⎪
⎨ β ∗→ γ
⎪ γ 1→ γ
⎪ γ →.
⎪⎩ → α
№
14
16
n
f
3
⎧ 11 α → 1 α
⎪1α1→1 γ
⎪ γ 1→1 γ
⎪⎪ γ ∗ → .
⎨ α1→ β
⎪
⎪ β1→ β
⎪ β ∗ → . 11
⎪⎩ 1 ∗ → α
2
⎧α1→1α
⎪α ∗11→β
⎪
⎪α ∗1→γ
⎪
⎨γ →.
⎪1β →β
⎪
⎪ β →.
⎪→α
⎩
188
Глава 3
17
19
3
⎧ α 11 → 11 β
⎪ β1→1β
⎪β∗→β
⎪β→.
⎪
⎨ α1→ γ
⎪ γ 1→ γ
⎪ γ ∗→ γ
⎪ γ → . 11
⎪ →α
⎩
3
⎧ α1→ α
⎪ α ∗1 → β
⎪ β 111 → 1 β
⎪
⎨ β 11 ∗ → . 11
⎪ β1∗ → .1
⎪β∗→.
⎪ →α
⎩
18
20
2
⎧ α 1→ 111 α
⎪ α ∗→ β
⎪
⎨ β 1→ 11 β
⎪ β → . 111
⎪⎩ → α
2
⎧ α1 → 1 α
⎪ α ∗→ β
⎪
⎨ β1 →111β
⎪ β → . 11
⎪⎩ → α
Таблица 3.2.3 (окончание)
№
21
23
n
f
2
⎧ αα 1 → αα
⎪ αα ∗ → αα
⎪ αα → . 11
⎪⎪ α 11 → β
⎨ β1→ β
⎪
⎪ β ∗ → . 11
⎪1α → α1
⎪⎩ 1 ∗ → α 1 ∗
3
⎧ 1 ∗→ ∗ 1
⎪ ∗∗1→ α
⎪
⎨ α11 → 1 α
⎪ α 1 →.
⎩⎪ α → .
№
22
24
n
f
2
⎧ α1→1β
⎪ β1→1 α
⎪ α∗→ γ
⎪ γ 1 → 11 γ
⎪
⎨ γ →.
⎪β∗→ δ
⎪ δ 11 → δ 1
⎪ δ →.
⎪ →α
⎩
2
⎧ α 1 → 1β
⎪ β1 →1 α
⎪α∗→γ
⎪
⎨ β ∗1 →.
⎪ γ 1→ γ
⎪ γ →.
⎪→α
⎩
Теория алгоритмов
25
27
29
3
⎧ α 1 → 11 α
⎪ α ∗1 → β
⎪
⎨ β1→ β
⎪ β ∗ → . 111
⎪⎩ → α
2
⎧ α 1→ 1 α
⎪ α ∗→ β
⎪
⎨ β 1→ β
⎪ β → . 11
⎪⎩ → α
2
⎧ α1 → 1β1α
⎪ α ∗1→
⎪
⎨ β→ γ
⎪ γ →.
⎪⎩ → α
189
26
28
30
3
⎧1∗ 1→ 1∗
⎪ ∗ ∗1→ α
⎨ α1 → 111 α
⎪
⎩ α →.
2
⎧ 11 ∗ 11 → . 11
⎪ ∗→ β
⎨ β 1 → 11 β
⎪
⎩1β → .
3
⎧ α 1→ α
⎪ α ∗→β
⎪
⎨ β 1→ 11 β
⎪ β∗→.
⎪⎩ → α
Пример решения задания 3.2.3
Решить задание 3.2.3 для f ( x , y , z ) , вычисляемой нормальным
⎧∗1 → α
⎪
алгоритмом c данной. схемой подстановок: ⎪⎨αα1 → 11αα
⎪αα → .
⎪⎩α1 → α
1. Вначале мы имеем запись изображения набора аргументов
1 ∗ 1 y +1 ∗ 1z +1. Запишем последовательность слов, получающихся при работе данного нормального алгоритма над словом
1x +1 ∗ 1 y +1 ∗ 1z +1 :
x +1
1x +1 ∗11 y ∗1z +1 , 1x +1 α 1 y ∗11z ,
1x +1 α11y −1 α1z , 1x +1 α11y −2 α1z ,
...,1x +1 αα11z −1 , 1x +3 αα11z − 2 , 1x +5 αα11z −3 ,..., 1x + 2 z +1 αα , 1x + 2 z +1.
Итак, в результате работы нормального алгоритма над изображением набора аргументов получилось слово из x + 2 z + 1
единиц, которое служит изображением числа x + 2 z .
Значит, искомая функция имеет вид f ( x , y , z ) = x + 2 z.
190
Глава 3
2. Проверим работу алгоритма над изображением набора аргументов (2,0,1): 111 ∗ 1 ∗ 11 , 111 α ∗ 11, 111 αα 1 , 11111 αα , 11111 .
В результате получено изображение числа 4.
Но f (2,0,1) = 2 + 2 ⋅ 1 = 4. Так что нормальный алгоритм получил то, что и должен был получить.
3.3. Рекурсивные функции
Числовой функцией называется функция вида f : N 0n → N 0 , где
N 0 = {0,1,2,3,...}.
Исходными функциями называются числовые функции следующих видов:
1) o( x) ≡ 0 — нулевая функция;
2) s ( x) ≡ x + 1 — функция следования;
3) I kn ( x1 , x2 ,..., xn ) = xk — функция выбора аргумента.
Download