Es kann vorkommen, dass Sie auf eine seltsame Wiederholung wie diese stoßen:
Wenn Sie wie ich sind, werden Sie feststellen, dass Sie den Hauptsatz nicht anwenden können und dann denken Sie vielleicht: " hmmm ... vielleicht könnte eine wiederkehrende Baumanalyse funktionieren. " Dann merkt man, dass der Baum sehr schnell brutto wird. Nach einigem Suchen im Internet sehen Sie, dass die Akra-Bazzi-Methode funktioniert! Dann fängst du tatsächlich an, dich damit zu befassen und realisierst, dass du nicht wirklich die ganze Mathematik machen willst. Wenn Sie bis jetzt so wie ich waren, werden Sie gespannt sein, dass es einen einfacheren Weg gibt.T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
The Uneven Split Theorem Teil 1
Sei und positive Konstanten.ck
Dann sei eine positive Konstante, so dass .{a1,a2,…,ak}∑k1ai<1
Wir müssen auch eine Wiederholung der Form haben (wie in unserem obigen Beispiel):
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}
Anspruch
Dann behaupte ich wobei eine Konstante ist (zB asymptotisch linear) und:T(n)≤bnb
b=c1−(∑k1ai)
Beweis durch Induktion
Basis :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c<b<bn
Induktion : Nehmen Sie an, dass für jedes , das wir haben, wahr istn′<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□
Dann haben wir .T(n)≤bn⟹T(n)=O(n)
Beispiel
T(n)={c2T(n5)+4T(n7)+cnn<7n≥7
Wir überprüfen zuerst die Koeffizienten in der Summe der rekursiven Aufrufe auf weniger als eins:
1>∑1kai=15+15+17+17+17+17=25+47=3435
Als nächstes verifizieren wir, dass der Basisfall kleiner als das Maximum der Inversen der Koeffizienten ist:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7}=7
Wenn diese Bedingungen erfüllt sind, kennen wir wobei eine Konstante ist, die gleich:
Deshalb haben wir:
T(n)≤bnbb=c1−(∑k1ai)=c1−3435=35c
T(n)∧T(n)∴T(n)≤35cn≥cn=Θ(n)
The Uneven Split Theorem Teil 2
Ebenso können wir eine Schranke beweisen, wenn . Der Proof folgt weitgehend demselben Format:∑k1=1
Lassen und seine positive Konstanten , so dass .ckk>1
Dann sei eine positive Konstante mit .{a1,a2,…,ak}∑k1ai=1
Wir müssen auch eine Wiederholung der Form haben (wie in unserem obigen Beispiel):
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}
Anspruch
Dann behaupte ich (wir wählen base weil der Verzweigungsfaktor des Rekursionsbaums ist), wobei und Konstanten sind (z. B. asymptotisch linearithmisch) ) so dass:T(n)≤αnlogkn+βnlogkkαβ
β=c
und
α=c∑k1ailogka−1i
Beweis durch Induktion
Basis :n<max{a−11,a−12,…,a−1k}⟹T(n)≤c=β<αnlogkn+βn
Induktion : Nehmen Sie an, dass für jedes , das wir haben, wahr istn′<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□
Dann haben wir .T(n)≤αnlogkn+βn⟹T(n)=O(nlogn)
Beispiel
Lassen Sie uns das vorherige Beispiel ändern, das wir nur für ein winziges Bit verwendet haben:
T(n)={c2T(n5)+4T(n7)+T(n35)+cnn<35n≥35
Wir überprüfen zunächst die Koeffizienten innerhalb der rekursiven Aufrufe auf eins:
1=∑1kai=15+15+17+17+17+17+135=25+47+135=3535
Als nächstes verifizieren wir, dass der Basisfall kleiner als das Maximum der Inversen der Koeffizienten ist:
n<max{a−11,a−12,…,a−1k}=max{5,5,7,7,7,7,35}=35
Wenn diese Bedingungen erfüllt sind, wissen wir, dass wobei und eine Konstante ist, die gleich:
Deshalb haben wir:
T(n)≤αnlogn+βnβ=cαb=c∑k1ailogka−1i=c2log755+4log777+log73535≈1.048c
T(n)∴T(n)≤1.048cnlog7n+cn=O(nlogn)