Rozwiązywanie relacji cykliczności za pomocą dwóch wywołań rekurencyjnych


10

Studiuję najgorszy czas wykonywania Quicksort pod warunkiem, że nigdy nie zrobi bardzo niezrównoważonej partycji dla różnych definicji bardzo .

Aby to zrobić, zadaję sobie pytanie, jaki byłby czas działania w przypadku, gdy Quicksort zawsze zdarza się podzielić na ułamek taki, że Elementy znajdują się w lewej przegrodzie, a znajdują się w prawej przegrodzie (pozostawiając element, oś obrotu, pośrodku).T(n,p)0<p12p(n1)(1p)(n1)1

Nie powinno być trudno zauważyć, że daje górną granicę w najgorszym przypadku, gdy jest maksymalnie niezrównoważoną dozwoloną partycją, ponieważ każda partycja z ułamkiem będzie bardziej zrównoważona i będzie miała krótszy czas działania, oraz jakakolwiek frakcja jest niedozwolona.T(n,p)p>p<p

Oczywiste jest, że jest najlepszym przypadkiem, a jest najgorszym przypadkiem szybkiego sortowania. Oba mają łatwe relacje nawrotów, które można znaleźć w dowolnym zasobie edukacyjnym. Ale nie mam pojęcia, jak badać w ogóle. Oczywista relacja wyglądałaby następująco:T(n,12)T(n,0)T(n,p)

T(n,p)=n+T(p(n1),p)+T((1p)(n1),p)

Utknąłem. Próbowałem szukać, ale cała literatura, którą mogłem zrozumieć na temat algorytmów dzielenia i zdobywania, zawierała „podział” dosłownie i „oszukiwała” analizę, wykorzystując fakt, że partycje są zawsze równej wielkości, łącząc terminy w jeden raz stały.

Nie wiem, jak poradzić sobie z dwoma połączeniami rekurencyjnymi i nie wiem, czy usunięcie zaokrąglenia jest bezpieczne. Czy można to rozwiązać analitycznie, a jeśli tak, to w jaki sposób?

PS: Nie interesują mnie asymptotyki (które można łatwo pokazać dla dowolnej stałej ). Interesuje mnie, o ile wolniejsze jest szybkie sortowanie, gdy maleje, na przykład interesuje mnie stosunek .Θ(nlogn)ppT(n,0.25)T(n,0.5)

PPS: Jako student studiów przepraszam, że uczyniłem oczywiste rzeczy zbyt długimi lub niewyjaśnionymi nietrywialnościami. I choć nie wiem, czy jest to tak bardzo zaniedbywane, jak inne witryny SE, zauważę, że jest to osobisty interes, a nie praca domowa.

Odpowiedzi:


9

Jak wspomniałeś, twierdzenie Akra – Bazzi pokazuje, że rozwiązaniem rekurencji jest dla wszystkich . Nie ujawnia to jednak charakteru zależności od . Aby ustalić to drugie, możemy zastosować podejście drzewa rekurencyjnego.T(n,p)O(nlogn)p(0,1)p

W katalogu głównym drzewa rekurencji jest interwał . Jego dwoje potomków to przedziały i , których łączna długość wynosi ponownie . Każdy z tych węzłów ma dwoje dzieci (zakładając, że jest wystarczająco duży) i tak dalej. Dla uproszczenia ignorujemy błędy zaokrąglania, tzn. Zakładamy, że jest liczbą całkowitą; to tylko technika i nie martwiłbym się tym. Zatrzymujemy proces za każdym razem, gdy węzeł ma długość co najwyżej . Złożoność algorytmu jest proporcjonalna do całkowitej długości interwałów w drzewie. Kiedy , liście{1,n}{1,,pn}{pn+1,,n}nnpn1p1/2 (węzły, na których zatrzymujemy proces) mają różną głębokość, co utrudnia określenie ogólnej złożoności.

Możemy uzyskać prostą górną granicę, zauważając, że drzewo ma co najwyżej poziomy: każdy węzeł jest co najmniej mniejszy niż jego rodzic. Podobnie jak w analizie dla , całkowita długość przedziałów na dowolnym poziomie wynosi co najwyżej , i otrzymujemy górną granicę na czas trwania. Ponieważ i dla małego , możemy to zapisać jako .log1p(1/n)1pp=1/2nO(nlog1p(1/n))log1p(1/n)=logn/log(1p)1log(1p)1=log(1p)=p±O(p2)pO(nlogn/p)

