Professional Documents
Culture Documents
Getfile
Getfile
розв’язання
рекурентнних
співвідношень (РС)
План
1. Поняття рекурентних співвідношень
2. Основні способи розв’язання рекурентних
співвідношень
3. Деякі корисні формули
4. Метод ітерацій.
4.1. Дерева рекурсій. Приклад.
4.2. Ряди. Приклад.
5. Загальний рецепт.
6. Метод підстановки.
Способи розв’язання РС
• Багато задач, які доводиться розв’язувати
програмістам, досить ефективно розв’язуються
за допомогою рекурсивних алгоритмів.
Оцінюючи час роботи таких рекурсивних процедур,
ми приходимо до співвідношення, що виражає цей час
через час роботи тієї ж процедури на вхідних даних
меншого розміру (такі співвідношення називаються
рекурентними).
b logb a
=a e ln( x )
=a
logb a = 1 / log a b
log b a = c log b a
c
n
n( n + 1 )( 2n + 1 )
k =0
k =
2
6 n
1
k =1 k
= ln( n ) + 0( 1 )
n +1
n
k −1
k =0
k =
3
k −1
, де x 1
Деякі корисні формули
Сума Sc членів нескінченної спадної геометричної
прогресії:
1 a де m >1,
Sc = = a – перший член прогресії,
k =0 m k
1− q
q – основа прогресії
де r >1
1. Метод ітерацій
Для розв’язання співвідношення можна його
проітерувати, одержати ряд та оцінити його.
T(n) → →
T(n) → →
бо та
• Скільки кроків треба зробити, щоб дійти до T(1)?
Оскільки після i-ї ітерації виявиться , ми дійдемо до Т(1)
коли , тобто коли .
Враховуючи, що можемо оцінити ряд спадною
геометричною прогресією (+ останній член ):
2. Загальний рецепт
Даний метод можна застосовувати для рекурентних
співвідношень вигляду
T(n) = aT(n/b) + f(n) (*)
де а1, b>1 – деякі константи; f(n) – додатна (принаймні
для великих значень аргументу) функція.
(*) виникає, якщо алгоритм розбиває задачу розміром n
на а підзадач розміру n/b, які розв’язуються рекурсивно,
кожна за час Т(n/b), і результати об’єднуються. Витрати
на розбиття та об'єднання описуються функцією f(n).
У формулі (*) виникає проблема з округленням, оскільки
частка n/b може не бути цілою. Формально варто було б
замінити Т(n/b) на T(n/b), або на T(n/b).
Обидва варіанти приведуть до одної і тої ж відповіді,
тому для простоти будемо упускати округлення.
2. Загальний рецепт (теорема)
Нехай а1 і b>1 – константи, f(n) – функція,
Т(n) визначено при невід’ємних n формулою
T(n) = aT(n/b) + f(n), (*)
де під (n/b) розуміється n/b або n/b. То:
1) якщо для деякого >0,
то
2) якщо , то
Тут а=9;
b=3;
f(n)=n;
nlogba = θ(n2).
Тут а=1;
b=3/2;
f(n)=1;
nlogba = nlog3/21 = n0 = 1.
для с = 3/4.
Отже, застосовуємо друге твердження теореми
та робимо висновок, що Т(n) = θ(n∙log n).
3. Метод підстановки
• Ідея: відгадати відповідь і довести її за індукцією.
Це потребує досвіду. Наприклад, якщо Ви вже
розв’язували подібне рекурентне співвідношення і
отримали деяку відповідь – її можна прийняти і в даному
випадку, а потім або довести правильність відповіді, або
шукати іншу відповідь.