Rozwiązywanie relacji rekurencji z √n jako parametrem


18

Rozważ powtórzenie

T(n)=nT(n)+cn

dla z pewną stałą dodatnią , a .c T ( 2 ) = 1n>2cT(2)=1

Znam twierdzenie Master dotyczące rozwiązywania nawrotów, ale nie jestem pewien, w jaki sposób moglibyśmy rozwiązać tę relację za pomocą tego. Jak podchodzisz do parametru pierwiastka kwadratowego?


5
Twierdzenie Master nie ma tutaj zastosowania; n nie może być zapisane jakonb . Co jeszcze próbowałeś?
Raphael

@Raphael: Próbowałem metody substytucji, ale wydawało mi się, że utknąłem na wartości, którą powinienem zastąpić.
poszukujący

1
A może „rozłóż kilkakrotnie nawrót, obserwuj wzór, zgadnij rozwiązanie i udowodnij ”?
Raphael

Cóż, to pierwsze tego typu spotkanie, może jakaś pomoc pomoże mi z łatwością rozwiązać przyszłe problemy natury.
osoba poszukująca

Ponieważ wspomniałeś Twierdzenie o Mistrzu, zakładam, że musisz rozwiązać tę relację dla granic asymptotycznych i tak naprawdę nie potrzebujesz wyrażenia formy zamkniętej. Biorąc pod uwagę poniżej, istnieje kilka dobrych rozwiązań dla znalezienia wyrażenia formy zamkniętej, które nadają również asymptotyczną złożoność. Jeśli jednak potrzebujesz tylko asymptotycznej złożoności, analiza jest prostsza. Zajrzyj tutaj, aby znaleźć dobre wyjaśnienie dotyczące znajdowania asymptotycznych złożoności, z przyjemnym intuicyjnym rozwiązaniem dla Twojego problemu.
Paresh,

Odpowiedzi:


9

Skorzystamy z sugestii Rafaela i rozwiążemy powtórkę. Poniżej wszystkie logarytmy są podstawą 2. Otrzymujemy

gdzieβ(n)to ile razy musisz wziąć pierwiastek kwadratowy, aby zacząć od n, i osiągnąć 2. Okazuje się, żeβ(n)=loglogn. Jak to widzisz? Zastanów się: 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 Więc ile razy musisz wziąć pierwiastek kwadratowy, aby osiągnąć 2, to rozwiązanie1
n=2lognn1/2=212lognn1/4=214logn
, czyliloglogn. Tak więc rozwiązaniem rekurencji jestcnloglogn+112tlogn1loglogn. Aby uczynić to absolutnie rygorystycznym, powinniśmy zastosować metodę substytucji i bardzo uważać na to, jak się to zaokrągli. Kiedy będę miał czas, spróbuję dodać te obliczenia do mojej odpowiedzi.cnloglogn+12n

„Trzeba wziąć pierwiastek kwadratowy razy” - to można oczekiwać, że początkujący, aby zobaczyć, że coś? Ponadto twój wynik nie pasuje do wyników Yuvala; czy ma to być wyłącznie asymptotycznie? loglogn
Raphael

@Raphael: Yuval popełnił błąd, który teraz poprawił. Wyjaśnię pierwiastek kwadratowy w mojej odpowiedzi.
Peter Shor

3
Kolejny pomysł, aby zobaczyć, że rekurencja zajmuje jest następujący: Biorąc pierwiastek kwadratowy z n , zmniejszasz o połowę cyfry potrzebne do binarnej reprezentacji n . Więc twoje wejście potrzebuje w = log n bitów i dzielisz rozmiar słowa przez 2 dla każdego poziomu rekurencji. Dlatego zatrzymujesz się po log w = log log n kroków. O(loglogn)nnw=lognlogw=loglogn
A.Schulz

10

W swoim komentarzu wspomniałeś, że próbowałeś zastąpienia, ale utknąłem. Oto pochodna, która działa. Motywacją jest to, że chcielibyśmy się pozbyć mnożnik po prawej stronie, pozostawiając nam coś, co wygląda jakU(n)=U(n. W tym przypadku wszystko działa bardzo ładnie:U(n)=U(n)+something

Teraz uprośćmy jeszcze bardziej, przechodząc do logów (odlg

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
). Niech S ( m )lgn=(1/2)lgn Aha! Jest to dobrze znany nawrót z rozwiązaniem S(m)=Θ(lgm) Powrót doT(
S(m)=T(2m)2mso our original recurrence becomesS(m)=S(m/2)+1
S(m)=Θ(lgm)
, mamy wtedy, gdy n = 2 m (a więc m = lg n ), T ( n )T()n=2mm=lgn
T(n)n=Θ(lglgn)
T(n)=Θ(nlglgn)

6

m=logn T(m)=m2T(m2)+c2m 

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

W sumie, kiedy widzisz n lub nzab,za<b , dobrze jest sprawdzić logarytm.

PS: Pewny dowód powinien zawierać więcej szczegółów, pominąłem je.


2

Postępujmy zgodnie z sugestią Rafaela 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.