Meine Lieblingswiederholung taucht in ausgangssensitiven Algorithmen zur Berechnung konvexer Hüllen auf, zuerst von Kirkpatrick und Seidel , aber später von anderen wiederholt. Es sei die Zeit zum Berechnen der konvexen Hülle von n Punkten in der Ebene, wenn die konvexe Hülle h Eckpunkte hat. (Der Wert von h ist im Voraus nicht bekannt, abgesehen von der trivialen Grenze h ≤ n .) Der Kirkpatrick- und Seidel-Algorithmus liefert die Wiederholung
T ( n , h ) = { O ( n ) if T( n , h )nhhh ≤ n
wobein1,n2≤3n/4undn1+n2=nundh1+h2=h.
T( n , h ) = { O ( n )T( n1, h1) + T( n2, h2) + O ( n )wenn n ≤ 3 oder h ≤ 3Andernfalls
n1, n2≤ 3 n / 4n1+ n2= nh1+ h2= h
Die Lösung ist . Dies ist ein wenig überraschend, da h nicht der Parameter ist, der gleichmäßig aufgeteilt wird. Tatsächlich tritt der schlimmste Fall der Wiederholung auf, wenn h 1 und h 2 beide ungefähr h / 2 sind ; wenn irgendwie magisch h 1 immer konstant ist, wäre die Lösung T ( n , h ) = O ( n ) .T( n , h ) = O ( n logh )hh1h2h / 2h1T( n , h ) = O ( n )
Ich habe eine Variante dieser Wiederholung in einer meiner ersten Arbeiten zur Computertopologie verwendet :
wo
T( n , g)={O(n)T(n1,g1)+T(n2,g2)+O(min{n1,n2})if n≤3 or g=0otherwise
und
g 1 + g 2 = g . Wieder ist die Lösung
O ( n log g ) , und der
schlimmsteFall tritt auf, wenn sowohl
n als auch
g immer gleichmäßig aufgeteilt werden.
n1+n2=ng1+g2=gO(nlogg)ng