
- •Основы Алгоритмизации и Программирования
- •Цели :
- •Литература
- •Методические пособия
- •Тема 1 Программирование с
- •Рекуррентные соотношения и стратегии решения задачи разбиением ее на подзадачи
- •• Определение 1.
- •Определение 2.
- ••Любое правильное рекуррентное уравнение при задании начального условия описывает некую счетную бесконечную последовательность
- •Примеры описания объектов с помощью рекуррентных уравнений
- •Примеры описания объектов с помощью рекуррентных уравнений
- •Примеры описания объектов с помощью рекуррентных уравнений
- ••Все выше приведенные определения являются рекурсивными, т.е. представляют объект соотношением, выражающим объект через
- ••В общем виде рекурсивный алгоритм P можно
- •Решать задачу рекурсивно (т.е. составить рекурсивный алгоритм)
- •Вычисление n-го числа Фиббоначи
- •Две стратегии разбиения на подзадачи
- •Стратегия
- •Недостаток стратегии РиВ
- •Стратегия
- •Суть стратегии ДП
- •Программирование рекуррентных соотношений
- •Вычисление n!
- •Найдем максимум a1...an
- •Нахождение max(a1..an) (как метод класса)
- •Нахождение max(a1..an)
- ••Итерация - от человека.
- •Класс c методом ввода массива
- •Найти max делением пополам
- •Найти номер max делением пополам
- •Работа с методами класса Tob
- •Замечание
- •Особенности выполнения рекурсивной подпрограммы
- •Особенности выполнения
- •Особенности выполнения
- •Рекурсивный вызов может быть прямым,
- •Организация выхода из рекурсии
- •Условия окончания рекурсии
- •О целесообразности использования рекурсивных подпрограмм
- •Неподходящий пример
- •Решение с помощью итерационного алгоритма по стратегии динамического программирования
- •рекомендация
- •Задача о Ханойской башне
- •Ханойская башня
- •Ханойская башня из 2 дисков
- •Ханойская башня из n дисков
- •Рекурсивный алгоритм
- •Рекурсивная подпрограмма
- •Hanoi(3,1,2,3) вызовет следующее дерево активаций и печати
- •результат
- •Три диска
- •Функция Аккермана
- •Матрица Аккермана
- •Рекурсивная функция
- ••procedure TForm1.Button1Click(Sender: TObject);
- •Правила выбора программной реализации рекуррентных соотношений
- •если возникающие подзадачи на каждом шаге независимы, то каждая из них будет решаться
- ••Контрольные вопросы
- •Задачи для контроля
- •Задачи для контроля
- •Конец темы 1
Примеры описания объектов с помощью рекуррентных уравнений
• |
2. Сумма |
n |
|
|
S(n) ai |
• |
|
i 0 |
|
|
|
• |
а) S(0)=a0; |
|
• |
б) S(n)=S(n-1)+an. |
|
• |
|
|
02.07.19 |
11 |
Примеры описания объектов с помощью рекуррентных уравнений
•3. Числа Фиббоначи:
•а) b(0)=0; b(1)=1;
•б) b(n)=b(n-1)+b(n-2)
•0 1 1 2 3 5 8 13…
02.07.19 |
12 |
•Все выше приведенные определения являются рекурсивными, т.е. представляют объект соотношением, выражающим объект через самого себя
•Таким образом рекурсивное определение
•позволяет с помощью конечного высказывания определить
бесконечное множество объектов
•Если N натуральное то N+1 тоже натуральное,
•1 - натуральное
•Аналогично с помощью конечной рекурсивной записи алгоритма можно описать бесконечное вычисление, причем запись алгоритма не будет содержать организации явных повторений.
•
02.07.19 |
13 |
•В общем виде рекурсивный алгоритм P можно
выразить как алгоритм, состоящий из комбинации последовательности действий S и самого P:
•P = S (a,b,…, P).
•На каждом шаге n комбинация
•Pn = S (an-1,bn-1,…, Pn-1).
•представляет элементарную задачу в
предположении, что an-1,bn-1,…, Pn-1 уже вычислены.
•Такое определение последовательности Pn называется индуктивным
02.07.19 |
14 |
Решать задачу рекурсивно (т.е. составить рекурсивный алгоритм)
– это значит разложить задачу на подзадачи, которые затем подобным образом (т.е. рекурсивно) разбить на еще меньшие подзадачи;
на определенном уровне подзадачи становятся настолько простыми, что могут быть решены тривиально;
когда решены все элементарные подзадачи, тогда подзадачи составленные из элементарных тоже будут выполнены.
Исходная задача окажется выполненной, когда будут выполнены все подзадачи ее образующие.
Алгоритм разбиения исходной задачи на подзадачи |
|
записывается в виде рекуррентного соотношения. |
15 |
02.07.19 |
нахождение ma=max (a1...an)
•можно разбить на элементарные подзадачи в виде следующего рекуррентного соотношения
•
•max (a1...an) = max (max (a1...an-1), an),
•max (a1...an-1) = max (max (a1...an-2), an-1),…
•. . . .
•max (a1,a2) = max (max (a1), a2)
02.07.19 |
16 |
нахождение ma=max (a1...an)
• |
Каждая элементарная подзадача |
• |
ma=max (х,у) |
• |
решается выбором |
• |
if x>y then ma=x else ma=y. |
•На последнем уровне окажется тривиальная
задача: ma = max (a1) = a1,
•затем находится ma = max (ma, a2) и т.д.
02.07.19 |
17 |
нахождение ma=max (a1...an)
•Можно разбиение на подзадачи организовать по другому:
•max (a1...an) =
•= max (max (a1...an/2), max (an/2+1...an) )
•Упражнение:
•Проверьте, как будет эффективней
02.07.19 |
18 |
нахождение ma=max (a1...an)
• |
Мах( 5 4 3 8 7 2 1) |
|
• |
(5 4 3) |
(8 7 2 1) |
• |
(5) (4 3) |
(8 7) (2 1) элементарные |
• |
(5 4) |
(8 2) |
• |
(5 8) |
|
• |
8 |
|
•Решается 6 элементарных неповторяющихся подзадач!
02.07.19 |
19 |
Вычисление n-го числа Фиббоначи
• |
Разбиение |
F(0)=0; F(1)=1 |
• |
|
F(n)=F(n-1)+F(n-2); |
• |
|
4 (3) |
5(5) |
|
3(2) |
|
|
• |
|
|
|
|
|||
• |
3(2) |
2(1) |
2(1) |
1(1) |
|||
• |
2(1) |
1(1) |
1(1) |
0(0) |
1(1) |
0(0) |
|
• |
1(1) 0(0) |
|
|
|
|
|
|
•Происходит разбиение на зависимые подзадачи
•В результате приходится повторно решать
одни и те же подзадачи |
20 |
02.07.19 |