Twój archetypiczny jest algorytmem „ dziel i rządź” , który dzieli (i rekombinuje) pracę w czasie liniowym i powraca nad kawałkami. Sortowanie z sortowaniem działa w ten sposób: poświęć czas O ( n ) na podzielenie danych wejściowych na dwa mniej więcej równe kawałki, rekurencyjnie posortuj każdy kawałek i poświęć Θ ( n ) czas na połączenie dwóch posortowanych połówek.Θ ( n logn )O ( n )Θ ( n )
Intuicyjnie, kontynuując ideę dziel i zwyciężaj, każdy etap podziału zajmuje w sumie czas liniowy, ponieważ wzrost liczby kawałków do podziału dokładnie odpowiada zmniejszeniu wielkości kawałków, ponieważ czas dzielenia jest liniowy. Całkowity czas pracy jest iloczynem całkowitego kosztu etapu podziału pomnożonego przez liczbę etapów podziału. Ponieważ wielkość kawałków jest za każdym razem zmniejszana o połowę, istnieją etapy podziału , więc całkowity czas pracy wynosi n ⋅ log ( n ) . (Do stałej multiplikatywnej podstawa logarytmu nie ma znaczenia).log2)( n )n ⋅ log( n )
Umieszczając go w równaniach (), jednym ze sposobów oszacowania czasu działania takiego algorytmu jest wyrażenie go rekurencyjnie: T ( n ) = 2 T ( n / 2 ) + Θ ( n ) . Oczywiste jest, że ten algorytm zajmuje więcej niż czas liniowy i możemy zobaczyć, o ile więcej, dzieląc przez n :
T ( n )T.( n )T.( n ) = 2 T.( n / 2 ) + Θ ( n )n
Gdynpodwaja się,T(n)/nwzrasta o stałą wartość:T(n)/nwzrasta logarytmicznie, lub innymi słowy,T(n)=Θ(nlogn).
T.( n )n= T( n / 2 )n / 2+ Θ ( 1 )
nT.( n ) / nT.( n ) / nT.( n ) = Θ ( n logn )
Jest to przykład bardziej ogólnego wzorca: twierdzenie główne . Dla każdego algorytm rekursywnego że dzieli dane wejściowe wielkości w a kawałki o rozmiarach n / b i ma czasową f ( n ) w celu wykonania podział i rekombinacji spełnia bieżącego czasu , T ( n ) = a ⋅ T ( n / b ) + f ( n ) . Prowadzi to do zamkniętej formy, która zależy od wartości i B oraz kształtunzan / bfa( n )T.( n ) = a ⋅ T( n / b ) + f( n )zab . Jeśli = b i f ( n ) = Θ ( n ) , stany Master twierdzenie, że T ( n ) = Θ ( n log n ) .faa = bf(n)=Θ(n)T(n)=Θ(nlogn)