Я объяснял известный детерминистический алгоритм линейного выбора времени ( алгоритм медианы медиан) другу.
Рекурсия в этом алгоритме (хотя и очень проста) довольно сложна. Есть два рекурсивных вызова, каждый с разными параметрами.
Я пытался найти другие примеры таких интересных рекурсивных алгоритмов, но не смог найти ни одного. Все рекурсивные алгоритмы, которые я мог придумать, являются либо простыми хвостовыми рекурсиями, либо простыми «разделяй и властвуй» (где два вызова «одинаковы»).
Можете ли вы привести несколько примеров сложной рекурсии?
algorithms
recursion
elektronaj
источник
источник
Ответы:
Мое любимое повторение проявляется в чувствительных к выходу алгоритмах для вычисления выпуклых оболочек, сначала Киркпатрика и Зайделя , но позже повторенных другими. Обозначим через время вычисления выпуклой оболочки из n точек на плоскости, когда выпуклая оболочка имеет h вершин. (Значение h заранее неизвестно, кроме тривиальной границы h ≤ n .) Алгоритм Киркпатрика и Зайделя дает рекуррентность T ( n , h ) = { O ( n ), еслиT(n,h) n h h h≤n
гдеn1,n2≤3n/4иn1+n2=nиh1+h2=h.
Решение . Это немного удивительно, поскольку h не является параметром, делимым равномерно. Но на самом деле, наихудший случай рецидива случается, когда h 1 и h 2 равны h / 2 ; если каким-то волшебным образом h 1 всегда постоянен, решение будет T ( n , h ) = O ( n ) .T(n,h)=O(nlogh) h h1 h2 h/2 h1 T(n,h)=O(n)
Я использовал вариант этого повторения в одной из моих первых работ по вычислительной топологии : где
источник
Рекурсия, которую я использовал в своей статье «Алгоритм линейного времени для вычисления диаграммы Вороного выпуклого многоугольника» Аггарвала и др. , Также довольно сложна.
Вот описание алгоритма из нашей статьи. В случае, если из описания не ясно, на шаге 3 красные точки делятся на алые и гранатовые. Шаги 1, 3 и 6 - все линейное время. Мы также знаем, что если - общее количество точек, | Б | ≥ α n , | R | ≥ β n и | C | ≥ γ n для некоторого α , β , γ > 0 .n |B|≥αn |R|≥βn |C|≥γn α,β,γ>0
Я дам вам понять, почему весь алгоритм занимает линейное время.
источник
Существует изменение в повторении медианного нахождения, которое исходит от поиска дальности с полуплоскостями. Само повторение имеет форму
что похоже на повторение по медиане. Подробнее об этом, см наконспектах Джеффа Эриксонаив частности Раздела 4.
источник
Существует множество классных рекурсивных алгоритмов [1], [2], используемых при прогнозировании вторичной структуры РНК. Оставленный на свое усмотрение, нить РНК будет образовывать пары оснований с самим собой; один сравнительно простой пример из [3] вычисляет максимальное количество вложенных парных баз, с которыми будет образовываться строка РНК:
Оптимальное компьютерное свертывание больших последовательностей РНК с использованием термодинамики и вспомогательной информации М. Цукера, П. Штиглера (1981)
Алгоритм динамического программирования для прогнозирования структуры РНК, включающей псевдоузлы , Э. Ривас, С.Р. Эдди (1999)
Быстрый алгоритм для предсказания вторичной структуры одноцепочечной РНК Р. Нусинов, А. Б. Якобсон (1980)
источник
Я до сих пор не совсем понимаю, что вы имеете в виду под «сложной рекурсией». Например, шаг рекурсии в алгоритме FFT является сложным!
Но если вы хотите искать более сложную рекурсию, то взаимная рекурсия может быть одним из возможных ответов. Взаимная рекурсия полезна при работе с функциональными языками программирования . Взаимная рекурсия - ключевая особенность парсеров рекурсивного спуска .
источник
Вне головы, функция МакКарти 91
и функция Аккермана
может считаться необычной, хотя и игрушечной, рекурсивной функцией.
источник