J'expliquais à un ami le célèbre algorithme de sélection déterministe du temps linéaire ( algorithme de la médiane des médianes).
La récursivité dans cet algorithme (tout en étant très simple) est assez sophistiquée. Il existe deux appels récursifs, chacun avec des paramètres différents.
J'essayais de trouver d'autres exemples d'algorithmes récursifs aussi intéressants, mais je n'en ai trouvé aucun. Tous les algorithmes récursifs que je pourrais proposer sont soit de simples récursions de queue, soit de simples divisions et conquêtes (où les deux appels sont "les mêmes").
Pouvez-vous donner quelques exemples de récursivité sophistiquée?
algorithms
recursion
elektronaj
la source
la source
Réponses:
Ma récurrence préférée apparaît dans les algorithmes sensibles à la sortie pour le calcul des coques convexes, d'abord par Kirkpatrick et Seidel , mais répétés plus tard par d'autres. Soit n ≤ 3 ou h ≤ 3 T ( n 1 , h 1 ) + T ( n 2 , h 2 ) + O ( n ) sinon où n 1 ,T( n , h ) le temps de calculer la coque convexe de points dans le plan, lorsque la coque convexe a h sommets. (La valeur de h n'est pas connue à l'avance, à part la borne triviale h ≤ n .) L'algorithme de Kirkpatrick et Seidel donne la récurrence
T ( n , h ) = { O ( n ) si n h h h ≤ n
la source
La récursion que j'ai utilisée dans mon article "Un algorithme à temps linéaire pour calculer le diagramme de Voronoï d'un polygone convexe" par Aggarwal et al est également assez compliquée.
Je vous laisse comprendre pourquoi tout l'algorithme prend du temps linéaire.
la source
Il y a une variation sur la récurrence médiane de la découverte qui provient de la recherche de distance avec des demi-plans. La récurrence elle-même est de la forme
la source
Il existe un tas d'algorithmes récursifs sympas [1], [2] utilisés dans la prédiction de la structure secondaire de l'ARN. Laissé à lui-même, un brin d'ARN formera des paires de bases avec lui-même; un exemple relativement simple de [3] calcule le nombre maximum de bases appariées imbriquées qu'une chaîne d'ARN formera avec elle-même:
Pliage informatique optimal de grandes séquences d'ARN en utilisant la thermodynamique et les informations auxiliaires par M. Zuker, P. Stiegler (1981)
Un algorithme de programmation dynamique pour la prédiction de la structure de l'ARN incluant les pseudoknots par E. Rivas, SR Eddy (1999)
Algorithme rapide pour prédire la structure secondaire de l'ARN simple brin par R. Nussinov, AB Jacobson (1980)
la source
Je ne comprends toujours pas vraiment ce que vous entendez par "récursion sophistiquée". Par exemple, l'étape de récursivité dans l'algorithme FFT est sophistiquée!
Mais si vous souhaitez rechercher une récursivité plus compliquée , la récurrence mutuelle pourrait être une réponse possible. La récursion mutuelle est utile lorsque vous travaillez avec des langages de programmation fonctionnels . La récursion mutuelle est la caractéristique clé des analyseurs de descente récursifs .
la source
Du haut de ma tête, la fonction McCarthy 91
et la fonction Ackermann
pourraient compter comme des fonctions récursives décalées, bien que trop amusantes.
la source