Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Теория алгоритмов. Учебное пособие
.pdf
ПРИЛОЖЕНИЯ
Приложение 1
Код программы на Pascal имеет вид:
program H; {Ханойские башни}
var n,x,y,z: integer;
var x1:char;
procedure Hanoi(n:integer; var x,y,z :integer);
begin
if n=1 then
writeln(‘Переложить со стержня ‘,x,’ на стержнь ‘,y)
else
begin
Hanoi(n-1,x,z,y);
writeln(‘Переложить со стержня ‘,x,’ на стержнь ‘,y);
Hanoi(n-1,z,y,x);
end;
end;
begin
repeat
x:=1; y:=2; z:=3;
write(‘‚введите число колец n = ‘);
readln(n);
Hanoi(n,x,y,z);
write(‘Хотите продолжить? ‘);
readln(x1);
until x1<>’y’;
end.
— 191 —

ПРИЛОЖЕНИЯ
Приложение 2
program FIBONACHI;
{Вычисляет числа Фибоначчи по mod 10
рекурсивная процедура}
var k,n: longint;
function Fib(n: longint): longint;
begin
if n=0 then Fib:=0 else
if n=1 then Fib:= 1 else
Fib:= ((Fib(n-1) mod 10)+(Fib(n-2) mod 10)) mod 10;
end;
begin
writeln(‘Введите номер члена последовательности’);
write(‘n = ‘);
readln(n);
for k:=0 to n do write(Fib(k),’ ‘);
write(‘*’);
readln
end.
Приложение 3
program Example;
{нахождение кратчайшего пути методом перебора }
const max = 15000; {машинная
бесконечность}
type mnog=set of byte; {множество Bk}
var a,path: array[1..20] of byte; {решение}
var map: array[1..20,1..20] of integer; {весовая
матрица }
var start,nish,n,i,j: byte; {start — начало цепи,
nish — конец цепи}
var length: byte;
var ss,sum: integer; {sum = длине
кратчайшего пути}
procedure print(k: byte); {вычисление длины пути}
var i: byte;
begin
ss:=0;
— 192 —

Приложение 3
for i:= 1 to k-1 do ss:= ss+map[a[i],a[i+1]];
if ss<sum then begin
sum:=ss; length:=k;
for i:= 1 to k do {запоминание очередного пути}
path[i]:=a[i];
end;
end;
function min(var b:mnog): byte;{нахождение min Bk}
var i:byte; ag:boolean;
begin
i:= 1; ag:= true;
while (i<=n) and ag do begin
if i in b then begin
min:= i; ag:= false; end;
i:= i+1; end;
end;
procedure Bk(k:byte; var b:mnog); {построение Bk}
var s,i: byte;
begin
s:=a[k-1];
b:=[ ];
for i:=1 to n do if map[s,i]<>max then
b:= b+[i];
for i:=1 to k-1 do b:=b-[a[i]];
end;
procedure BackTrack(k:byte);
var b:mnog;
begin
Bk(k,b);
while b<>[ ] do begin
a[k]:= min(b);
b:=b-[a[k]];
if a[k]<>nish then BackTrack(k+1) else print(k);
end;
end;
begin
sum:=max;
write(‘введите число вершин графа’);
readln(n);
writeln(‘введите весовую матрицу’);
— 193 —

ПРИЛОЖЕНИЯ
randomize;
for i:= 1 to n do begin {ввод весовой матрицы}
for j:= i+1 to n do begin
map[i,j]:=random(51);
map[j,i]:=map[i,j];
end;
map[i,i]:=0;
end;
for i:=1 to n do begin
for j:=1 to n do write(map[i,j],’ ‘);
writeln
end;
for i:= 1 to n do for j:= 1 to n do if map[i,j]=0 then
map[i,j]:=max;
write(‘введите начальную и конечную вершины’);
readln(start,nish);
a[1]:= start;
BackTrack(2);
write(‘кратчайший путь: ‘);
for i:=1 to length do write(path[i],’ ‘);
writeln;
writeln(‘Длина = ‘,sum);
writeln(‘для завершения нажмите <Enter>’);
readln;
end.
end.
Приложение 4
program Knapsack; {Решение задачи о рюкзаке методом
перебора }
const dd=9;
var S: set of 1..100; {подмножество “предметов”}
SOPT: set of 1..100; {оптимальное подмножество
«предметов»}
v:array[1..100] of integer; {массив “объемов”}
c:array[1..100] of integer; {массив “стоимостей”}
B,maxc,i,n:integer; {B — вместимость “рюкзака “}
procedure Cost; {Вычисление суммарной стоимости
«предметов»,
— 194 —

Приложение 4
входящих в S и вмещающихся в «рюкзак»}
var maxv,sumc,i:integer;
begin
maxv:=0; sumc:=0;
for i:=1 to n do if i in S then begin
maxv:=maxv+v[i]; {вычисление суммарного объема }
if maxv<=B then
sumc:=sumc+c[i]; {вычисление суммарной стоимости }
end;
if sumc>maxc then begin {maxc — максимальная
стоимость}
maxc:=sumc;
SOPT:=S;
end;
end;
begin
writeln;
write(‘число «предметов» = ‘); {n = числу «предметов»}
read(n);
randomize;
writeln(‘размер’,’ ‘,’стоимость’);
for i:= 1 to n do begin {заполнение массивов
«объемов» и «стоимостей»}
v[i]:=random(dd)+1;
c[i]:=random(dd)+1;
write(‘v[‘,i,’] = ‘,v[i],’ ‘);
writeln(‘c[‘,i,’] = ‘,c[i]);
end;
write(‘вместимость «рюкзака « = ‘); {ввод вместимости
«рюкзака «}
readln(B);
maxc:=0;
S:=[]; {порождение подмножества S}
while not (n+1 in S) do begin
Cost;
i:=1;
while i in S do begin
S:=S-[i];
i:=i+1;
end;
— 195 —

