
- •Структуры и алгоритмы компьютерной обработки данных
- •Часть 3. Практикум
- •Введение
- •Тема 1. Алгоритмы на графах (6 часов)
- •Рассматриваемые темы с указанием литературы
- •Тема 2. Алгоритмы комбинаторного перебора (6 часов)
- •Рассматриваемые темы с указанием литературы
- •Типовые алгоритмы формирования групп:
- •Задача "Кодовый замок сейфа"
- •Задачи из "Теории чисел"
- •Геометрические задачи
- •Тема 3. Общие методы разработки алгоритмов (4 часа)
- •Рассматриваемые темы с указанием литературы
- •Эвристические алгоритмы
- •Порождение комбинаторных объектов, перебор
- •Тема 4. Теория сложности алгоритмов (2 часа)
- •Рассматриваемые темы с указанием литературы
- •Введение
- •Машина Тьюринга
- •Недетерминированная машина Тьюринга
- •Классы p и np Определение
- •Определение
- •Полиномиальное сведeние
- •Теорема (Кук)
- •Доказательство
- •Проблема 3-sat
- •Проблема is
- •Проблема 3-col
- •Проблема ilp
- •Класс проблем co-np
- •Определение
- •Теорема
- •Библиографический список
- •Содержание
- •600014 Г. Владимир, ул. Университетская, д. 2
Типовые алгоритмы формирования групп:
Размещения с повторениями:
Программная реализация на Бейсике for i=1 to n for j=1 to n print A(i), A(j); next j, i |
Программная реализация на Паскале for i:=1 to n do for j:=1 to n do writeln (A[i], A[j]); |
Размещения без повторений:
Программная реализация на Бейсике for i=1 to n for j=1 to n if i<>j then print A(i), A(j); next j,i |
Программная реализация на Паскале for i:=1 to n do for j:=1 to n do if i<>j then writeln (A[i], A[j]); |
Сочетания с повторениями:
Программная реализация на Бейсике ... for i=1 to n for j=i to n print A(i,j); next j, i |
Программная реализация на Паскале ... for i:=1 to n do for j:=i to n do writeln (A[i], A[j]); |
Сочетания без повторений:
Программная реализация на Бейсике ... for i=1 to n-1 for j=i+1 to n print A(i), A(j); next j, i |
Программная реализация на Паскале ... for i:=1 to n-1 do for j:=i+1 to n do writeln (A[i], A[j]); |
Задача "Кодовый замок сейфа"
Из 10 букв нужно набрать 3. Повторение букв допустимо. Подсчитать количество возможных комбинаций кодов.
Идея решения: Необходимо применить типовой алгоритм формирования групп РАЗМЕЩЕНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике
dim a$(10)
for i=1 to 10
input "введите букву"; a$(i)
next
for х1=1 to 10
for х2=1 to 10
for х3=1 to 10
print a$(х1); a$(х2); a$(х3);
k=k+1
next x3,x2,x1
print "k="; k
Программа на Паскале:
var a: array [1.10] of char;
x1, x2, x3, k, i: integer;
begin
for i:=1 to 10 do
readln (a[i]);
for х1:=1 to 10 do
for х2:= 1 to 10 do
for х3:=1 to 10 do
begin
writeln (a[х1], a[х2], a[х3]);
k:=k+1;
end;
writeln ('k:=', k);
end.
Тест:
Результат: |
1000 |
Задача
В ассортименте кондитерской сегодня 10 видов пирожных. Каких три пирожных продавец может предложить покупателю?
Идея решения: Необходимо применить типовой алгоритм формирования групп СОЧЕТАНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике
dim a$ (10)
for i=1 to 10
input "введите название пирожного"; a$ (i)
next
for х1=1 to 10
for х2=1 to 10
for х3=1 to 10
print a$(х1); a$(х2); a$(х3)
next x3,x2,x1
Программа на Паскале:
var a: array [1.10] of string;
x1, x2, x3, i: integer;
begin
for i:=1 to 10 do
begin
writeln ('введите название пирожного');
readln (a[i]);
end;
for х1:=1 to 10 do
for х2:= 1 to 10 do
for х3:=1 to 10 do
writeln (a[х1], a[х2], a[х3]);
end.
Задачи из "Теории чисел"
Найти все трехзначные числа, сумма цифр которых равна К (введенному с клавиатуры).
Идея решения: Необходимо применить типовой алгоритм формирования групп РАЗМЕЩЕНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике
Input "k="; k
for х1=1 to 9
for х2= 0 to 9
for х3=0 to 9
if х1+х2+х3=k then print х1; х2; х3
next x3,x2,x1
Программа на Паскале:
var x1, x2, x3, k: integer;
begin
writeln ('k=');
readln (k);
for х1:=1 to 9 do
for х2:=0 to 9 do
for х3:=0 to 9 do
if х1+х2+х3=k then
writeln (х1, х2, х3);
end.
Тест:
Дано: |
3 |
|
Результат: |
102 111 120 201 210 300 |
Подсчитать количество "счастливых" троллейбусных билетов ("счастливые" номера билетов - шестизначные числа, в которых сумма первых трех цифр равна сумме вторых трех цифр).
Идея решения: Необходимо применить типовой алгоритм формирования групп РАЗМЕЩЕНИЯ С ПОВТОРЕНИЯМИ.
Программа на Бейсике:
for х1=1 to 9
for х2=0 to 9
for х3=0 to 9
for х4=0 to 9
for х5=0 to 9
for х6=0 to 9
if x1+x2+x3=x4+x5+x6 then k=k+1
next x6, x5, x4, x3, x2, x1
print "k="; k
Программа на Паскале:
var x1, x2, x3, k: integer;
begin
k:=0;
for х1:=1 to 9 do
for х2:=0 to 9 do
for х3:=0 to 9 do
for х4:=0 to 9 do
for х5:=0 to 9 do
for х6:=0 to 9 do
if x1+x2+x3=x4+x5+x6 then k:=k+1;
writeln ('k=', k);
end.
Тест:
Результат: |
46242 |