Можливо, трапляються випадки, коли виникає такий дивний рецидив:
Якщо ти такий, як я, ти зрозумієш, що не можеш використовувати Теорему Магістра, і тоді ти можеш подумати, " хммм ... можливо, аналіз дерева рецидивів міг би спрацювати ". Тоді ти зрозумієш, що дерево починає швидко накопичуватися. Після деяких пошуків в Інтернеті ви побачите, що метод Акра-Бацци спрацює! Тоді ви насправді починаєте вивчати це і розумієте, що насправді не хочете займатися всією математикою. Якщо ви були подібними до мене до цього моменту, ви будете раді дізнатися, що існує простіший спосіб.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Теорема нерівномірного розщеплення, частина 1
Нехай і - позитивні константи.ck
Тоді нехай такі позитивні константи, що .{a1,a2,…,ak}∑k1ai<1
Ми також повинні мати повторення форми (як наш приклад вище):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Претензія
Тоді я стверджую, що де - константа (наприклад, лінійна асимптотика) і:T(n)≤bnb
b=c1−(∑k1ai)
Доведення індукцією
Основи :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Індукція : Припустимо, що істинно для будь-якого , ми маємо тодіn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+b⌊a1n⌋+b⌊a2n⌋+⋯+b⌊akn⌋≤cn+ba1n+ba2n+⋯+bakn=cn+bn∑1kai=cn−cn∑k1ai1−(∑k1ai)+cn∑k1ai1−(∑k1ai)=cn1−(∑k1ai)=bn□
Тоді маємо .T(n)≤bn⟹T(n)=O(n)
Приклад
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Спочатку перевіряємо коефіцієнти всередині рекурсивної суми викликів до меншої одиниці:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Далі перевіряємо, що базовий випадок менший, ніж макс зворотних коефіцієнтів:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
При виконанні цих умов ми знаємо, що де - константа, дорівнює:
Тому у нас є:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
Теорема нерівномірного розщеплення, частина 2
Аналогічно ми можемо довести межу для, коли . Доказ буде випливати з того самого формату:∑k1=1
Нехай і - позитивні константи такі, що .ckk>1
Тоді нехай такі позитивні константи, що .{a1,a2,…,ak}∑k1ai=1
Ми також повинні мати повторення форми (як наш приклад вище):
T(n)T(n)≤c≤cn+T(a1n)+T(a2n)+…T(akn)0<n<max{a−11,a−12,…,a−1k}n≥max{a−11,a−12,…,a−1k}
Претензія
Тоді я стверджую, що (ми вибираємо base оскільки буде коефіцієнтом розгалуження дерева рекурсії), де і є константами (наприклад, асимптотично лінійна ) такий, що:T(n)≤αnlogkn+βnlogkkαβ
β=c
і
α=c∑k1ailogka−1i
Доведення індукцією
Основи :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Індукція : Припустимо, що істинно для будь-якого , ми маємо тодіn′<n
T(n)≤cn+T(⌊a1n⌋)+T(⌊a2n⌋)+⋯+T(⌊akn⌋)≤cn+∑1k(αainlogkain+βain)=cn+αn∑1k(ailogkain)+βn∑1kai=cn+αn∑1k(ailogkna−1i)+βn=cn+αn∑1k(ai(logkn−logka−1i))+βn=cn+αn∑1kailogkn−αn∑1kailogka−1i+βn=αn∑1kailogkn+βn=αnlogkn+βn□
Тоді маємо .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Приклад
Давайте змінимо цей попередній приклад, ми використовували лише крихітний біт:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Спочатку перевіряємо коефіцієнти всередині рекурсивної суми викликів до однієї:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Далі перевіряємо, що базовий випадок менший, ніж макс зворотних коефіцієнтів:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
З урахуванням цих умов ми знаємо, що де і - константа, що дорівнює:
Тому у нас є:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)