Моя улюблена повторюваність виявляється у чутливих до виходу алгоритмах для обчислення опуклих корпусів, спочатку Кіркпатріком та Сейделем , але пізніше повтореними іншими. Нехай позначає час обчислення опуклого корпусу з n точок у площині, коли опуклий корпус має h вершин. (Значення h невідомо заздалегідь, окрім тривіального зв'язаного h ≤ n .) Алгоритм Кіркпатріка та Зейделя дає повторення
T ( n , h ) = { O ( n ), якщо T(n,h)nhhh≤n
деn1,n2≤3n/4іn1+n2=nіh1+h2=h
T(n,h)={O(n)T(n1,h1)+T(n2,h2)+O(n)if n≤3 or h≤3otherwise
n1,n2≤3n/4n1+n2=nh1+h2=h .
Рішення . Це трохи дивно, оскільки h - це не розділений параметр рівномірно. Але насправді найгірший випадок рецидиву трапляється, коли h 1 і h 2 обидва про h / 2 ; якщо якось магічно h 1 завжди постійний, рішення буде T ( n , h ) = O ( n ) .T(n,h)=O(nlogh)hh1h2h/2h1T(n,h)=O(n)
Я використовував варіант цього повторення в одній з моїх перших обчислювальних топологічних робіт :
T(n,g)={O(n)T(n1,g1)+T(n2,g2)+O(min{n1,n2})if n≤3 or g=0otherwise
де
і
g 1 + g 2 = g . Знову ж таки, рішення -
O ( n log g ) , і
найгіршийвипадок виникає, коли і
n, і
g завжди розподіляються рівномірно.
n1+n2=ng1+g2=gO(nlogg)ng