Ce cours ne demande presque aucun prérequis mathématique, mais il s'appuie sans cesse sur une petite boîte à outils: les puissances de deux, le logarithme en base 2, deux ou trois sommes, le dénombrement élémentaire, l'arithmétique modulaire et un minimum de probabilités. Les chapitres renvoient ici plutôt que de les redémontrer à chaque fois. Cette annexe est une fiche de référence travaillée: chaque notion y est définie, la plupart sont démontrées, et chaque section se termine par des exemples entièrement calculés. Tous les nombres imprimés ci-dessous ont été recalculés en Python avec des entiers exacts.
Lisez-la une fois en entier avant le chapitre 2, puis revenez-y ponctuellement: le chapitre 3 a besoin de , le chapitre 6 de l'espérance, le chapitre 9 de l'inverse modulaire.
Puissances de deux et changement de base
Les puissances de deux à connaître
Un bit vaut 0 ou 1; bits forment donc configurations distinctes. Toute question du type «combien de valeurs puis-je coder?» revient à lire la ligne correspondante de ce tableau.
| Ordre de grandeur | Ce que cela code | ||
|---|---|---|---|
| 1 | 2 | — | un bit |
| 4 | 16 | — | un chiffre hexadécimal |
| 8 | 256 | — | un octet |
| 10 | 1 024 | un kibioctet | |
| 16 | 65 536 |
Trois repères suffisent à reconstruire tout le reste: , («quatre milliards», la taille de l'espace IPv4), («dix-huit milliards de milliards»). Une quatrième vaut d'être citée pour la cryptographie: , soit à peu près le nombre d'atomes de l'univers observable, de l'ordre de .
Le réflexe «mille pour », et son erreur
Comme , on approche volontiers par . L'approximation est excellente une fois, mais elle se compose: chaque tranche de dix bits multiplie l'écart par .
| Puissance | Valeur exacte | Approximation | Excès |
|---|---|---|---|
| 1 024 | |||
| 1 048 576 |
Formellement, . C'est exactement l'écart entre les préfixes binaires et décimaux du chapitre 1 (Kio contre ko, Gio contre Go): la confusion des deux familles produit une erreur de 2,4 % au kilo et de 7,4 % au giga, pas une erreur constante.
Numération positionnelle
Deux conséquences immédiates et constamment utilisées.
Le nombre de chiffres. Pour , le nombre de chiffres en base vaut ; le nombre de bits d'un entier est donc , ce qui s'écrit aussi . Réciproquement, coder valeurs distinctes demande bits.
Le passage d'une base à l'autre. De la base 10 vers la base , on divise répétitivement par et l'on lit les restes de bas en haut. Vers la base 10, on évalue le polynôme, de préférence par la méthode de Horner. Entre 2 et 16, aucun calcul n'est nécessaire: , donc un chiffre hexadécimal vaut exactement quatre bits, et l'on convertit en regroupant les bits par paquets de quatre depuis la droite.
Combien de bits faut-il au minimum pour coder chacun des 33 000 caractères d'un répertoire donné par un mot de longueur fixe?
Logarithmes
Définition et identités
Le cours emploie presque partout — parce que l'unité d'information est le bit et que les algorithmes divisent par deux — et pour les calculs continus. Conformément à la notation du cours, la base est toujours écrite — , jamais — avec : à l'intérieur d'une classe de complexité on l'omet, et l'on écrit ou . Le théorème A.1 ci-dessous dit pourquoi: changer de base ne fait que multiplier par une constante, et une classe de complexité ne voit pas les constantes. Partout où vous comptez des bits ou des comparaisons réelles, la base se réécrit.
De découlent les trois identités dont on se sert sans arrêt:
La première est la propriété caractéristique: c'est elle qui fait apparaître le logarithme au chapitre 6, où l'on exige que l'information de deux événements indépendants soit la somme de leurs informations. La troisième est celle qui sert le plus en complexité: elle transforme un produit de facteurs en une somme de termes, et c'est ainsi que devient calculable.
Démonstration. Posons , de sorte que . En prenant le logarithme en base des deux membres et en utilisant , il vient , d'où le résultat puisque .
Changer de base ne fait donc que multiplier par une constante. C'est pour cette raison que la notation asymptotique ne précise pas la base: , et sont tous . En revanche, dès qu'on compte des bits ou des comparaisons, la constante compte et la base doit être écrite.
«Diviser par deux jusqu'à un»
L'intuition à retenir est la suivante: est le nombre de fois où l'on peut diviser par deux avant d'atteindre 1. C'est la lecture algorithmique du logarithme, et elle explique d'un coup la recherche dichotomique, le tri fusion et la hauteur d'un arbre binaire équilibré.
| Suite des divisions entières par 2 | Nombre de divisions | ||
|---|---|---|---|
| 8 | 8, 4, 2, 1 | 3 | 3 |
| 100 | 100, 50, 25, 12, 6, 3, 1 | 6 | 6,64 |
| 1 000 | 1 000, 500, 250, 125, 62, 31, 15, 7, 3, 1 | 9 | 9,97 |
| — | 19 | 19,93 | |
| — | 29 | 29,90 |
Le nombre de divisions entières menant de à 1 vaut exactement . Attention à ne pas le confondre avec le nombre de comparaisons d'une recherche dichotomique, qui vaut dans le pire cas — 20 pour un million, et non 19. La différence d'une unité entre plancher et plafond n'est pas une coquetterie: elle décide si un tableau de éléments demande 20 ou 21 comparaisons.
La figure porte une leçon qu'aucun tableau ne fait voir. Sur des axes logarithmiques, et deviennent des droites de pentes 1 et 2, parce que ce sont des lois de puissance. Le logarithme, lui, s'aplatit jusqu'à devenir presque horizontal: trois décades d'entrée ne le font passer que de 1 à 10. Quant à , c'est la seule des quatre courbes qui plie — précisément parce que ce n'est pas une loi de puissance. Elle suit à un facteur près, soit un facteur 10 seulement à , alors que l'écart qui l'y sépare de atteint déjà un facteur 100.
Un algorithme traite une entrée de taille en divisant à chaque étape la taille par deux. Combien d'étapes environ, et pourquoi?
Sommes usuelles
La somme des premiers entiers
Démonstration. Écrivons la somme deux fois, la seconde à l'envers, et additionnons colonne par colonne:
D'où .
Le chapitre 2 utilise la variante : c'est le nombre de comparaisons du tri par sélection, et aussi le nombre de paires d'un ensemble de éléments — d'où les clefs symétriques de mille personnes au chapitre 9. Retenez que cette somme est quadratique: doubler quadruple le travail.
La somme géométrique
Démonstration. Posons . Alors , et la différence télescope: tous les termes de à s'annulent et il reste , soit . Comme , on divise. Pour la somme infinie, lorsque , et le quotient tend vers .
Le cas est celui qui revient partout:
Autrement dit, la somme de toutes les puissances de deux inférieures à vaut : elle est dominée par son dernier terme, qu'elle dépasse à peine. C'est ce qui rend un arbre binaire complet de hauteur porteur de nœuds, dont plus de la moitié sont des feuilles, et c'est aussi la raison pour laquelle le tri fusion du chapitre 3 fait un travail dominé par son niveau le plus bas.
La somme harmonique
Elle n'a pas de forme close, mais sa croissance est connue: , où est la constante d'Euler–Mascheroni. En particulier : , donc très lentement, mais elle diverge. Elle apparaît dans le coût moyen de plusieurs algorithmes — notamment le tri rapide et la recherche du maximum — et dans le problème du collectionneur de vignettes.
Un tableau contient éléments et l'on compare chaque paire d'éléments exactement une fois. Combien de comparaisons cela fait-il?
Dénombrement
Le principe multiplicatif
C'est le seul principe dont le cours ait vraiment besoin; tout le reste en découle. Un mot de symboles sur un alphabet de lettres: possibilités. Un mot de bits: . Un code PIN à quatre chiffres: .
Arrangements, permutations, combinaisons
On tire éléments parmi distincts. Quatre cas, dont trois servent ici.
| Situation | Formule | Exemple avec , |
|---|---|---|
| Avec remise, ordre compte | ||
| Sans remise, ordre compte (arrangement) |
Le coefficient binomial , lu « parmi », compte les parties à éléments d'un ensemble à éléments. Il vérifie , la relation de Pascal , et surtout
puisque les parties à éléments, réunies pour tous les , forment toutes les parties d'un ensemble à éléments — et qu'il y en a , une par mot de bits. Le chapitre 8 s'en sert pour compter les mots à distance donnée d'un mot de code.
Démonstration. Développer revient à choisir, dans chacun des facteurs, soit soit , puis à sommer tous les produits obtenus. Un produit vaut exactement lorsqu'on a choisi dans facteurs, ce qui peut se faire de façons.
Le choix redonne ; le choix , donne pour .
La factorielle et la formule de Stirling
La factorielle croît plus vite que toute exponentielle: et . La formule de Stirling en donne la taille.
Ce résultat est admis: sa démonstration demande l'analyse asymptotique d'une intégrale, hors du programme de première année. Il est cité ici parce que la borne inférieure du tri par comparaisons du chapitre 3 en dépend: tout tri par comparaisons effectue au moins comparaisons dans le pire cas, et Stirling montre que cette borne vaut à un terme linéaire près. Le tri fusion, en , est donc optimal pour l'ordre de grandeur.
Combien de mots binaires de longueur 10 comportent exactement quatre bits à 1?
Notation asymptotique: fiche de référence
Ces trois notations sont définies et discutées au chapitre 2, avec leurs pièges; cette section n'en est que le rappel compact. Soient .
| Notation | Définition | Lecture |
|---|---|---|
Les deux quantificateurs existentiels sont toute la subtilité: autorise à ignorer les facteurs constants, à ignorer les petites tailles. Une affirmation en ne dit donc rien du temps d'exécution sur une entrée donnée. Le théorème 2.3 ajoute deux caractérisations commodes: équivaut à « et », et il suffit que tende vers une limite avec pour conclure .
Hiérarchie de croissance. Chaque terme est négligeable devant le suivant:
Règles de calcul. Si et , alors
et les mêmes règles valent pour et . S'y ajoutent la transitivité ( et donnent ), l'absorption des constantes ( pour fixé), l'indifférence à la base du logarithme (), et la règle des polynômes: un polynôme de degré à coefficient dominant positif est .
Parmi ces affirmations, lesquelles sont vraies?
Plusieurs réponses possibles
Arithmétique modulaire
Congruences
La congruence modulo est une relation d'équivalence, et elle est compatible avec l'addition et la multiplication: si et modulo , alors
C'est la propriété décisive pour le calcul: on peut réduire modulo après chaque opération sans changer le résultat final. Calculer ne demande donc jamais de manipuler un nombre supérieur à , alors que compte 31 chiffres décimaux.
Diviseur commun et algorithme d'Euclide
Le plus grand commun diviseur se calcule sans factoriser, par l'algorithme d'Euclide: on remplace par jusqu'à ce que le second terme soit nul; le premier est alors le pgcd. Il termine parce que le second terme décroît strictement, et le nombre de divisions est .
L'algorithme d'Euclide étendu produit en plus les coefficients de Bézout, c'est-à-dire deux entiers tels que
Démonstration. Si , Bézout fournit avec ; en réduisant modulo le terme disparaît et il reste . Réciproquement, si , il existe tel que , donc ; tout diviseur commun de et divise alors 1, donc . Unicité: si , alors .
Exponentiation rapide
Pour calculer , on écrit en binaire et l'on parcourt ses bits du plus fort au plus faible: à chaque bit on élève au carré, et l'on multiplie en plus par lorsque le bit vaut 1, en réduisant modulo après chaque produit. Le nombre de multiplications modulaires est au plus , contre pour la méthode naïve: c'est la différence entre impossible et instantané dès que a quelques centaines de bits.
Fermat et Euler
Les démonstrations sont au chapitre 9, qui en a besoin pour établir la correction de RSA. Deux valeurs de suffisent ici: si est premier, et si sont premiers. Ainsi .
L'usage pratique de ces théorèmes est la réduction de l'exposant: puisque , on peut remplacer l'exposant par . Par exemple : comme 11 est premier, et , donc — deux lignes au lieu de 221 multiplications. Vérifié en Python.
Remettez dans l'ordre les étapes du calcul de l'inverse de modulo .
Glissez les éléments pour les mettre dans le bon ordre
- Dérouler l'algorithme d'Euclide sur le couple en notant chaque division
- Remonter les égalités pour écrire
- Réduire modulo : il reste
- Constater que le dernier reste non nul vaut , donc que
- Ramener entre et en lui ajoutant un multiple de
Probabilités élémentaires
Les chapitres 6 et 8 n'ont besoin que du strict minimum, rappelé ici. Pour la théorie — variables continues, lois usuelles, convergence, estimation — reportez-vous au cours de Probabilités et statistique, qui en fait un développement complet; les notations et sont les siennes.
Deux propriétés servent constamment. La linéarité, et , vaut toujours, même si et ne sont pas indépendantes — c'est ce qui rend tant de calculs de coût moyen faciles. Et l'entropie du chapitre 6 n'est rien d'autre qu'une espérance: , l'espérance de la quantité d'information.
L'indépendance est une hypothèse de modèle, pas une propriété que l'on constate: le canal binaire symétrique du chapitre 8 suppose que les erreurs frappent chaque bit indépendamment, et le chapitre dit explicitement que ce modèle ne décrit pas une rayure de disque, qui produit une rafale d'erreurs voisines.
Sur un canal binaire symétrique de probabilité d'erreur , quelle est la probabilité qu'un mot de 8 bits arrive sans aucune erreur? Donnez le résultat avec quatre décimales.
Exercices
Vous pouvez afficher le corrigé directement sous chaque énoncé après avoir cherché la solution.
- Écrire en base 2 puis en base 16, et vérifier le résultat.
- Combien de bits faut-il pour coder un entier compris entre 0 et ?
- Un identifiant sur 64 bits est-il suffisant pour numéroter tous les grains de sable de la Terre, dont le nombre est estimé par les ordres de grandeur usuels entre et ?
- Calculer et .
- Combien y a-t-il de mots de 12 bits contenant exactement six 1? Quelle fraction de tous les mots de 12 bits cela représente-t-il?
- Une plaque d'immatriculation est formée de deux lettres parmi 26 suivies de quatre chiffres. Combien de plaques distinctes, et combien de bits faudrait-il pour numéroter les plaques?
- Combien de comparaisons au minimum faut-il, dans le pire cas, pour trier 12 éléments par comparaisons?
Solution
1. . Le nombre total de mots de 12 bits est , donc la fraction vaut , soit . C'est le poids le plus fréquent, et pourtant il ne concerne qu'un mot sur quatre et demi: la distribution binomiale est étalée.
- L'entier 14 admet-il un inverse modulo 21? Et modulo 25? Justifier, et calculer l'inverse lorsqu'il existe.
- Calculer de deux façons: par le petit théorème de Fermat, puis par carrés successifs.
- Quel est le dernier chiffre décimal de ?
Solution
1. , donc : aucun multiple de 14 ne peut valoir 1 modulo 21, puisque 7 divise à la fois 14 et 21. En revanche . Euclide étendu: , , , . On remonte:
Références
- R. L. Graham, D. E. Knuth et O. Patashnik, Concrete Mathematics: A Foundation for Computer Science, 2e éd., Addison-Wesley. La référence sur les sommes, les coefficients binomiaux et les approximations asymptotiques; les chapitres 2, 5 et 9 recouvrent exactement cette annexe.
- T. H. Cormen, C. E. Leiserson, R. L. Rivest et C. Stein, Introduction to Algorithms, 4e éd., MIT Press. Les annexes A (sommes) et C (dénombrement et probabilités) ainsi que le chapitre 3 (notation asymptotique) sont écrits pour ce même usage.
- K. H. Rosen, Discrete Mathematics and Its Applications, McGraw-Hill. Chapitres sur les entiers et l'arithmétique modulaire, avec l'algorithme d'Euclide étendu et les théorèmes de Fermat et d'Euler entièrement traités.
- D. J. C. MacKay, Information Theory, Inference and Learning Algorithms, Cambridge University Press (disponible librement). Le chapitre 2 rappelle probabilités, espérance et logarithmes exactement au niveau dont les chapitres 6 à 8 ont besoin.
- Cours de Probabilités et statistique de cette collection, pour tout ce que la dernière section ne fait qu'esquisser: variables continues, lois usuelles, variance, convergence et estimation.