Moja ulubiona rekurencja pojawia się w algorytmach wrażliwych na wyniki obliczania wypukłych kadłubów, najpierw przez Kirkpatrick i Seidel , ale później powtórzone przez innych. Niech oznacza czas obliczenia wypukłego kadłuba n punktów na płaszczyźnie, gdy wypukły kadłub ma h wierzchołków. (Wartość h nie jest z góry znana, poza trywialnym związanym h ≤ n .) Algorytm Kirkpatricka i Seidela daje powtarzalność
T ( n , h ) = { O ( n ) jeśli T.( n , h )nhhh ≤ n
przypadku gdzien1,n2≤3n/4orazn1+n2=norazh1+h2=h.
T.( n , h ) = { O ( n )T.( n1, h1) + T( n2), h2)) + O ( n )if n≤3 or h≤3otherwise
n1, n2)≤ 3 n / 4n1+ n2)= nh1+ h2)= godz
Rozwiązaniem jest . Jest to trochę zaskakujące, ponieważ h nie jest równomiernym rozłożeniem parametru. Ale w rzeczywistości najgorszy przypadek ponownego wystąpienia ma miejsce, gdy h 1 i h 2 są około h / 2 ; jeśli w jakiś sposób magicznie h 1 jest zawsze stałe, rozwiązaniem byłoby T ( n , h ) = O ( n ) .T.( n , h ) = O ( n logh )hh1h2)h / 2h1T.( n , h ) = O ( n )
Użyłem wariantu tego nawrotu w jednym z moich pierwszych artykułów z topologii obliczeniowej :
przypadku gdzie
T.( n , g) = { O ( n )T.( n1, g1) + T( n2), g2)) + O ( min { n1, n2)} )jeśli n ≤ 3 lub g= 0Inaczej
i
g 1 + g 2 = gn1+ n2)= nsol1+ g2)= g . Ponownie, rozwiązanie to
i
najgorszy przypadek występuje wtedy, gdy
n i
g są zawsze wyrównany.
O ( n logsol)nsol