Może się zdarzyć, że natrafisz na dziwną powtarzalność:
Jeśli jesteś podobny do mnie, zdasz sobie sprawę, że nie możesz użyć Twierdzenia Nadrzędnego i wtedy możesz pomyśleć: hmmm ... może analiza drzewa rekurencyjnego mogłaby zadziałać. " Wtedy zdasz sobie sprawę, że drzewo zaczyna naprawdę bardzo szybko rosnąć. Po kilku wyszukiwaniach w Internecie zobaczysz, że metoda Akra-Bazzi będzie działać! Wtedy faktycznie zaczynasz się temu przyglądać i zdajesz sobie sprawę, że tak naprawdę nie chcesz robić całej matematyki. Jeśli do tej pory byłeś taki jak ja, będziesz podekscytowany, wiedząc, że istnieje łatwiejszy sposób.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Twierdzenie o nierównym podziale Część 1
Niech i będą dodatnimi stałymi.ck
Niech więc będą dodatnimi stałymi, tak że .{a1,a2,…,ak}∑k1ai<1
Musimy także mieć powtarzalność formularza (jak w naszym przykładzie powyżej):
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}
Roszczenie
Następnie twierdzę, że gdzie jest stałą (np. Asymptotycznie liniową) i:T(n)≤bnb
b=c1−(∑k1ai)
Dowód indukcji
Podstawa :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Indukcja : Załóżmy, że prawda dla dowolnego , mamyn′<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□
Następnie mamy .T(n)≤bn⟹T(n)=O(n)
Przykład
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Najpierw weryfikujemy współczynniki wewnątrz sumy wywołań rekurencyjnych na mniej niż jeden:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Następnie sprawdzamy, czy przypadek podstawowy jest mniejszy niż maksimum odwrotności współczynników:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
Po spełnieniu tych warunków wiemy, że gdzie jest stałą równą:
Dlatego mamy:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
Twierdzenie o nierównym podziale Część 2
Podobnie możemy udowodnić, że kiedy . Dowód będzie zgodny z tym samym formatem:∑k1=1
Niech i będą dodatnimi stałymi takimi, że .ckk>1
Niech więc będą dodatnimi stałymi, tak że .{a1,a2,…,ak}∑k1ai=1
Musimy także mieć powtarzalność formularza (jak w naszym przykładzie powyżej):
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}
Roszczenie
Następnie twierdzę, że (wybieramy base ponieważ będzie czynnikiem rozgałęziającym drzewa rekurencji), gdzie i są stałymi (np. Asymptotycznie liniowo ) takie, że:T(n)≤αnlogkn+βnlogkkαβ
β=c
oraz
α=c∑k1ailogka−1i
Dowód indukcji
Podstawa :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Indukcja : Załóżmy, że prawda dla dowolnego , mamyn′<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□
Następnie mamy .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Przykład
Zmodyfikujmy poprzedni przykład, którego użyliśmy tylko trochę:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Najpierw weryfikujemy współczynniki wewnątrz rekurencyjnych wywołań do jednego:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Następnie sprawdzamy, czy przypadek podstawowy jest mniejszy niż maksimum odwrotności współczynników:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
Po spełnieniu tych warunków wiemy, że gdzie i jest stałą równą:
Dlatego mamy:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)