Analyser un algorithme, c'est presque toujours ramener son coût à l'une d'une petite dizaine de sommes, puis comparer le résultat à une échelle de croissances. Cette annexe rassemble ces sommes, ces échelles et les trois ou quatre techniques de preuve qui les accompagnent — la récurrence, l'invariant de boucle, la linéarité de l'espérance, le déroulage d'une récurrence. Rien ici n'est propre à l'algorithmique: tout se trouve dans un cours de mathématiques discrètes ou d'analyse. Ce qui est propre à ce cours, c'est la sélection: on n'a gardé que ce que les onze chapitres utilisent effectivement, et chaque énoncé est accompagné de l'endroit où il sert.
Une annexe se consulte, elle ne se lit pas d'un bout à l'autre. Les démonstrations sont données quand elles sont courtes et instructives — celle de la somme arithmétique tient en une figure, celle de la linéarité de l'espérance en trois lignes — et explicitement admises, avec la raison, quand elles relèvent franchement d'un autre cours: la formule de Stirling et la constante d'Euler-Mascheroni demandent de l'analyse, pas de l'algorithmique.
Objectifs
Cette annexe vous permet de:
- retrouver et démontrer les sommes usuelles — arithmétique, géométrique, — plutôt que de les recopier;
- manipuler les nombres harmoniques et savoir que , la quantité qui apparaît dans le tri rapide et dans les tables de hachage;
- utiliser les logarithmes sans faute: changement de base, , et l'identité qui gouverne le théorème maître;
Sommes usuelles
La somme arithmétique
Démonstration. Écrivons la somme deux fois, une fois dans l'ordre croissant et une fois dans l'ordre décroissant, et additionnons terme à terme:
Chacune des colonnes ainsi formées vaut , donc .
La figure A.1 est la même démonstration, dessinée: l'escalier des colonnes et son complément remplissent exactement un rectangle de colonnes sur lignes.
La conséquence asymptotique est celle que l'on utilise sans arrêt: . C'est elle qui donne le pire des cas du tri par insertion et du tri par sélection au chapitre 3, et le coût des insertions dans un arbre binaire de recherche dégénéré au chapitre 5.
Démonstration. La méthode vaut pour toutes les sommes de puissances, alors autant l'apprendre ici. Partons de l'identité et sommons-la pour de 1 à . À gauche, la somme : tous les termes intermédiaires s'annulent et il reste . À droite, on reconnaît trois sommes:
On isole la somme cherchée, on développe et on factorise; il vient (A.2).
Plus généralement, pour tout entier : la majoration est immédiate, et la minoration s'obtient en ne gardant que la seconde moitié des termes, chacun au moins , ce qui donne . C'est exactement l'argument de coupe en deux qui sert au chapitre 1 pour .
La somme géométrique
Démonstration. Posons . Alors , et la différence télescope:
Comme , on divise par et on obtient (A.3). Lorsque , le terme tend vers 0, et la limite vaut .
Le cas est celui de tous les arbres binaires de ce cours:
Un arbre binaire de hauteur a donc au plus nœuds, borne atteinte par l'arbre parfait — c'est la majoration du chapitre 5. C'est aussi (A.4) qui donne le coût amorti du tableau dynamique au chapitre 4: insertions provoquent des recopies de tailles jusqu'à , dont le total est inférieur à — donc un coût amorti constant par insertion, alors que l'insertion la plus chère coûte . Retenez aussi que est «un de moins que le terme suivant»: la somme de tous les niveaux d'un arbre parfait est presque égale à son seul dernier niveau, ce qui explique pourquoi une opération payée par feuille domine une opération payée par nœud interne.
Les sommes du type somme de k fois x puissance k
C'est la somme qui apparaît dès qu'un coût croît linéairement avec un niveau dont la population décroît géométriquement — la situation exacte de la construction d'un tas au chapitre 5 et de l'analyse en moyenne d'une liste auto-organisée au chapitre 1.
Démonstration. Notons . En décalant l'indice,
Soustrayons cette égalité de la précédente. Tous les termes d'indice compris entre 2 et se combinent en ; restent le terme de et le terme retranché:
la somme géométrique ayant été évaluée par (A.3). En multipliant par 2 on obtient (A.5), et le terme tend vers 0. La version générale s'obtient par le même calcul avec au lieu de , ou en dérivant terme à terme .
Deux valeurs utiles du cas général: et . Plus la raison approche 1, plus la somme explose — mais elle reste finie tant que la raison est strictement inférieure à 1, et c'est tout ce dont une analyse a besoin.
Le tri rapide randomisé sur éléments distincts fait en moyenne comparaisons, où est le -ième nombre harmonique. Combien de comparaisons cela fait-il en moyenne pour ? Donnez le résultat à un dixième près.
Les nombres harmoniques
Démonstration. La fonction est décroissante sur . Sur l'intervalle elle reste donc sous la valeur constante , d'où
En sommant pour de 1 à , l'intégrale se recolle en , ce qui donne la minoration. Pour la majoration, la même comparaison dans l'autre sens: sur la fonction reste de , donc pour . En sommant de 2 à et en ajoutant le premier terme resté à part, il vient .
L'encadrement (A.6) suffit pour toutes les analyses de ce cours, puisqu'il donne la classe . Quand la constante compte — et elle compte pour comparer deux tris —, on dispose d'un résultat bien plus précis, que nous admettons parce qu'il relève de l'analyse et non de l'algorithmique:
La constante est dite d'Euler-Mascheroni; on ignore encore si elle est rationnelle. Le contrôle numérique de (A.7) est frappant: la quantité vaut pour , pour et pour — elle converge bien vers , exactement comme le terme l'annonce.
| 1 | 7 | 10 | 100 | 1 000 | 1 000 000 | |
|---|---|---|---|---|---|---|
| 1 | 2,5929 | 2,9290 | 5,1874 | 7,4855 | 14,3927 | |
| 0,5772 | 2,5231 | 2,8798 | 5,1824 | 7,4850 | 14,3927 |
Où ils apparaissent. Trois fois dans ce cours, et jamais par hasard — un signale une somme , donc un événement dont la probabilité décroît comme l'inverse du rang.
- Tri par insertion en moyenne (chapitre 1): le nombre moyen de comparaisons vaut , le terme venant des passes où l'élément remonte jusqu'à l'indice 0, événement de probabilité .
Logarithmes
Convention du cours: signifie ; est le logarithme naturel; s'écrit avec sa base quand la base compte.
Les règles de calcul se ramènent à trois: , , et . La troisième est celle qui sert le plus, parce qu'elle transforme une exponentielle en droite — c'est elle qui rend lisibles les figures à échelle logarithmique du chapitre 1.
Démonstration. Pour (A.8), posons , c'est-à-dire . En prenant le logarithme en base des deux membres: , d'où le quotient annoncé. Pour (A.9), prenons le logarithme en base de chaque membre. À gauche: . À droite: . Les deux expressions sont le même produit de deux réels; comme est injective sur les réels strictement positifs, les deux membres sont égaux.
La relation (A.8) dit que deux logarithmes de bases différentes ne diffèrent que d'un facteur constant: et . Dans une classe , un facteur constant disparaît, donc : , et c'est pourquoi ce cours écrit sans jamais préciser la base.
Le logarithme de la factorielle. Le chapitre 1 démontre que , avec les constantes explicites et . La formule de Stirling (section suivante) raffine cet encadrement en une égalité:
avec . Pour , le membre de droite vaut et la valeur exacte : quatre décimales correctes. Le terme n'est pas négligeable — il vaut —, ce qui explique que le rapport ne vaille que pour et converge très lentement vers 1.
Parmi ces quatre affirmations, laquelle est FAUSSE?
La récurrence et les invariants de boucle
Le principe de récurrence
Un algorithme «diviser pour régner» qui traite deux moitiés s'analyse par récurrence forte, jamais par récurrence simple: dépend de et de , pas de . Le chapitre 3 en fait un usage typique pour majorer le nombre de comparaisons du tri fusion, et le chapitre 5 pour minorer le nombre de nœuds d'un arbre AVL de hauteur par — cette dernière récurrence a besoin de cas de base, parce que son hérédité s'appuie sur et .
L'invariant de boucle
Ce que la récurrence est à une fonction récursive, l'invariant l'est à une boucle. C'est l'outil de correction standard de ce cours: le chapitre 2 l'emploie pour la recherche dichotomique, le chapitre 3 pour le tri par insertion et pour la fusion, le chapitre 7 pour Dijkstra et le chapitre 8 pour Kruskal.
La terminaison se démontre presque toujours par un variant: une quantité entière, positive ou nulle, qui décroît strictement à chaque tour. Une telle quantité ne peut décroître indéfiniment, donc la boucle s'arrête. Pour la recherche dichotomique, le variant est la largeur de l'intervalle de recherche; pour le tri par insertion, c'est l'indice j de la boucle interne.
Dénombrement
Deux valeurs à connaître par cœur: , le nombre de paires d'un ensemble à éléments — celui des paires en inversion d'une permutation au chapitre 1, celui des paires en collision d'une table de hachage au chapitre 4 —, et .
La formule de Pascal se démontre sans calcul: on fixe un élément, on sépare les parties qui le contiennent de celles qui ne le contiennent pas. C'est le même raisonnement «avec ou sans cet objet» qui structure la table du sac à dos au chapitre 10.
Démonstration. Développons le produit de facteurs sans rien regrouper: chaque terme du développement s'obtient en choisissant ou dans chacun des facteurs. Un terme contenant exactement fois vaut , et le nombre de façons de choisir les facteurs qui fournissent le est par définition. En regroupant les termes semblables on obtient (A.11). Le cas particulier est : le membre de gauche vaut , et le membre de droite compte toutes les parties d'un ensemble à éléments.
Nous admettons ce résultat: sa démonstration relève de l'analyse (formule d'Euler-Maclaurin ou intégrale de Wallis) et n'apporte rien à l'algorithmique. Ce qui compte ici est sa précision, que l'on peut vérifier:
| 5 | 10 | 20 | 50 | 100 | |
|---|---|---|---|---|---|
| rapport Stirling / | 0,98349 | 0,99170 | 0,99584 | 0,99833 | 0,99917 |
| borne | 0,01667 | 0,00833 | 0,00417 | 0,00167 | 0,00083 |
L'erreur relative est bien inférieure à pour chaque valeur, et déjà de un pour mille à . En algorithmique on utilise Stirling pour trois choses: obtenir (A.10), estimer le coefficient binomial central — qui compte les chemins monotones d'une grille et donc, au chapitre 10, les chemins de reconstruction d'une table de programmation dynamique —, et se convaincre que croît strictement plus vite que toute exponentielle.
Probabilité et espérance sur un espace fini
Tout ce dont ce cours a besoin tient sur un espace fini: on tire une permutation au hasard, on choisit un pivot au hasard, on suppose qu'une clé tombe uniformément dans l'une de cases. Aucune théorie de la mesure n'est requise.
Les variables indicatrices
Cette égalité d'apparence triviale est l'outil le plus rentable de tout le cours. La recette est toujours la même: la quantité à estimer est un compte (des inversions, des clés dans un paquet, des comparaisons); on l'écrit comme une somme d'indicatrices, une par objet compté; et on remplace chaque espérance par une probabilité, que la symétrie donne souvent immédiatement.
Démonstration. Il suffit de le vérifier pour deux variables et un scalaire, le cas général s'en déduisant par récurrence sur . Par la définition (A.13),
et la somme finie se sépare en deux:
De même . Le passage de deux à est une récurrence simple sur , le cas de base étant l'homogénéité qu'on vient d'établir.
La démonstration tient en trois lignes parce qu'elle ne fait que réorganiser une somme finie — et c'est exactement pour cela qu'elle ne demande aucune indépendance. Le contraste avec l'espérance d'un produit est instructif: est faux en général et n'est vrai que sous indépendance. La linéarité, elle, est gratuite.
L'espérance conditionnelle, en un paragraphe
Si forment une partition de en événements de probabilité non nulle, l'espérance de sachant est , et la loi de l'espérance totale s'écrit : elle se lit directement sur la définition (A.13) en découpant la somme selon la partition. C'est le raisonnement «on conditionne sur le rang du pivot» du tri rapide — les sont les choix possibles de pivot, chacun de probabilité — et celui de toutes les récurrences en moyenne du cours: .
Vous voulez calculer le nombre moyen de paires en collision dans une table de hachage. Vous écrivez ce nombre comme une somme d'indicatrices, une par paire de clés. Ces indicatrices ne sont pas indépendantes: si les clés 1 et 2 entrent en collision et que les clés 2 et 3 aussi, alors 1 et 3 entrent forcément en collision. Que pouvez-vous en conclure?
Résoudre une récurrence
Le chapitre 2 donne le théorème maître, qui traite d'un coup toutes les récurrences de la forme . Cette section rassemble les trois méthodes générales dont le théorème maître n'est qu'un raccourci — et qui restent seules disponibles dès qu'il ne s'applique pas.
Le déroulage
On remplace par sa définition, encore et encore, jusqu'à voir apparaître le motif, puis on somme.
L'arbre de récursion
C'est le déroulage, dessiné. On place à la racine le coût payé hors appels récursifs, on lui donne enfants portant chacun , et ainsi de suite jusqu'aux feuilles. Le coût total est la somme de tous les nœuds, qu'on organise par niveau: le niveau porte nœuds de coût chacun. Le nombre de niveaux est et le nombre de feuilles — l'identité (A.9), qui est ainsi la raison d'être de l'exposant critique du théorème maître.
Trois régimes sont alors possibles, et ce sont exactement les trois cas du théorème: la suite des coûts par niveau est géométrique décroissante et la racine domine; elle est géométrique croissante et les feuilles dominent; elle est constante et les niveaux se valent, d'où le facteur logarithmique supplémentaire. La règle de l'encadré sur les sommes géométriques suffit à trancher.
La substitution, vérifiée par récurrence
On devine la réponse — souvent par déroulage ou par analogie — puis on la démontre par récurrence. La méthode est la seule qui donne une preuve complète avec des constantes explicites.
Exemple. Montrons que avec vérifie pour toute puissance de deux. Cas de base: . Hérédité: en supposant l'inégalité acquise pour ,
L'inégalité est même une égalité ici, ce que la vérification numérique confirme jusqu'à .
Le changement de variable
Quand la récurrence porte sur , ou quand n'apparaît que par son logarithme, on pose et on travaille sur .
Comparaison asymptotique
La question pratique est toujours la même: entre deux coûts, lequel finit par dominer? La hiérarchie ci-dessous répond pour toutes les fonctions rencontrées dans ce cours. On y lit, de gauche à droite, de la plus lente à la plus rapide, avec , et quelconques:
où signifie , c'est-à-dire .
Démonstration. Polynôme contre logarithme. Posons , donc , et travaillons en logarithme naturel, ce qui ne change qu'une constante multiplicative élevée à la puissance . Le quotient s'écrit . Or l'exponentielle domine toute puissance: pour tout entier , la série de contient le terme , donc pour . En prenant et , on obtient puisque .
Exponentielle contre polynôme. Prenons le logarithme du quotient: . Comme et que par ce qui précède, cette expression tend vers , donc le quotient tend vers 0.
Factorielle contre exponentielle. Le quotient vérifie . Dès que , ce rapport est au plus : à partir de ce rang , la suite est majorée par une suite géométrique de raison , donc tend vers 0.
La quatrième séparation, , se lit sur Stirling: le quotient vaut à un facteur près, qui tend vers 0.
Le tableau suivant donne les valeurs des classes usuelles pour quatre tailles, toutes calculées:
Deux lectures. D'abord, reste minuscule: pour un million d'éléments il vaut 20, et c'est pourquoi une recherche dichotomique ou une opération sur un arbre équilibré est «pratiquement gratuite». Ensuite, l'écart entre et passe de 4 à 52 429 sur ces quatre lignes: c'est l'écart entre un tri utilisable et un tri qui ne l'est pas, et il ne cesse de croître.
Synthèse
- Les quatre sommes à savoir retrouver sont , , et , d'où ; une somme géométrique de raison différente de 1 vaut, à une constante près, son plus grand terme.
Exercices
Vous pouvez afficher le corrigé directement sous chaque énoncé après avoir cherché la solution.
Montrez que , d'abord en vous ramenant à la somme arithmétique (A.1), puis par récurrence sur . Donnez ensuite une interprétation géométrique de l'identité.
- Montrez que pour tout , et concluez que la série converge. Pourquoi cette somme est-elle bornée alors que diverge?
Le schéma de Horner évalue en multiplications au lieu de .
On tire uniformément une permutation de et on la parcourt de gauche à droite. Un élément est un record s'il est strictement plus grand que tous ceux qui le précèdent (le premier élément en est toujours un). Calculez le nombre moyen de records. Quelle quantité algorithmique ce nombre mesure-t-il?
Solution
Le calcul. Posons si le -ième élément lu est un record, 0 sinon, pour . Le nombre de records est .
Résolvez, en donnant à chaque fois la classe et la méthode employée. On suppose et sauf mention contraire.
- .
Références
- Cormen, Leiserson, Rivest & Stein, Introduction to Algorithms, 4ᵉ éd., MIT Press — annexe A pour les sommes usuelles et leurs bornes, annexe C pour le dénombrement et la probabilité discrète, chapitre 4 pour les méthodes de résolution de récurrences.
- Cormen, Leiserson, Rivest & Stein, Algorithmique, 3ᵉ éd., Dunod — la traduction française des mêmes annexes, utile pour la terminologie.
- Graham, Knuth & Patashnik, Concrete Mathematics, 2ᵉ éd., Addison-Wesley — la référence pour les sommes, les nombres harmoniques et les techniques de manipulation; les chapitres 2 et 6 couvrent tout ce qui précède, et bien au-delà.
- Kleinberg & Tardos, Algorithm Design, Pearson — chapitre 13 pour les variables indicatrices et la linéarité de l'espérance appliquées aux algorithmes randomisés.
- Mitzenmacher & Upfal, Probability and Computing, 2ᵉ éd., Cambridge University Press — pour la probabilité discrète orientée algorithmes, au-delà de ce que cette annexe rappelle.