Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Trois étapes (diviser, régner, combiner) illustrées avec l'algorithme du tri fusion
En informatique, diviser pour régner (du latin « Divide ut imperes », divide and conquer en anglais) est
une technique algorithmique consistant à :
Cette technique fournit des algorithmes efficaces pour de nombreux problèmes, comme la recherche d'un
élément dans un tableau trié (recherche dichotomique), le tri (tri fusion, tri rapide), la multiplication de
grands nombres (algorithme de Karatsuba) ou la transformation de Fourier discrète (transformation de
Fourier rapide).
Sommaire
Exemples
Exemples détaillés
Autres exemples
Histoire
Intérêts
Complexité
Parallélisme
Circuits
Limites
Récursivité
Sous-problèmes redondants
Notes et références
Notes
Références
Voir aussi
Articles connexes
Liens externes
Exemples
Exemples détaillés
La table suivante donne des exemples d'algorithmes en donnant les trois étapes (diviser, régner, combiner).
Histoire
La recherche dichotomique est formalisée dans un article de John Mauchly en 1946, mais l'idée d'utiliser
1
une liste triée pour faciliter la recherche remonte à Babylone en -220 . L'algorithme d'Euclide pour calculer
le plus grand commun diviseur de deux nombres peut être vu comme un algorithme diviser pour régner (les
deux nombres diminuent et on se ramène à un problème plus petit). Gauss décrit la transformée de Fourier
2
rapide en 1805 sans en faire l'analyse de complexité. La transformée de Fourier rapide est redécouverte
un siècle plus tard.
3
John von Neumann invente le tri fusion en 1945 . L'algorithme de Karatsuba est inventé par Anatolii A.
4
Karatsuba en 1960 : il multiplie deux nombres de n chiffres en opérations (voir notations de
Landau). Cet algorithme contredit la conjecture d’Andreï Kolmogorov de 1956 qui stipule que
opérations sont nécessaires. Knuth donne une méthode utilisée par les services postaux : les lettres sont
1
triées et séparés en fonction des zones géographiques, puis en sous-zones géographies, etc. Ce tri est le tri
1
radix, décrit pour les machines IBM à cartes (Trieur de cartes IBM (en)) dès 1929 .
Intérêts
Complexité
N1
La faible complexité des algorithmes diviser pour régner est l'un de leurs principaux intérêts . Il existe
plusieurs théorèmes facilitant le calcul des complexités des algorithmes de type diviser pour régner. Le
principal théorème est le Master theorem. Pour des cas plus complexes on peut citer le théorème d'Akra-
Bazzi. La table suivante compare la complexité d'un algorithme naïf et de l'algorithme diviser pour régner
pour quelques problèmes (voir Notations de Landau) :
Circuits
Il existe des circuits pour des entrées de taille fixées pour la transformation de Fourier rapide. Il existe
également des réseaux de tris pour le tri fusion, appelé le tri bitonique.
Limites
Récursivité
Les algorithmes diviser pour régner se prêtent naturellement à une écriture récursive. Mais parfois,
l'exécution d'algorithmes récursifs peut conduire à un dépassement de pile. On préfère donc parfois un
algorithme itératif.
Sous-problèmes redondants
Lorsque l'on applique « diviser pour régner », il n'y a pas de redondance : chaque sous-problème n’est
résolu qu'une seule fois lors des appels récursifs. Par contre, lorsque les sous-problèmes sont redondants,
l'algorithme récursif obtenu à partir de « diviser pour régner » peut avoir une mauvaise complexité. Prenons
l'exemple du calcul du nème terme de la suite de Fibonacci. L'algorithme suivant est en temps exponentiel
en n :
fonction fibonacci(n)
si(n = 0 ou n = 1)
renvoyer 1
sinon
renvoyer fibonacci(n-1) + fibonacci(n-2)
Pour pallier cette limite, on peut mémoriser les valeurs déjà calculées afin d'éviter de résoudre les sous-
problèmes déjà rencontrés. Il s'agit de la mémoïsation (aussi utilisée en programmation dynamique).
Notes et références
Notes
1. L'utilisation du paradigme diviser pour régner n'est pas une garantie absolue d'optimalité :
des algorithmes comme le tri faire-valoir sont plus mauvais que des algorithmes naïfs bien
qu'ils utilisent ce paradigme.
Références
1. (en) Donald E. Knuth, The Art of Computer Programming, vol. 3 : Sorting and Searching,
1998, 2e éd. [détail de l’édition].
2. (en) M. T. Heideman, D. H. Johnson et C. S. Burrus, « Gauss and the history of the fast
Fourier transform », IEEE ASSP Magazine, vol. 1, no 4, 1984, p. 14-21.
ou e t a s o , SS aga e, o , , 98 , p
3. Knuth 1998, p. 159.
4. (ru) Anatolii A. Karatsuba et Yuri P. Ofman, « Умножение многозначных чисел на
автоматах », Doklady Akademii Nauk SSSR, vol. 146, 1962, p. 293–294 (lire en ligne (http
s://www.researchgate.net/publication/248199959_Umnozenie_mnogoznacnyh_cisel_na_avt
omatah_Multiplying_multi-digit_numbers_on_the_machines)) traduit en anglais dans (en)
« Multiplication of Multidigit Numbers on Automata », Physics-Doklady, vol. 7, 1963, p. 595–
596 (présentation en ligne (https://books.google.com/books?id=MrkOAAAAIAAJ)).
Voir aussi
Articles connexes
Arbre de produits
Programmation dynamique
Liens externes
« Évaluation de la complexité pour le tri rapide » (http://imss-www.upmf-grenoble.fr/prevert/
Prog/Tris/triRapideEval.html)
(en) Diviser pour régner : tri, exponentiation, nombres de Fibonacci, multiplication
matricielle, algorithme de Strassen… (http://ocw.mit.edu/courses/electrical-engineering-an
d-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/le
cture-3-divide-and-conquer-strassen-fibonacci-polynomial-multiplication/) : vidéo d'une
leçon dans le cadre d'un cours d'introduction à l'algorithmique au MIT.
Droit d'auteur : les textes sont disponibles sous licence Creative Commons attribution, partage dans les mêmes
conditions ; d’autres conditions peuvent s’appliquer. Voyez les conditions d’utilisation pour plus de détails, ainsi que
les crédits graphiques. En cas de réutilisation des textes de cette page, voyez comment citer les auteurs et
mentionner la licence.
Wikipedia® est une marque déposée de la Wikimedia Foundation, Inc., organisation de bienfaisance régie par le
paragraphe 501(c)(3) du code fiscal des États-Unis.
Politique de confidentialité
À propos de Wikipédia
Avertissements
Contact
Développeurs
Statistiques
Déclaration sur les témoins (cookies)