Cormen
Algorithmes
Notions de base
Exactitude 2
Lectures complmentaires 8
Invariants de boucle 22
Rcursion 23
Lectures complmentaires 25
Dunod Toute reproduction non autorise est un dlit.
Recherche dichotomique 30
Tri rapide 50
Rcapitulatif 58
Lectures complmentaires 61
III
Lectures complmentaires 73
Tri topologique 79
Lectures complmentaires 93
Algorithme de Dijkstra 97
IV
Tlcopieurs 171
Perspectives 214
Conclusion 218
Bibliographie 220
Index 221
VI
prcision. Cependant, je vais viter daller trop loin dans les dtails, except
peut-tre vers la fin de louvrage, l o jai un peu perdu le contrle.
Je vois ce livre comme lentre dun repas. Supposons que vous alliez au
restaurant et que vous commandiez lentre. Avant de commander la suite,
vous attendez quelle arrive et que vous la mangiez. Si vous ne laimez
pas, vous dcidez que le repas est termin. Peut-tre vous a-t-elle plu, mais
elle a suffi vous rassasier. Ou bien vous lavez apprcie, mais vous avez
encore faim et dcidez de passer la suite. En lisant cet ouvrage, je souhaite
que vous arriviez dans lun des deux derniers cas: vous tes satisfait mais
sans avoir envie daller plus loin dans le monde des algorithmes, ou vous
avez tellement apprci le contenu que vous souhaitez en apprendre plus.
Chaque chapitre se termine par une section intitule Lectures compl-
mentaires qui propose dautres ouvrages et articles relatifs au sujet trait.
Objectif du livre
Je ne suis pas en mesure de vous prciser ce que vous apprendrez en lisant
cet ouvrage. En revanche, voici ce que jai lintention de vous enseigner:
Ce que sont les algorithmes informatiques, une faon de les dcrire et
comment les valuer.
Des mthodes simples qui permettent de rechercher des informations
sur un ordinateur.
Des mthodes qui permettent de rorganiser les informations afin
quelles apparaissent dans lordre souhait (autrement dit les trier).
Comment rsoudre des problmes de base dont la modlisation infor-
matique se fait laide dune structure mathmatique appele graphe.
Parmi leurs nombreuses applications, les graphes conviennent parfaite-
ment la modlisation des rseaux routiers (quelles intersections mnent
dautres intersections par des chemins directs et quelles sont les lon-
gueurs de ces routes?), des dpendances entre des tches (quelle tche
Dunod Toute reproduction non autorise est un dlit.
doit venir avant les autres?), des relations financires (quels sont les taux
de change entre les diffrentes monnaies?) ou des interactions entre des
personnes (qui connat qui? qui naime pas qui? quel acteur apparat
dans un film, au ct de quel autre?).
Comment rsoudre des problmes qui posent des questions sur des
chanes de texte. Certains de ces problmes se rencontrent dans diff-
rents domaines, comme la biologie o les caractres reprsentent des
molcules de base et les chanes de caractres, une structure ADN.
Les principes de base de la cryptographie. Mme si vous navez jamais
chiffr un message vous-mme, il est probable que votre ordinateur lait
dj fait (par exemple lors de lachat de produits en ligne).
Les concepts fondamentaux de la compression de donnes.
VII
Prrequis
Je lai indiqu prcdemment, ce livre comprend du contenu mathma-
tique. Si cela vous effraie, vous pouvez essayer de sauter ces passages ou
de vous tourner vers un ouvrage moins technique. Toutefois, jai fait mon
possible pour que ce contenu reste accessible au plus rfractaire.
Je ne suppose pas que vous ayez dj crit ou mme lu un programme
informatique. Si vous tes capable de suivre des instructions donnes
sous forme dun plan, vous serez en mesure de comprendre la faon dont
jexprime les tapes qui constituent un algorithme. Si vous comprenez la
blague suivante, vous avez dj fait un grand pas:
Avez-vous dj entendu parler de cet informaticien qui tait rest
bloqu dans sa douche? Il se lavait les cheveux en suivant les ins-
tructions inscrites sur la bouteille de shampooing: savonnez,
rincez, recommencez.
Dans cet ouvrage, jemploie un style relativement informel en esprant
quune approche personnelle rendra le contenu plus accessible. Certains
chapitres se fondent sur les prcdents, mais les dpendances sont rares.
Quelques-uns dbutent de manire non technique, mais le deviennent pro-
gressivement. Si vous trouvez quun chapitre devient trop compliqu, vous
aurez probablement intrt lire au moins le dbut du suivant.
Erreurs
Si vous dcouvrez une erreur dans cet ouvrage, nhsitez pas men avertir
par courrier lectronique ladresse unlocked@mit.edu.
Remerciements
Je suis extrmement reconnaissant mes co-auteurs de louvrage Algorith-
mique, Charles Leiserson, Ron Rivest et Cliff Stein, car une grande partie
du prsent ouvrage se fonde sur son contenu. Vous constaterez que jy fais
souvent effrontment rfrence (comprendre que jen prends des extraits).
En rdigeant cet ouvrage seul, jai ralis combien la collaboration avec
Charles, Ron et Cliff pouvait me manquer. Je remercie galement toutes
les personnes mentionnes dans l'avant-propos du CLRS (sigle utilis dans
VIII
IX
Note de lditeur
Nous remercions M. Christophe Picouleau, professeur au Cnam de
Paris, pour sa relecture critique de la traduction du chapitre 10 sur la
complexit.
Louvrage [CLRS09] auquel Thomas Cormen fait
souvent allusion dans cet ouvrage est son cours
de rfrence dont il existe une version franaise:
Algorithmique
Cours avec 957 exercices et 158problmes
T. H. Cormen, C. E. Leiserson, R. L. Rivest
et C. Stein,
3e dition, 1296 pages,
2010, Dunod.
lise des algorithmes afin de rpartir les paquets dans les diffrents camions
et de dterminer lordre de passage chez les clients. Les algorithmes sont
partout: sur notre ordinateur portable, sur les serveurs, sur notre smart-
phone, sur les systmes embarqus (notre voiture, notre micro-onde ou
notre climatisation), etc.
Quelle est la diffrence entre un algorithme qui sexcute sur un ordina-
teur et un algorithme que nous droulons? Contrairement un ordinateur,
nous pouvons accepter que lalgorithme soit dcrit de faon peu prcise.
Par exemple, si nous prenons notre voiture pour nous rendre sur notre lieu
de travail, lalgorithme pourrait stipuler si la circulation est encombre,
changer de chemin. Nous saurons sans doute interprter mauvaise cir-
culation, pas un ordinateur.
Par consquent, un algorithme informatique est un ensemble dtapes qui
permettent daccomplir une tche et qui est dcrit de manire suffisamment
prcise pour quun ordinateur puisse lexcuter. Si vous avez dj crit des
programmes informatiques en Java, C, C++, Python, Fortran, Matlab ou
autres, vous savez ce que signifie prcision. Dans le cas contraire, vous le
dcouvrirez rapidement en tudiant les algorithmes tudis dans cet ouvrage.
Passons la question suivante: Quattendons-nous dun algorithme
informatique?
Les algorithmes informatiques rsolvent des problmes informatiques.
Nous en attendons deux choses: proposer une solution juste partir des
donnes dentre du problme et utiliser pour cela les ressources de calcul
de manire efficace. Examinons tour tour ces deux points.
Exactitude
Que signifie proposer une solution exacte un problme? En gn-
ral, nous sommes en mesure dindiquer prcisment en quoi consiste une
solution exacte. Par exemple, une solution juste donne par notre GPS
notre problme de recherche du meilleur trajet vers notre destination serait
la route qui, parmi toutes les possibilits existantes entre notre point de
dpart et notre point darrive, prend le moins de temps. Ou bien celle qui
correspond la plus courte distance. Ou bien celle qui prend le moins de
temps en vitant les pages. Bien entendu, les informations utilises par le
GPS pour dterminer litinraire peuvent ne pas correspondre la ralit.
moins quil ne soit capable daccder aux informations de trafic en temps
rel, il peut supposer que le temps de parcours est gal la distance divise
par les limitations de vitesse. Cependant, en cas dembouteillage, le GPS
pourrait donner un mauvais conseil si lobjectif tait le trajet le plus rapide.
Nanmoins, lalgorithme dtablissement de litinraire excut par le GPS
reste correct mme si les entres ne le sont pas. En effet, partir des infor-
mations fournies lalgorithme, il renvoie le chemin le plus rapide.
Dans le cas de certains problmes, il peut tre difficile, voire impos-
sible, dindiquer si un algorithme produit une solution exacte. Prenons
pour exemple un algorithme de reconnaissance de caractres. Limage de
116pixels suivante correspond-elle un 5 ou un S?
si A sexcute toujours deux fois plus rapidement que B, alors, toutes choses
tant gales par ailleurs, nous choisirons A la place de B. Cependant,
du point de vue de la comparaison abstraite des algorithmes, nous nous
intressons lordre de grandeur, en oubliant les coefficients et les termes
dordre infrieur.
La rponse la dernire question de ce chapitre, Pourquoi sintresser
aux algorithmes informatiques?, dpend de qui vous tes.
1. Je sais parfaitement que, moins de rsider dans la Silicon Valley, il est peu probable
que les algorithmes soient un sujet dbattu lors des cocktails auxquels vous participez.
Cependant, quelle quen soit la raison, nous, professeurs dinformatique, pensons quil
est important que nos tudiants ne nous mettent pas dans lembarras en raison dun
manque de connaissances dans certains domaines de linformatique.