1   2   3   4   5   6   7
Ім'я файлу: 04_Recurrences.docx
Розширення: docx
Розмір: 125кб.
Дата: 31.12.2022
скачати


Теорія алгоритмів :: Рекурентні співвідношення






Тема 4. Рекурентні співвідношення
Рекурентне співвідношення – це рівняння або нерівність, яка описує функцію із використанням самої себе, але тільки з меншими аргументами. Наприклад, час роботи процедури MergeSort T(n) в найгіршому випадку описується за допомогою наступного рекурентного співвідношення:

T(n) (1)

якщо n 1,

(4.1)



2T(n/ 2)  (n) якщо n 1.

Рішенням цього співвідношення є функція T(n) = Θ(nlgn).

При розгляді рекурентних співвідношень зазвичай вводяться два спрощення. По- перше, приймається, що час роботи алгоритму T(n) визначається лише для цілочислових n, оскільки в більшості алгоритмів кількість вхідних елементів виражається цілим числом.

По-друге, оскільки час роботи алгоритму з вхідними даними фіксованого розміру виражається константою, то в рекурентних співвідношеннях для достатньо малих nзазвичай справедлива тотожність T(n) = Θ(1). Тому для зручності граничні умови рекурентних співвідношень, як правило, відкидаються та приймається, що для малих n час роботи алгоритму є T(n) константою. Тому попереднє рекурентне співвідношення зазвичай буде записуватись як:

T(n) 2T(n/ 2)  (n) , (4.2)

без явного зазначення T(n) для малих n.

    1. Метод підстановки


Метод підстановки, який застосовується для рішення рекурентних співвідношень, складається з двох етапів:

  1. робиться припущення про вигляд розв’язку;

  2. за допомогою методу математичної індукції визначаються константи та доводиться, що рішення вірне.

Назва методу пояснює, що припущене рішення підставляється у рекурентне рівняння. Цей метод достатньо потужний, але може застосовуватись лише коли легко можна висунути припущення щодо вигляду розв’язку.

Метод підстановки можна використовувати для визначення або верхньої, або нижньої межі рекурентного співвідношення. В якості прикладу розглянемо верхню границю рекурентного співвідношення:

T(n) 2T(n/ 2) n, (4.3)

яке подібне до (4.2). Ми припускаємо, що розв’язок має вигляд T(n) = О(nlgn). Метод полягає в доведенні того, що при придатному виборі константи c>0 виконується

нерівність T(n) сnlgn. Почнемо з того, що припустимо справедливість цієї нерівності

для n/ 2 , тобто що виконується співвідношення Tn/ 2 cn/ 2 lgn/ 2 . Після

підстановки даного виразу в рекурентне співвідношення отримуємо:

Tn 2cn/ 2 lgn/ 2 n cnlgn/ 2 n cnlg n cnlg 2 n

cnlg n cn n cnlg n,

де остання нерівність виконується при c1.

Тепер, згідно методу математичної індукції, необхідно довести, що цей розв’язок справедливий для граничних умов. Зазвичай для цього достатньо показати, що граничні умови є придатною базою для доведення за індукцією. В рекурентному співвідношенні (4.3) необхідно довести, що сталу cможна обрати достатньо великою для того, щоб співвідношення T(n)  сn lgnвиконувалось й для граничних умов. Така вимога інколи призводить до проблем. Припустимо, що T(1) = 1 єдина гранична умова цього

співвідношення. Для n = 1 співвідношення T(n)  сn lgnдає T(1)  с  1  lg1 = 0, що суперечить припущенню T(1) = 1. Відповідно, даний базис індукції нашого доведення не виконується.

Цю складність, яка виникає при доведенні припущення індукції для вказаної граничної умови, легко обійти. Наприклад, в рекурентному співвідношенні (4.3) можна використовувати переваги асимптотичних позначень, які вимагають довести нерівність T(n)  сn lgn тільки для великих n (nn0, де n0 – константа). Це дозволяє в доведенні за методом математичної індукції не враховувати граничну умову T(1) = 1. Так, при n>3 наведене рекурентне співвідношення явним чином від T(1) не залежить. Таким чином, обравши n0 = 2, в якості бази індукції можна розглядати не T(1), а T(2) та T(3). З рекурентного співвідношення слідує, що T(2) = 4, а T(3) = 5. Тепер доведення за математичною індукцією співвідношення T(n)  сn lgn для деякої константи с1 можна завершити, обравши її достатньо великою для того, щоб були справедливі нерівності T(2)  2с lg2 та T(3)  3с lg3. Для цього достатньо обрати с2. В більшості рекурентних співвідношень легко розширити граничні умови таким чином, щоб припущення індукції виявилось вірним для малих n.

На жаль, не існує єдиного рецепту як вгадати розв’язок рекурентного співвідношення. Для цього потрібний досвід, вдача та творче мислення. Проте існують певні евристичні прийоми, які можуть допомогти зробити правильну здогадку.

Якщо рекурентне співвідношення подібне до того, що ми щойно розглянули, то можна припустити, що розв’язки цих співвідношень будуть подібними. Наприклад, розглянемо рекурентне співвідношення:

T(n) 2T(n/ 2 17) n,

яке виглядає більш складним, адже в аргументі функції Tправої частини доданий доданок

17. Але інтуїтивно зрозуміло, що цей доданок не може вплинути на асимптотичну

поведінку рішення. При достатньо великому nрізниця між T(n/ 2)

та T(n/ 2 17)

стає

несуттєвою: обидва ці числа приблизно рівні половині числа n. Відповідно, можна припустити, що T(n) = О(nlgn) і в цьому випадку, та за допомогою методу підстановки перевірити це припущення.

Інший спосіб знайти розв’язок – зробити грубу оцінку верхньої та нижньої межі, а потім зменшити невизначеність до мінімуму. Наприклад, в рекурентному співвідношенні (4.3) в якості початкової нижньої межі можна було б обрати T(n) = (n), оскільки в ньому присутній доданок n; можна також показати, що грубою верхньою межею буде T(n) = О(n2). Далі верхня межа поступово знижується, а нижня – піднімається доки не буде отримана правильна асимптотична поведінка рішення T(n) = О(nlgn).

Інколи за допомогою простих алгебраїчних перетворень можна звести рекурентне співвідношення до вже відомого випадку. Наприклад, наступне співвідношення:

T(n) 2T n lg n

виглядає досить складним. Проте його можна спростити, виконавши заміну змінних. Для

зручності ми не будемо турбуватись про округлення таких значень, як Використаємо заміну m= lgn:

, до цілих чисел.

T(2m) 2T2m/ 2 m.

Тепер можна перейменувати функцію співвідношення:

S(m) T(2m)

, після чого отримується нове

S(m) 2S(m/ 2) m,

яке схоже на (4.3). Це рекурентне співвідношення має такий самий розв’язок

S(m) = O(mlgm). Зробивши обернену заміну S(m) на T(n), отримуємо:

T(n) T(2m) S(m) O(mlg m) O(lg nlg lg n) .

    1.   1   2   3   4   5   6   7

      скачати

© Усі права захищені
написати до нас