Oto dokładniejsze obliczenia. Rozważ poziom . Załóżmy, że nie zatrzymamy procesu po osiągnięciu krótkiego odstępu czasu. Możemy wygenerować losowy wierzchołek, wykonując kroków, w każdym z których idziemy w lewo (powiedzmy) z prawdopodobieństwem i w prawo (powiedzmy) z prawdopodobieństwem . Za każdym razem, gdy wykonujemy lewy krok, dziennik długości interwału zmniejsza się o , a za każdym razem, gdy robimy prawy krok, zmniejsza się o . Wierzchołek znajduje się w rzeczywistym drzewie dziennika o długości zmniejszonej maksymalnie o . Łączna waga interwałów na poziomiettp1plogplog(1p)logntdrzewa jest dokładnie prawdopodobieństwem, że wierzchołek wygenerowany zgodnie z tym procesem odpowiada co najwyżej zmniejszeniu . Oznacza to, że jeśli jest rozkładem równym z prawdopodobieństwem oraz z prawdopodobieństwem , a są niezależne, to całkowita waga poziomu wynosi . Dla superstałej zmienna losowa jest z grubsza normalnie rozkładana ze średnią wariancją liniowąlognDlogpplog(1p)1pX1,,XtDtPr[X1++Xtlogn]tX1++Xt[plogp(1p)log(1p)]tt, więc dla spełniającego , powiedzmy, prawdopodobieństwo będzie bardzo bliskie , podczas gdy dla spełnianie , powiedzmy, będzie bardzo bliskie zeru. Definiując (znany jako binarna funkcja entropii), dochodzimy do wniosku, że czas działania to (jednolite w , jak ). Jako mamy , więc nasze wcześniejsze oszacowanie nie było ścisłe.t[plogp(1p)log(1p)]t(logn)/21t[plogp(1p)log(1p)]t2lognh(p)=plogp(1p)log(1p)Θ(nlogn/h(p))pnp0h(p)plogp

Innym sposobem spojrzenia na tę samą analizę jest posiadanie nieskończonej sekwencji niezależnych zmiennych losowych jak poprzednio i zdefiniowanie czasu zatrzymania jako pierwszego tak aby . Czas działania jest wówczas proporcjonalny do . Twierdzenie o elementarnym odnowieniu stwierdza następnie, że , co oznacza, że całkowity rozmiar przedziałów wynosi . Dokładniej, dla każdej stałej całkowity rozmiar przedziałów wynosi , gdzieX1,X2,TtX1++XtlognnE[T]limnE[T]/logn=1/E[D]=1/h(p)(1+o(1))nlogn/h(p)p(1+αp(n))nlogn/h(p)αp(n)=o(n) . Konwergencja w elementarnym twierdzeniu o odnowieniu jest wykładnicza w parametrze czasu - w naszym przypadku - więc powinna być wielomianowa w , to znaczy . Prawdopodobnie zbieżność jest również jednolita dla dla dowolnego .lognnαp(n)=O(nCp)p(δ,1δ)δ>0


Podsumowując, całkowita długość przedziałów w drzewie rekurencyjnym, która jest proporcjonalna do czasu działania, ma następującą postać dla każdego : gdzie i są przenoszone do tej samej bazy, a jest funkcją zależną od i zmierzającą do pomocą .p

T(n,p)=(1+o(1))nlognh(p),
lognh(p)=plogp(1p)log(1p)o(1)p0n

Co więcej, prawdopodobnie prawdą jest, że dla dowolnego i dowolnego prawdą jest, że całkowita długość przedziałów ma postać gdzie i ukryta duża stała O zależą tylko od . W szczególności powinno być tak, że dla wszystkich stałych , a konwergencja jest wielomianowo szybka.δ>0p(δ,1δ)

T(n,p)=(1+O(nCδ))nlognh(p),
Cδ>0δp1,p2
limnT(n,p1)T(n,p2)=h(p2)h(p1),

Dziękuję za szybką odpowiedź Yuval. Jestem trochę zdezorientowany faktem, że użyłeś w swoim podsumowaniu. jest stałą i czy to nie znaczy, że nie ma znaczenia w ? Postanowiłem napisać mały program testowy , który pokazał, że dla porównanie między metodą analityczną a obliczeniową dało błąd 0,03. To wydaje się dość duże, czy można się tego spodziewać? Θh(p)Θn=100000000000000T(n,0.1)/T(n,0.5)
lub

Stała w jest jednolita w . Dokładniej, dla niektórych stałych jest przypadek, że dla każdego istnieje tak że dla , . Prawdopodobnie można uzyskać jeszcze silniejsze wyrażenie w postaci dla każdego stałego , gdzie małe o jest w odniesieniu do ( ale może zależeć od ); nie powinno zależeć od . Θpc,CpNpnNpcnlogn/h(p)T(n,p)Cnlogn/h(p)T(n,p)=(1+o(1))Cnlogn/h(p)pnpCp
Yuval Filmus

Konwergencja do limitu zależy od , więc może być konieczne aby był duży, aby uzyskać naprawdę dobre przybliżenie. Z drugiej strony błąd względny 0,03 nie wydaje się tak duży. Możesz spróbować naprawić i wykreślić czas działania jako funkcję , porównując go do . lognlognnp1/h(p)
Yuval Filmus

Och przepraszam, nie miałem na myśli błędu względnego 0,03, ale absolutnego (2.13222 vs. 2.10339). Wykreślenie w funkcji , w stosunku do dało względną różnicę 4%, przy czym stanowi 96% . T(n,p)p1/h(p)T(1011,0.05)h(0.05)T(1011,0.4)h(0.4)
orlp

1
Superstała jest funkcją zmierzającą do nieskończoności w odniesieniu do odpowiedniej zmiennej (w tym przypadku ). Jest taki sam jak . nω(1)
Yuval Filmus
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.