ПРИЛОЖЕНИЯ
S:=S+[i];
end;
write(‘выбираем следующие «предметы»: ‘);
for i:=1 to n do if i in SOPT then
write(i,’ ‘);
writeln;
write (‘стоимость выбранных «предметов» = ‘,maxc);
readln;
end.
— 196 —

ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ .................................... 3
Основные свойства алгоритма ..................... 6
Глава 1. МАТЕМАТИЧЕСКАЯ МАШИНА
ТЬЮРИНГА КАК ФОРМА УТОЧНЕНИЯ
ПОНЯТИЯ АЛГОРИТМА ................ 12
1.1. Математическое понятие «машина Тьюринга».
Алфавит машины Тьюринга. Основные операции
надмашиной Тьюринга ...................... 12
1.2. Понятие конфигураций машины Тьюринга (МТ) . 14
1.3. Операции над машинами Тьюринга............ 17
1.4. Базис элементарных машин Тьюринга ......... 22
1.5. Уточнение понятия алгоритма через машину
с неограниченными регистрами ............... 30
Контрольные вопросы .......................... 36
Практические задания .......................... 37
Глава 2. ТЕОРИИ РЕКУРСИВНЫХ ФУНКЦИЙ ..... 39
2.1. Примитивно рекурсивные функции.
Базис элементарных функций. Операции
подстановки и примитивной рекурсии.
Основные свойства.......................... 39
2.2. Примитивно рекурсивные функции относительно
совокупности функций. Основные свойства ..... 49
2.3. Производные операции над функциями ........ 51
— 197 —

ОГЛАВЛЕНИЕ
2.4. Операции конечного суммирования
и конечного произведения ................... 54
2.5. Предикат, логическая функция. Логические
операции с предикатами ..................... 57
2.6. Операции навешивания кванторов.
Операции навешивания кванторов относительно
двуместных предикатов ..................... 60
2.7. Примитивно рекурсивный предикат ........... 62
2.8. Операция навешивания ограниченного
квантора над предикатами ................... 66
2.9. Кусочное задание функции................... 69
2.10. Операция ограниченной минимизации ........ 72
2.11. Частично рекурсивные функции ............. 76
2.12. Правильная вычислимость функции
по Тьюрингу. Эквивалентность двух уточнений
алгоритма................................ 79
Контрольные вопросы .......................... 86
Практические задания .......................... 87
Глава 3. РЕКУРСИВНЫЕ И РЕКУРСИВНО
ПЕРЕЧИСЛИМЫЕ МНОЖЕСТВА ......... 91
3.1. Примитивно рекурсивная нумерация пар
натуральных чисел ......................... 92
3.2. Рекурсивно перечислимые множества.......... 94
3.3. Функции, нумерующие n натуральных чисел... 108
3.4. Универсальные функции ................... 111
3.5. Иерархия множеств и структура класса
вычислимых функций ..................... 117
Контрольные вопросы ......................... 124
Практические задания ......................... 125
Глава 4. АЛГОРИТМИЧЕСКИЕ ПРОБЛЕМЫ ...... 128
4.1. Проблема самоприменимости................ 129
4.2. S-m-n — теорема Клини .................... 132
— 198 —

ОГЛАВЛЕНИЕ
4.3. Другие неразрешимые алгоритмические
проблемы ................................ 134
4.4. Теорема Райса ............................ 140
4.5. Алгоритмические проблемы в других областях
математики .............................. 143
Контрольные вопросы ......................... 148
Глава 5. ВВЕДЕНИЕ В ТЕОРИЮ СЛОЖНОСТИ
АЛГОРИТМОВ........................ 149
5.1. Введение в теорию сложности вычислений ..... 149
5.2. Классы сложности......................... 171
5.3. Введение в теории NP-полноты .............. 176
5.4. Полиномиальная сводимость и полнота ....... 182
ЛИТЕРАТУРА ............................... 189
ПРИЛОЖЕНИЯ .............................. 191
Приложение 1 ................................ 191
Приложение 2 ................................ 192
Приложение 3 ................................ 192
Приложение 4 ................................ 194
— 199 —

МИРЗОЕВ Махмашариф Сайфович
МАТРОСОВ Виктор Леонидович
ТЕОРИЯ АЛГОРИТМОВ
Учебное пособие
Публикуется в авторской редакции
Дизайн обложки Середа Т. В.
Компьютерная верстка Середа Т. В.
Издательство «Прометей»
119002, г. Москва, ул. Арбат, д. 51, стр. 1
Тел.: +7 (495) 730-70-69
E-mail: info@prometej.su
Подписано в печать 14.12.2018
Формат 60×84/16. Объем 12,5 п.л.
Тираж 500 экз. Заказ № 814
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
