|
Diviser pour régner Complexité et récurrences |
|
| Introduction |
| Une idée fondamentale |
| Complexité et récurrences |
| Suites 2-rationnelles |
| Comportement asymptotique |
| Références |
Dans chacun des exemples que nous venons de rencontrer (cf. Une idée fondamentale) une notion naturelle de taille des données intervient. La taille d'une liste est sa longueur; la taille d'un polynôme est son degré; la taille d'un nuage de points est le nombre de ses points. D'autre part une notion de coût d'un algorithme apparaît tout aussi naturellement. Pour un algorithme de tri ce sera le nombre de comparaisons effectuées ou le nombre d'affectations; pour un algorithme de multiplication de matrices ou de polynômes ce sera le nombre de multiplications scalaires effectuées. Ce coût dépend de la donnée mais il est normal de le voir comme une simple fonction de la taille de celle-ci; cette réduction amène à distinguer le coût dans le cas le pire, le coût moyen et parfois le coût dans le cas le meilleur.
Récurrences diviser pour régner.
Revenons sur le tri-fusion; la donnée est une liste de taille n
et le coût est compté en nombre de comparaisons. Selon la
stratégie diviser pour régner le coût pour
une donnée de taille n est la somme du coût pour une
donnée de taille
et du coût pour une donnée
de taille
augmentée du coût de la fusion. Dans
le cas le pire la fusion demande n-1 comparaisons, comme on le voit
en considérant les deux listes triées
et
avec
. Le coût Tn du tri-fusion
sur une donnée de taille n dans le cas le pire satisfait donc la
récurrence
![]()
![]()
Les récurrences du type précédent en n et n/2 mérite le nom de récurrence diviser pour régner. Cependant avant d'aller plus loin il faut remarquer que les algorithmes diviser pour régner ne conduisent pas nécessairement à des récurrences diviser pour régner. Par exemple le coût moyen Cn du tri rapide sur une liste de taille n satisfait (cf. [25, p.120] ou [33, p. 129])
![]()
Séries génératrices. Pour formaliser les suites diviser pour régner il est plus agréable de considérer la série génératrice ordinaire
![]()
![]()
![]()
![]()
![]()
![]()
27=1+1+1+2+2+4+8+8
est une partition binaire de 27. La suite (bn) satisfait la récurrence![]()
![]()
![]()
![]()
On a ainsi défini une classe de séries qui satisfait les propriétés de clôture suivantes :
![]()
Une série f(z) est du type diviser pour régner si elle satisfait une équation avec second membre
![]()
Domaines d'application.
On rencontre les séries diviser pour régner dans différents
domaines. L'exemple des partitions binaires a montré qu'elles
interviennent en combinatoire. Dans la même orbite on peut signaler
des exemples de combinatoire des mots : la corrélation de deux
mots u et v est un mot sur l'alphabet
obtenu en faisant
glisser le second mot par rapport au premier et en notant la
coïncidence dans la partie commune; en particulier
l'autocorrélation d'un mot indique ses répétitions. Cette notion
intervient dans l'étude du nombre d'occurrence d'un motif dans un
texte ou au contraire dans l'étude des mots à motifs
interdits [23]. On peut montrer que la série
génératrice du nombre de mots d'autocorrélation donnée est
mahlérienne [22].
Ces séries interviennent aussi dans les problèmes liés à l'écriture binaire des entiers. Un exemple classique est la suite (Sn) qui donne le nombre de 1 dans les écritures binaires de entiers entre 1 et n [11].
Bien sûr la stratégie diviser pour régner fournit une pléiade d'exemples. Par exemple la multiplication de deux polynômes de degré n, telle que nous l'avons signalée plus haut, utilise trois multiplications de polynômes de degrés moitié et en gros 3n additions de coefficients. Comme le coût est croissant avec n, une suite qui majore le coût de la multiplication de deux polynômes de degré n est la suite (Pn) défine par [26, p. 278]
![]()
![]()
| Page précédente : | Une idée fondamentale |
| Page suivante : | Suites 2-rationnelles |