Lösen einer Wiederholungsbeziehung mit √n als Parameter


18

Betrachten Sie die Wiederholung

T(n)=nT(n)+cn

für mit einer positiven Konstante und .c T ( 2 ) = 1n>2cT(2)=1

Ich kenne den Hauptsatz zum Lösen von Wiederholungen, bin mir aber nicht sicher, wie wir diese Beziehung damit lösen können. Wie nähern Sie sich dem Quadratwurzelparameter?


5
Der Hauptsatz ist hier nicht anwendbar; n kann nicht alsnb . Was hast du noch versucht?
Raphael

@Raphael: Ich habe die Substitutionsmethode ausprobiert, schien aber nicht zu wissen, welchen Wert ich für die Substitution wählen sollte.
Sucher

1
Wie wäre es mit "ein paar Mal die Wiederholung entfalten, ein Muster beobachten, die Lösung erraten und es beweisen "?
Raphael

Nun, dies ist eine erste Begegnung dieser Art. Vielleicht hilft mir eine Hilfe dabei, zukünftige Probleme der Natur mühelos zu lösen.
Sucher

Da Sie den Hauptsatz erwähnen, gehe ich davon aus, dass Sie diese Beziehung für asymptotische Grenzen lösen müssen und den Ausdruck der geschlossenen Form nicht wirklich benötigen. Im Folgenden finden Sie einige gute Lösungen, um den Ausdruck in geschlossener Form zu finden, die auch die asymptotische Komplexität angeben. Wenn Sie jedoch nur die asymptotische Komplexität benötigen, ist die Analyse einfacher. Werfen Sie einen Blick hier für eine gute Erklärung auf asymptotische Komplexität zu finden, mit einer schönen intuitiven Lösung für Ihr Problem Instanz.
Paresh

Antworten:


9

Wir werden Raphaels Vorschlag verwenden und die Wiederholung entfalten. Im Folgenden sind alle Logarithmen zur Basis 2. Wir erhalten

Dabei istβ(n),wie oft Sie die Quadratwurzel nehmen müssen, um mit n zu beginnen und 2 zu erreichen. Es zeigt sich, dassβ(n)=loglogn ist. Wie kannst du das sehen? Betrachten Sie: n

T(n)=n1/2T(n1/2)+cn=n3/4T(n1/4)+n1/2cn1/2+cn=n7/8T(n1/8)+n3/4cn1/4+2cn=n15/16T(n1/16)+n7/8cn1/8+3cn=n2T(2)+cnβ(n).
β(n)β(n)=LogLogn Häufigkeit, mit der Sie die Quadratwurzel ziehen müssen, um 2 zu erreichen, ist also die Lösung für1
n=2Lognn1/2=212Lognn1/4=214Logn
, wasloglogn ist. Die Lösung für die Rekursion lautet alsocnloglogn+112tLogn1LogLogn. Um dies absolut konsequent zu machen, sollten wir die Substitutionsmethode anwenden und sehr vorsichtig sein, wie die Dinge abgerundet werden. Wenn ich Zeit habe, werde ich versuchen, diese Berechnung zu meiner Antwort hinzuzufügen.cnLogLogn+12n

"Sie müssen das Quadratwurzel- mal nehmen" - ist das etwas, das ein Anfänger erwarten kann? Auch Ihr Ergebnis passt nicht zu Yuvals; soll es nur asymptotisch sein? LogLogn
Raphael

@Raphael: Yuval hat einen Fehler gemacht, den er jetzt korrigiert hat. Ich werde die Quadratwurzel in meiner Antwort erklären.
Peter Shor

3
Eine andere Idee, um zu sehen, dass die Rekursion annimmt, ist die folgende: Indem Sie die Quadratwurzel von n nehmen , halbieren Sie die für die binäre Darstellung von n erforderlichen Ziffern . Ihre Eingabe benötigt also w = log n Bits und Sie teilen die Wortgröße für jede Stufe der Rekursion durch 2. Sie stoppen daher nach log w = log log n Schritten. Ö(LogLogn)nnw=lognlogw=loglogn
A.Schulz,

10

In Ihrem Kommentar haben Sie erwähnt, dass Sie eine Substitution versucht haben, aber festgefahren sind. Hier ist eine Ableitung, die funktioniert. Die Motivation ist, dass wir das loswerden Multiplikator auf der rechten Seite, so dass wir etwas haben, das aussieht wieU(n)=U(n. In diesem Fall läuft es sehr gut:U(n)=U(n)+something

Lassen Sie uns die Dinge jetzt noch weiter vereinfachen, indem wir zu Protokollen wechseln (seitlg

T(n)=n T(n)+nso, dividing by n we getT(n)n=T(n)n+1and letting n=2m we haveT(2m)2m=T(2m/2)2m/2+1
). Sei S ( m )lgn=(1/2)lgn Aha! Dies ist eine bekannte Wiederholung mit Lösung S(m)=Θ(lgm) Rückkehr nachT(
S(m)=T(2m)2mso our original recurrence becomesS(m)=S(m/2)+1
S(m)=Θ(lgm)
haben wir dann mit n = 2 m (und damit m = lg n ) T ( n )T()n=2mm=lgn Also ist T ( n ) = Θ ( n
T(n)n=Θ(lglgn)
.T(n)=Θ(nlglgn)

6

Wenn Sie schreiben , haben Sie T ( m ) = mm=logn .T(m)=m2T(m2)+c2m 

O(logm)O(2m) O((logm)2m) O(nloglogn) n

nnab,a<b 

PS: Sicher sollte der Beweis weitere Details beinhalten, indem ich sie übersprungen habe.


2

n=22k:

T(n)=T(22k)=22k1T(22k1)+c22k=22k1+2k2T(22k2)+c(22k+22k)==22k1+2k2++20T(220)+c(22k+22k++22k)=22k1+ck22k=(cloglogn+1/2)n.

Edit: Thanks Peter Shor for the correction!


How did you come up with 22k? Note for OP: "" is not a proof, you'll have to provide that still (usually by induction).
Raphael

@Raphael: It's nearly a proof. You just need to show that it's also correct for numbers not of the form 22k.
Peter Shor

Actually, the recurrence is only well-defined for numbers of the form 22k, since otherwise, at some point n wouldn't be an integer, and you'll never reach the base case T(2).
Yuval Filmus

1
If this recurrence actually came from an algorithm, it would probably really be something more like T(n)=nT(n)+cn.
Peter Shor

1

Unravel the recurrence once as follows:

T(n)=n T(n)+n=n1/2(n1/4 T(n1/4)+n1/2)+n=n11/4 T(n1/4)+2n.

Continuing the unraveling for k steps, we have that:

T(n)=n11/2kT(n1/2k)+kn.

These steps will continue until the base case of n1/2k=2. Solving for k we have:

n1/2k=2logn=2kk=loglogn.

Substituting k=loglogn into the unraveled recurrence, we have

T(n)=n2T(2)+nloglogn.

2
Could you rewrite your picture to MathJax? We discourage images with text as the answers.
Evil

1
@PKG it seems like your edit is slightly different and also you explain steps, maybe you could answer on your own.
Evil
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.