1176
INTRODUCTION À L’ALGORITHMIQUE Cours et exercices Thomas Cormen Professeur associé d’informatique au Darmouth College Charles Leiserson Professeur d’informatique au MIT Ronald Rivest Professeur d’informatique au MIT Clifford Stein Professeur associé au génie industriel et de recherche opérationelle à l’université de Columbia Préface de Philippe chrétienne , Claire Hanen, Alix Munier, Christophe Picouleau 1 ère édition traduite de l’américain par Xavier Cazin Compléments et mises à jour de la 2 e édition traduits par Georges-Louis Kocher 2 e édition

Introduction à l'algorithmique

Embed Size (px)

DESCRIPTION

 

Citation preview

  • 1. 0 lim Page I Jeudi, 22. juin 2006 5:03 17 INTRODUCTION LALGORITHMIQUE Cours et exercices Thomas Cormen Professeur associ dinformatique au Darmouth College Charles Leiserson Professeur dinformatique au MIT Ronald Rivest Professeur dinformatique au MIT Clifford Stein Professeur associ au gnie industriel et de recherche oprationelle luniversit de Columbia Prface de Philippe chrtienne , Claire Hanen, Alix Munier, Christophe Picouleau 1re dition traduite de lamricain par Xavier Cazin Complments et mises jour de la 2e dition traduits par Georges-Louis Kocher 2e dition
  • 2. 0 lim Page II Jeudi, 22. juin 2006 5:03 17 Ldition originale de ce livre a t publie aux tats-Unis par The MIT Press, Cambridge, Massachusetts, sous le titre Introduction to Algorithms, second edition. The Massachusetts Institute of Technology, 2001 First edition 1990 Ce pictogramme mrite une explication. Son objet est dalerter le lecteur sur la menace que reprsente pour lavenir de lcrit, particulirement dans le domaine de ldition technique et universitaire, le dveloppement massif du photocopillage. Le Code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise dans les tablissements denseignement suprieur, provoquant une baisse brutale des achats de livres et de revues, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace. Nous rappelons donc que toute reproduction, partielle ou totale, de la prsente publication est interdite sans autorisation du Centre franais dexploitation du droit de copie (CFC, 20 rue des GrandsAugustins, 75006 Paris). Dunod, Paris, 1994, pour la 1re dition Dunod, Paris, 2004, pour la prsente dition ISBN 2 10 003922 9 Toute reprsentation ou reproduction intgrale ou partielle faite sans le consentement de lauteur ou de ses ayants droit ou ayants cause est illicite selon le Code de la proprit intellectuelle (Art L 122-4) et constitue une contrefaon rprime par le Code pnal. Seules sont autorises (Art L 122-5) les copies ou reproductions strictement rserves lusage priv du copiste et non destines une utilisation collective, ainsi que les analyses et courtes citations justifies par le caractre critique, pdagogique ou dinformation de luvre laquelle elles sont incorpores, sous rserve, toutefois, du respect des dispositions des articles L 122-10 L 122-12 du mme Code, relatives la reproduction par reprographie.
  • 3. Table des matires PRFACE LDITION FRANAISE PRFACE XVII XXI PARTIE 1 INTRODUCTION CHAPITRE 1 RLE DES ALGORITHMES EN INFORMATIQUE 3 1.1 Algorithmes Exercices 3 8 8 11 PROBLMES 11 CHAPITRE 2 PREMIERS PAS 13 2.1 Tri par insertion Exercices 13 18 2.2 Analyse des algorithmes Exercices c Dunod La photocopie non autorise est un dlit 1.2 Algorithmes en tant que technologie Exercices 19 25 2.3 Conception des algorithmes Exercices 25 34 PROBLMES 35 CHAPITRE 3 CROISSANCE DES FONCTIONS 39 3.1 Notation asymptotique Exercices 40 48 3.2 Notations standard et fonctions classiques Exercices 48 54 PROBLMES 55
  • 4. IV Table des matires CHAPITRE 4 RCURRENCES 59 4.1 Mthode de substitution Exercices 60 64 4.2 Mthode de larbre rcursif Exercices 64 68 4.3 Mthode gnrale Exercices 69 71 4.4 Dmonstration du thorme gnral Exercices 72 80 PROBLMES 80 CHAPITRE 5 ANALYSE PROBABILISTE ET ALGORITHMES RANDOMISS 87 5.1 Le problme de lembauche Exercices 87 90 5.2 Variables indicatrices Exercices 91 94 5.3 Algorithmes randomiss Exercices 95 100 5.4 Analyse probabiliste et autres emplois des variables indicatrices Exercices 101 112 PROBLMES 113 PARTIE 2 TRI ET RANGS CHAPITRE 6 TRI PAR TAS 121 6.1 Tas Exercices 121 123 6.2 Conservation de la structure de tas Exercices 124 125 6.3 Construction dun tas Exercices 126 128 6.4 Algorithme du tri par tas Exercices 129 129 6.5 Files de priorit Exercices 131 134 PROBLMES 135
  • 5. Table des matires V 139 7.1 Description du tri rapide Exercices 139 142 7.2 Performances du tri rapide Exercices 143 146 7.3 Versions randomises du tri rapide Exercices 147 148 7.4 Analyse du tri rapide Exercices 148 152 PROBLMES 153 CHAPITRE 8 TRI EN TEMPS LINAIRE 159 8.1 Minorants pour le tri Exercices 159 161 8.2 Tri par dnombrement Exercices 162 164 8.3 Tri par base Exercices 164 167 8.4 Tri par paquets Exercices 167 171 PROBLMES 171 CHAPITRE 9 MDIANS ET RANGS 177 9.1 Minimum et maximum Exercices 178 179 9.2 Slection en temps moyen linaire Exercices c Dunod La photocopie non autorise est un dlit CHAPITRE 7 TRI RAPIDE 179 183 9.3 Slection en temps linaire dans le cas le plus dfavorable Exercices 183 186 PROBLMES 187 PARTIE 3 STRUCTURES DE DONNES CHAPITRE 10 STRUCTURES DE DONNES LMENTAIRES 195 10.1 Piles et les Exercices 195 197
  • 6. VI Table des matires 10.2 Listes chanes Exercices 199 203 10.3 Implmentation des pointeurs et des objets Exercices 203 207 10.4 Reprsentation des arborescences Exercices 208 209 PROBLMES 211 CHAPITRE 11 TABLES DE HACHAGE 215 11.1 Tables adressage direct Exercices 216 217 11.2 Tables de hachage Exercices 218 222 11.3 Fonctions de hachage Exercices 223 230 11.4 Adressage ouvert Exercices 231 238 11.5 Hachage parfait Exercices 238 242 PROBLMES 243 CHAPITRE 12 ARBRES BINAIRES DE RECHERCHE 247 12.1 Quest-ce quun arbre binaire de recherche ? Exercices 248 249 12.2 Requte dans un arbre binaire de recherche Exercices 250 253 12.3 Insertion et suppression Exercices 254 257 12.4 Arbres binaires de recherche construits alatoirement Exercices 258 261 PROBLMES 262 CHAPITRE 13 ARBRES ROUGE-NOIR 267 13.1 Proprits des arbres rouge-noir Exercices 267 270 13.2 Rotation Exercices 271 272
  • 7. Table des matires VII 13.3 Insertion Exercices 273 280 13.4 Suppression Exercices 281 286 PROBLMES 287 CHAPITRE 14 EXTENSION DUNE STRUCTURE DE DONNES 295 14.1 Rangs dynamiques Exercices 296 300 14.2 Comment tendre une structure de donnes Exercices 301 303 14.3 Arbres dintervalles Exercices 304 309 PROBLMES 310 PARTIE 4 TECHNIQUES AVANCES DE CONCEPTION ET DANALYSE 315 15.1 Ordonnancement de chanes de montage Exercices 316 322 15.2 Multiplications matricielles enchanes Exercices 323 330 15.3 lments de la programmation dynamique Exercices 330 341 15.4 Plus longue sous-squence commune Exercices c Dunod La photocopie non autorise est un dlit CHAPITRE 15 PROGRAMMATION DYNAMIQUE 341 347 15.5 Arbres binaires de recherche optimaux Exercices 347 354 PROBLMES 354 CHAPITRE 16 ALGORITHMES GLOUTONS 361 16.1 Un problme de choix dactivits Exercices 362 370 16.2 lments de la stratgie gloutonne Exercices 370 375 16.3 Codages de Huffman Exercices 376 382
  • 8. VIII Table des matires 16.4 Fondements thoriques des mthodes gloutonnes Exercices 383 388 16.5 Un problme dordonnancement de tches Exercices 389 392 PROBLMES 392 CHAPITRE 17 ANALYSE AMORTIE 395 17.1 Mthode de lagrgat Exercices 396 400 17.2 Mthode comptable Exercices 400 402 17.3 Mthode du potentiel Exercices 402 405 17.4 Tables dynamiques Exercices 406 414 PROBLMES 415 PARTIE 5 STRUCTURES DE DONNES AVANCES CHAPITRE 18 B-ARBRES 425 18.1 Dnition dun B-arbre Exercices 429 431 18.2 Oprations fondamentales sur les B-arbres Exercices 432 437 18.3 Suppression dune cl dans un B-arbre Exercices 439 442 PROBLMES 442 CHAPITRE 19 TAS BINOMIAUX 445 19.1 Arbres binomiaux et tas binomiaux Exercices 447 450 19.2 Oprations sur les tas binomiaux Exercices 451 461 PROBLMES 462
  • 9. Table des matires IX CHAPITRE 20 TAS DE FIBONACCI 465 20.1 Structure des tas de Fibonacci 466 20.2 Oprations sur les tas fusionnables Exercices 469 477 20.3 Diminution dune cl et suppression dun nud Exercices 478 481 20.4 Borne pour le degr maximal Exercices 482 484 PROBLMES 484 CHAPITRE 21 STRUCTURES DE DONNES POUR ENSEMBLES DISJOINTS 487 21.1 Oprations sur les ensembles disjoints Exercices 487 490 21.2 Reprsentation densembles disjoints par des listes chanes Exercices 490 493 21.3 Forts densembles disjoints Exercices 494 497 21.4 Analyse de lunion par rang avec compression de chemin Exercices 498 505 PROBLMES 506 PARTIE 6 ALGORITHMES POUR LES GRAPHES 513 22.1 Reprsentation des graphes Exercices c Dunod La photocopie non autorise est un dlit CHAPITRE 22 ALGORITHMES LMENTAIRES POUR LES GRAPHES 514 516 22.2 Parcours en largeur Exercices 517 524 22.3 Parcours en profondeur Exercices 525 532 22.4 Tri topologique Exercices 534 536 22.5 Composantes fortement connexes Exercices 536 541 PROBLMES 542
  • 10. X Table des matires CHAPITRE 23 ARBRES COUVRANTS DE POIDS MINIMUM 545 23.1 Construction dun arbre couvrant minimum Exercices 546 550 23.2 Algorithmes de Kruskal et de Prim Exercices 551 556 PROBLMES 558 CHAPITRE 24 PLUS COURTS CHEMINS ORIGINE UNIQUE 563 24.1 Algorithme de Bellman-Ford Exercices 571 574 24.2 Plus courts chemins origine unique dans les graphes orients sans circuit Exercices 575 577 24.3 Algorithme de Dijkstra Exercices 577 582 24.4 Contraintes de potentiel et plus courts chemins Exercices 583 587 24.5 Dmonstrations des proprits de plus court chemin Exercices 589 594 PROBLMES 595 CHAPITRE 25 PLUS COURTS CHEMINS POUR TOUT COUPLE DE SOMMETS 601 25.1 Plus courts chemins et multiplication de matrices Exercices 603 608 25.2 Lalgorithme de Floyd-Warshall Exercices 609 614 25.3 Algorithme de Johnson pour les graphes peu denses Exercices 616 620 PROBLMES 621 CHAPITRE 26 FLOT MAXIMUM 625 26.1 Rseaux de transport Exercices 626 631 26.2 La mthode de Ford-Fulkerson Exercices 632 643 26.3 Couplage maximum dans un graphe biparti Exercices 644 648 26.4 Algorithmes de prots Exercices 649 658
  • 11. Table des matires XI 26.5 Algorithme rtiqueter-vers-lavant Exercices 659 669 PROBLMES 669 PARTIE 7 MORCEAUX CHOISIS 681 27.1 Rseaux de comparaison Exercices 682 685 27.2 Le principe du zro-un Exercices 686 688 27.3 Un rseau de tri bitonique Exercices 689 690 27.4 Un rseau de fusion Exercices 692 693 27.5 Un rseau de tri Exercices 694 696 PROBLMES 697 CHAPITRE 28 CALCUL MATRICIEL 701 28.1 Proprits des matrices Exercices 702 709 28.2 Algorithme de Strassen pour la multiplication des matrices Exercices 710 716 28.3 Rsolution de systmes dquations linaires Exercices c Dunod La photocopie non autorise est un dlit CHAPITRE 27 RSEAUX DE TRI 717 730 28.4 Inversion des matrices Exercices 730 734 28.5 Matrices symtriques dnies positives et approximation des moindres carrs Exercices 735 740 PROBLMES 741 CHAPITRE 29 PROGRAMMATION LINAIRE 745 29.1 Forme canonique et forme standard Exercices 752 759 29.2 Formulation de problmes comme programmes linaires Exercices 760 764
  • 12. XII Table des matires 29.3 Algorithme du simplexe Exercices 765 778 29.4 Dualit Exercices 779 784 29.5 Solution de base ralisable initiale Exercices 785 790 PROBLMES 791 CHAPITRE 30 POLYNMES ET TRANSFORME RAPIDE DE FOURIER 795 30.1 Reprsentation des polynmes Exercices 797 802 30.2 Transforme discrte de Fourier et transforme rapide de Fourier Exercices 803 810 30.3 Implmentations efcaces de la FFT Exercices 811 816 PROBLMES 816 CHAPITRE 31 ALGORITHMES DE LA THORIE DES NOMBRES 821 31.1 Notions de thorie des nombres Exercices 823 827 31.2 Plus grand commun diviseur Exercices 828 832 31.3 Arithmtique modulaire Exercices 833 839 31.4 Rsolution dquations linaires modulaires Exercices 839 842 31.5 Thorme du reste chinois Exercices 843 845 31.6 Puissances dun lment Exercices 846 850 31.7 Le cryptosystme cls publiques RSA Exercices 850 856 31.8 Test de primarit Exercices 856 865 31.9 Factorisation des entiers Exercices 865 870 PROBLMES 870
  • 13. XIII CHAPITRE 32 RECHERCHE DE CHANES DE CARACTRES 875 32.1 Algorithme naf de recherche de chane de caractres Exercices 878 879 32.2 Algorithme de Rabin-Karp Exercices 880 884 32.3 Recherche de chane de caractres au moyen dautomates nis Exercices 885 891 32.4 Algorithme de Knuth-Morris-Pratt Exercices 891 898 PROBLMES 899 CHAPITRE 33 GOMTRIE ALGORITHMIQUE 901 33.1 Proprits des segments de droite Exercices 902 907 33.2 Dterminer si deux segments donns se coupent Exercices 908 914 33.3 Recherche de lenveloppe convexe Exercices 915 924 33.4 Recherche des deux points les plus rapprochs Exercices 925 929 PROBLMES 930 CHAPITRE 34 NP-COMPLTUDE 933 34.1 Temps polynomial Exercices c Dunod La photocopie non autorise est un dlit Table des matires 939 945 34.2 Vrication en temps polynomial Exercices 946 950 34.3 NP-compltude et rductibilit Exercices 951 960 34.4 Preuves de NP-compltude Exercices 961 968 34.5 Problmes NP-complets Exercices 969 982 PROBLMES 983
  • 14. XIV Table des matires CHAPITRE 35 ALGORITHMES DAPPROXIMATION 987 35.1 Problme de la couverture de sommets Exercices 989 992 35.2 Problme du voyageur de commerce Exercices 992 997 35.3 Problme de la couverture densemble Exercices 997 1002 35.4 Randomisation et programmation linaire Exercices 1002 1007 35.5 Problme de la somme de sous-ensemble Exercices 1007 1012 PROBLMES 1013 PARTIE 8 ANNEXES : LMENTS DE MATHMATIQUES ANNEXE A SOMMATIONS 1021 A.1 Formules et proprits des sommations Exercices 1022 1025 A.2 Bornes des sommations Exercices 1025 1031 PROBLMES 1031 ANNEXE B ENSEMBLES, ETC. 1033 B.1 Ensembles Exercices 1033 1037 B.2 Relations Exercices 1038 1040 B.3 Fonctions Exercices 1040 1042 B.4 Graphes Exercices 1043 1046 B.5 Arbres Exercices 1047 1053 PROBLMES 1054
  • 15. Table des matires XV 1057 C.1 Dnombrement Exercices 1057 1061 C.2 Probabilits Exercices 1063 1068 C.3 Variables alatoires discrtes Exercices 1069 1073 C.4 Distributions gomtrique et binomiale Exercices 1074 1078 C.5 Queues de la distribution binomiale Exercices 1079 1084 PROBLMES 1085 BIBLIOGRAPHIE 1087 INDEX c Dunod La photocopie non autorise est un dlit ANNEXE C DNOMBREMENT ET PROBABILITS 1109
  • 16. c Dunod La photocopie non autorise est un dlit Prface ldition franaise Vous savez compter. Un ordinateur aussi ! Mais connaissez-vous les mcanismes utiliss ? Etes-vous vraiment sr que le rsultat afch soit juste ? Combien de temps devrez-vous attendre la n du calcul ? Ny a-t-il pas un moyen de lobtenir plus vite ? Que vous soyez ingnieur, mathmaticien, physicien, statisticien et surtout informaticien, toutes ces questions vous vous les posez. Si vous tes tudiant, elles surgiront trs rapidement. tudier lalgorithmique, cest apporter des rponses vos questions. Cette science est le cur de linformatique. Pour tout ceux qui doivent ou devront faire travailler un ordinateur, il est essentiel de comprendre ses principes fondamentaux et de connatre ses lments de base. Une formule 1 ne se conduit pas comme une voiture pdales. De mme un ordinateur se sutilise pas comme un boulier. Lalgorithmique est le permis de conduire de linformatique. Sans elle, il nest pas concevable dexploiter sans risque un ordinateur. Cette introduction remarquable lalgorithmique donne au lecteur dune part les bases thoriques indispensables et lui fournit dautre part les moyens de concevoir rigoureusement des programmes efcaces permettant de rsoudre des problmes varis issus de diffrentes applications. Lventail des algorithmes prsents va des plus classiques, comme les algorithmes de tri et les fonctions de hachage, aux plus rcents comme ceux de la cryptographie. On trouve ici rassembls des algorithmes numriques, par exemple pour linversion de matrices ou la transforme de Fourier et des algorithmes combinatoires comme les algorithmes de graphes ou la recherche de motif. Une trs large place est faite aux structures de donnes, des plus simples comme les listes, aux plus sophistiques comme les tas de Fibonacci. Notons au passage limportance accorde aux diffrentes mesures de complexit (pire des cas, amortissement, en moyenne) qui permettent dapprofondir entre autres ltude de lefcacit des algorithmes de tri et des structures de donnes.
  • 17. XVIII Prface ldition franaise Il est certain que la plupart des informaticiens spcialiss trouveront dans ce livre leurs algorithmes de base, exprims de faon unie, ainsi que certaines avances rcentes dans leur domaine. Cet ouvrage met donc en relief le rle central jou par lalgorithmique dans la science Informatique. La prsence de chapitres mthodologiques comme ceux consacrs la programmation dynamique et aux algorithmes gloutons, ainsi que les deux derniers qui traitent de la complexit des problmes et de la conception dalgorithmes approchs, permet au lecteur damorcer une rexion plus pousse sur la manire daborder un problme et de concevoir une mthode de rsolution. Ces chapitres sont illustrs par des exemples dapplication bien choisis et l encore trs divers. Cette gamme de sujets, riche par sa varit et ses niveaux de difcult, est soutenue par une pdagogie constante, qui rend la lecture de louvrage facile et agrable, sans nuire lexigence de rigueur. A titre dexemple, on peut citer la clart remarquable des chapitres consacrs aux graphes, qui, partir dun algorithme gnrique, introduisent toute une famille de variantes efcaces dont les diffrentes implmentations sont analyses avec nesse. Dune manire gnrale, les notions prsentes sont systmatiquement introduites de faon informelle partir dun exemple ou dune application particulire, avant dtre formalises. Les proprits et les algorithmes sont toujours dmontrs. La prsence dune partie consacre aux fondements mathmatiques utiliss est tout fait bienvenue et rend louvrage accessible avec trs peu de prrequis. Le lecteur peut facilement se familiariser et approfondir les notions rencontres grce aux nombreux exercices de difcult gradue. Les problmes permettent daller plus loin dans la comprhension du chapitre, et sont souvent une occasion de connatre diffrentes applications pratiques des algorithmes prsents. De ce point de vue, ce livre est une mine dor pour tout enseignant dalgorithmique. La lecture de cet ouvrage est tout fait recommande aux tudiants de second et de troisime cycle dinformatique et de mathmatiques, ainsi quaux lves ingnieurs. Tous y trouveront une aide et un support de cours utile tout au long de leurs tudes. La diversit des sujets abords, lefcacit des algorithmes prsents, et leur criture dans un pseudo-code proche des langages C et Pascal, qui les rend trs faciles implmenter, font aussi de ce livre un recueil fort utile dans la vie professionelle dun informaticien ou dun ingnieur. Enn, au del de ses besoins propres, nous souhaitons que le lecteur, quil soit ingnieur, tudiant, ou simplement curieux, prenne comme nous plaisir et intrt la lecture de cet ouvrage. Paris, mars 1994 P HILIPPE C HRTIENNE, C LAIRE H ANEN, A LIX M UNIER, C HRISTOPHE P ICOULEAU Universit Pierre et Marie Curie (LIP6)
  • 18. Prface ldition franaise XIX propos de la seconde dition : Cest avec une curiosit renouvele que lenseignant, le chercheur ou ltudiant abordera cette seconde dition du livre de rfrence de lalgorithmique. Lalgorithmicien dj familier de la prcdente dition y trouvera, parmi moult enrichissements dissmins tout le long de louvrage, de nouvelles parties, notamment celle ddie la programmation linaire, de nombreux exercices et problmes indits, ainsi quune prsentation uniformise des preuves dalgorithmes ; le lecteur, tudiant ou enseignant, qui dcouvre cette Introduction lalgorithmique, y trouvera sous un formalisme des plus limpides, le ncessaire, voire un peu plus, de cette discipline qui est lune des pierres angulaires de linformatique. c Dunod La photocopie non autorise est un dlit Paris, aot 2002 C HRISTOPHE P ICOULEAU, Laboratoire CEDRIC CNAM
  • 19. c Dunod La photocopie non autorise est un dlit Prface Nous proposons dans ce livre une introduction complte ltude contemporaine des algorithmes informatiques. De nombreux algorithmes y sont prsents et tudis en dtail, de faon rendre leur conception et leur analyse accessibles tous les niveaux de lecture. Nous avons essay de maintenir la simplicit des explications, sans sacrier ni la profondeur de ltude, ni la rigueur mathmatique. Chaque chapitre prsente un algorithme, une technique de conception, un domaine dapplication, ou un sujet sy rapportant. Les algorithmes sont dcrits en franais et dans un pseudo-code conu pour tre lisible par quiconque ayant dj un peu programm. Le livre contient plus de 230 gures qui illustrent le fonctionnement des algorithmes. Comme nous mettons laccent sur lefcacit comme critre de conception, les temps dexcution de tous nos algorithmes sont soigneusement analyss. Ce texte est en premier lieu un support du cours dalgorithmique ou de structures de donnes de deuxime ou troisime cycle universitaire. Il est galement bien adapt la formation personnelle des techniciens professionnels, puisquil sintresse aux problmes dingnierie ayant trait la conception dalgorithmes, ainsi qu leurs aspects mathmatiques. Dans cette dition, qui est la seconde, nous avons modi lensemble du livre. Les changements vont de la simple refonte de phrases individuelles jusqu lajout de nouveaux chapitres. a) Pour lenseignant Ce livre se veut la fois complet et polyvalent. Il se rvlera utile pour toute sorte de cours, depuis un cours de structures de donnes en deuxime cycle jusqu un cours
  • 20. XXII Prface dalgorithmique en troisime cycle. Un cours trimestriel tant beaucoup trop court pour aborder tous les sujets tudis ici, on peut voir ce livre comme un buffet garni o vous pourrez choisir le matriel le mieux adapt aux cours que vous souhaitez enseigner. Vous trouverez commode dorganiser votre cours autour des chapitres dont vous avez vraiment besoin. Nous avons fait en sorte que les chapitres soient relativement indpendants, de manire viter toute subordination inattendue ou superue dun chapitre lautre. Chaque chapitre commence en prsentant des notions simples et se poursuit avec les notions plus difciles, le dcoupage en sections crant des points de passage naturels. Dans un cours de deuxime cycle, on pourra ne faire appel quaux premires sections dun chapitre donn ; en troisime cycle, on pourra considrer le chapitre entier. Nous avons inclus plus de 920 exercices et plus de 140 problmes. Chaque section se termine par des exercices et chaque chapitre se termine par des problmes. Les exercices sont gnralement des questions courtes de contrle des connaissances. Certains servent surtout tester la comprhension du sujet ; dautres, plus substantiels, sont plutt du genre devoir la maison. Les problmes sont des tudes de cas plus labores qui introduisent souvent de nouvelles notions ; ils sont composs le plus souvent de plusieurs questions qui guident ltudiant travers les tapes ncessaires pour parvenir une solution. Les sections et exercices munis dune astrisque ( ) recouvrent des thmes destins plutt aux tudiants de troisime cycle. Un passage toil nest pas forcment plus ardu quun passage non toil, mais il risque dexiger des connaissances mathmatiques plus pointues. De mme, un exercice toil risque de demander un niveau thorique plus important ou dincorporer des subtilits au-dessus de la moyenne. b) Pour ltudiant Nous esprons que ce livre vous fournira une introduction agrable lalgorithmique. Nous avons essay de rendre chaque algorithme accessible et intressant. Pour vous aider lorsque vous rencontrez des algorithmes peu familiers ou difciles, nous les avons tous dcrits tape par tape. Nous expliquons aussi avec soin les notions mathmatiques ncessaires pour comprendre lanalyse des algorithmes. Si vous tes dj familiaris avec un sujet, vous constaterez que lorganisation des chapitres vous permet de sauter les sections dintroduction et daller rapidement aux concepts plus avancs. Ceci est un livre volumineux, et votre cours nen couvrira sans doute quune partie. Nous avons pourtant essay den faire un livre qui vous servira aussi bien maintenant comme support de cours, que plus tard dans votre carrire, comme rfrence mathmatique, ou manuel dingnierie. Quels sont les pr-requis pour lire ce livre ?
  • 21. Prface XXIII Vous devrez avoir un petite exprience de la programmation. En particulier vous devrez comprendre les procdures rcursives et les structures de donnes simples comme les tableaux et les listes chanes. Vous devrez tre relativement familiaris avec les dmonstrations mathmatiques par rcurrence. Certaines parties de ce livre reposent sur des connaissances de calcul lmentaire. Cela dit, les parties 1 et 8 de ce livre vous apprendront toutes les techniques mathmatiques dont vous aurez besoin. c) Pour le professionnel La grande varit de sujets prsents dans ce livre en fait un excellent manuel de rfrence sur les algorithmes. Chaque chapitre tant relativement indpendant des autres, vous pourrez vous concentrer sur les sujets qui vous intressent le plus. La plupart des algorithmes tudis ont une grande utilit pratique. Nous mettons donc laccent sur limplmentation et les autres problmes dingnierie. Nous offrons le plus souvent des alternatives pratiques aux quelques algorithmes qui sont surtout dintrt thorique. Si vous souhaitez implmenter lun de ces algorithmes, vous naurez aucun mal traduire notre pseudo-code dans votre langage de programmation favori. Le pseudocode est conu pour prsenter chaque algorithme de faon claire et succincte. Nous ne nous intressons donc pas la gestion des erreurs et autres problmes de gnie logiciel qui demandent des hypothses particulires sur lenvironnement de programmation. Nous essayons de prsenter chaque algorithme simplement et directement de manire viter que leur essence ne soit masque par les idiosyncrasies dun langage de programmation particulier. c Dunod La photocopie non autorise est un dlit d) Pour nos collgues Nous donnons une bibliographie trs complte et des rfrences la littrature courante. Chaque chapitre se termine par une partie notes de chapitre qui fournissent des dtails et des rfrences historiques. Les notes de chapitre ne fournissent pas, toutefois, une rfrence complte au vaste champ des algorithmes. Malgr la taille imposante de cet ouvrage, nous avons d renoncer, faute de place, inclure nombre dalgorithmes intressants. Nonobstant les innombrables supplications manant dtudiants, nous avons dcid de ne pas fournir de solutions aux problmes et exercices ; ainsi, ltudiant ne succombera pas la tentation de regarder la solution au lieu dessayer de la trouver par lui-mme. e) Modications apportes la seconde dition Quest-ce qui a chang par rapport la premire dition de ce livre ? Pas grand chose ou beaucoup de choses, selon le point de vue adopt.
  • 22. XXIV Prface Un examen sommaire de la table des matires montre que la plupart des chapitres de la premire dition gurent aussi dans la seconde. Nous avons supprim deux chapitres et une poigne de sections, mais nous avons ajout trois nouveaux chapitres et quatre nouvelles sections rparties sur dautres chapitres. Si vous deviez valuer lampleur des modications daprs la table des matires, vous en concluriez que les changements ont t limits. En fait, les modications vont bien au-del de ce que semble montrer la table des matires. Voici, dans le dsordre, un rsum des changements les plus signicatifs pour la seconde dition : Cliff Stein a rejoint notre quipe dauteurs. Certaines erreurs ont t corriges. Combien ? Disons, un certain nombre. Il y a trois nouveaux chapitres : Le chapitre 1 prsente le rle des algorithmes en informatique. Le chapitre 5 traite de lanalyse probabiliste et des algorithmes randomiss. Comme avec la premire dition, ces thmes reviennent souvent dans cet ouvrage. Le chapitre 29 est consacr la programmation linaire. Aux chapitres repris de la premire dition ont t ajoutes de nouvelles sections, traitant des sujets que voici : hachage parfait (section 11.5), deux applications de la programmation dynamique (sections 15.1 et 15.5), et algorithmes dapproximation utilisant randomisation et programmation linaire (section 35.4). Pour montrer davantage dalgorithmes en dbut de livre, trois des chapitres consacrs aux thories mathmatiques ont t transfrs de la partie 1 vers les annexes, savoir la partie 8. Il y a plus de 40 nouveaux problmes et plus de 185 nouveaux exercices. Nous avons rendu explicite lutilisation des invariants de boucle pour prouver la validit des algorithmes. Notre premier invariant apparat au chapitre 2, et nous en verrons une trentaine dautres tout au long de cet ouvrage. Nous avons rcrit nombre des analyses probabilistes. En particulier, nous utilisons une dizaine dendroits la technique des variables indicatrices qui simplie les analyses probabilistes, surtout quand les variables alatoires sont dpendantes. Nous avons enrichi et actualis les notes de chapitre et la bibliographie. Celleci a augment de plus de 50% et nous avons cit nombre de nouveaux rsultats algorithmiques qui ont paru postrieurement la premire dition de ce livre.
  • 23. Prface XXV Nous avons galement procd aux changements suivants : Le chapitre consacr la rsolution des rcurrences ne contient plus la mthode ditration. la place, dans la section 4.2, nous avons promu les arbres rcursifs de faon en faire une mthode de plein droit. Nous avons trouv que tracer des arbres rcursifs est moins sujet erreur que ditrer des rcurrences Nous signalons, cependant, que les arbres rcursifs sont surtout intressants pour gnrer des conjectures qui seront ensuite vries via la mthode de substitution. La mthode de partitionnement employe pour le tri rapide (quicksort) (section 7.1) et pour la slection en temps moyen linaire (section 9.2) a chang. Nous utilisons dsormais la mthode de Lomuto qui, grce des variables indicatrices, simplie quelque peu lanalyse. La mthode utilise dans la premire dition, due Hoare, apparat sous forme de problme au chapitre 7. Nous avons modi la prsentation du hachage universel la section 11.3.3 de faon que cette tude rentre dans le cadre du hachage parfait. Il y a une analyse beaucoup plus simple de la hauteur dun arbre de recherche binaire gnr alatoirement, la section 12.4. La prsentation de la programmation dynamique (section 15.3) et celle des algorithmes gloutons (section 16.2) ont t fortement enrichies. Ltude du problme du choix dactivits, expos au dbut du chapitre consacr aux algorithmes gloutons, aide clarier les relations entre programmation dynamique et algorithmes gloutons. Nous avons remplac la dmonstration du temps dexcution de la structure de donnes union densembles disjoints, la section 21.4, par une dmonstration qui emploie la mthode du potentiel pour dterminer une borne serre. La dmonstration de la validit de lalgorithme de recherche des composantes fortement connexes, la section 22.5, est plus simple, plus claire et plus directe. c Dunod La photocopie non autorise est un dlit Le chapitre 24, consacr aux plus courts chemins origine unique, a t refondu de faon que les dmonstrations des proprits fondamentales soient places dans une section spcique. Cette nouvelle organisation nous permet de commencer plus tt ltude des algorithmes. La section 34.5 contient une prsentation enrichie de la NP-compltude, ainsi que de nouvelles dmonstrations de la NP-compltude des problmes du cycle hamiltonien et de la somme dun sous-ensemble. Enn, nous avons revu quasiment toutes les sections pour corriger, simplier et clarier explications et dmonstrations. f) Site web Un autre changement par rapport la premire dition est ce que livre a maintenant son site web lui : http ://mitpress.mit.edu/algorithms/. Vous pouvez utiliser ce site pour signaler des erreurs, obtenir la liste des erreurs connues ou
  • 24. XXVI Prface mettre des suggestions ; nhsitez pas nous faire signe. Nous sommes tout particulirement intresss par des ides dexercice et de problme, mais noubliez pas dy joindre les solutions. Nous regrettons dtre dans limpossibilit de rpondre personnellement tous les commentaires. g) Remerciements pour la premire dition De nombreux amis et collgues ont largement contribu la qualit de ce livre. Nous les remercions tous pour leur aide et leurs critiques constructives. Le laboratoire dinformatique du MIT nous a offert un environnement de travail idal. Nos collgues du groupe de thorie du calcul ont t particulirement comprhensifs et tolrants quant nos incessantes demandes dexpertise de tel ou tel chapitre. Nous remercions particulirement Baruch Awerbuch, Sha Goldwasser, Leo Guibas, Tom Leighton, Albert Meyer, David Shmoys et Eva Tardos. Merci William Ang, Sally Bemus, Ray Hirschfeld et Mark Reinhold pour avoir permis nos machines (DEC Microvax, Apple Macintosh et Sparcstation Sun) de fonctionner sans heurts et pour avoir recompil TEX chaque fois que nous dpassions une limite de temps de compilation. Thinking Machines Corporation a partiellement permis Charles Leiserson de travailler ce livre alors quil tait absent du MIT. De nombreux collgues ont utilis les preuves de ce texte pour leur Cours dans dautres universits. Ils ont suggr bon nombre de corrections et de rvisions. Nous souhaitons notamment remercier Richard Beigel, Andrew Goldberg, Joan Lucas, Mark Overmars, Alan Sherman et Diane Souvaine. Parmi les enseignants qui nous assistent pour nos cours, beaucoup ont contribu de manire signicative au dveloppement de ce texte. Nous remercions particulirement Alan Baratz, Bonnie Berger, Aditi Dhagat, Burt Kaliski, Arthur Lent, Andrew Moulton, Marios Papaefthymiou, Cindy Phillips, Mark Reinhold, Phil Rogaway, Flavio Rose, Arie Rudich, Alan Sherman, Cliff Stein, Susmita Sur, Gregory Troxel et Margaret Tuttle. Nombreux sont ceux qui nous ont apport une assistance technique complmentaire mais prcieuse. Denise Sergent a pass de nombreuses heures dans les bibliothques du MIT, la recherche de rfrences bibliographiques. Maria Sensale, la bibliothcaire de notre salle de lecture fut toujours souriante et serviable. Laccs la bibliothque personnelle dAlbert Meyer nous a conomis de nombreuses heures pendant la rdaction des notes de chapitre. Shlomo Kipnis, Bill Niehaus et David Wilson ont valid les anciens exercices, en ont conu de nouveaux et ont annot leurs solutions. Marios Papaefthymiou et Gregory Troxel ont contribu lindex. Au l des ans, nos secrtaires Inna Radzihovsky, Denise Sergent, Gayle Sherman, et surtout Be Hubbard, Ont constamment soutenu ce projet, et nous les en remercions. Parmi les erreurs releves dans les premires preuves, beaucoup lont t par nos tudiants. Nous remercions particulirement Bobby Blumofe, Bonnie Eisenberg,
  • 25. Prface XXVII Raymond Johnson, John Keen, Richard Lethin, Mark Lillibridge, John Pezaris, Steve Ponzio, et Margaret Tuttle pour leur lecture attentive. Nos collgues ont galement effectu des relectures critiques de certains chapitres, ou donn des informations sur des algorithmes particuliers, et nous leur en sommes reconnaissants. Nous remercions particulirement Bill Aiello, Alok Aggarwal, Eric Bach, Vaek Chvtal, Richard Cole, Johan Hastad, Alex Ishii, David Johnson, Joe Kilian, Dina Kravets, Bruce Maggs, Jim Orlin, James Park, Thane Plambeck, Hershel Safer, Jeff Shallit, Cliff Stein, Gil Strang, Bob Tarjan et Paul Wang. Plusieurs de nos collgues nous ont aussi fourni gracieusement quelques problmes ; nous remercions notamment Andrew Goldberg, Danny Sleator et Umesh Vazirani. Nous avons eu plaisir travailler avec MIT Press et McGraw-Hill pendant la mise en forme de ce texte. Nous remercions particulirement Frank Satlow, Terry Ehling, Larry Cohen et Lorrie Lejeune de MIT Press et David Shapiro de McGraw-Hill pour leur encouragement, leur soutien et leur patience. Nous sommes particulirement reconnaissant Larry Cohen pour son exceptionnelle correction dpreuves. h) Remerciements pour la seconde dition c Dunod La photocopie non autorise est un dlit Quand nous demandmes Julie Sussman, P.P.A., de nous servir de correctrice technique pour cette seconde dition, nous ne savions pas que nous allions tomber sur loiseau rare. En plus de vrier le contenu technique, Julie a corrig avec ardeur notre prose. Cest pour nous une belle leon dhumilit que de voir le nombre derreurs que Julie a trouves dans nos premires preuves ; encore que, compte tenu du nombre derreurs quelle avait dceles dans la premire dition (aprs publication, hla), il ny a rien dtonnant cela. Qui plus est, Julie a sacri son emploi du temps personnel pour favoriser le ntre ; elle a mme relu des chapitres pendant des vacances aux Iles Vierges ! Julie, comment pourrions-nous vous remercier pour le travail incroyable que vous avez effectu ? La seconde dition a t prpare alors que les auteurs faisaient partie du dpartement dinformatique de Dartmouth College et du laboratoire dinformatique du MIT. Ces deux environnements ne pouvaient tre que stimulants, et nous remercions nos collgues pour leur aide. Des amis et des collgues, un peu partout dans le monde, nous ont aid, par leurs suggestions et leurs avis autoriss, a amliorer notre texte. Grand merci Sanjeev Arora, Javed Aslam, Guy Blelloch, Avrim Blum, Scot Drysdale, Hany Farid, Hal Gabow, Andrew Goldberg, David Johnson, Yanlin Liu, Nicolas Schabanel, Alexander Schrijver, Sasha Shen, David Shmoys, Dan Spielman, Gerald Jay Sussman, Bob Tarjan, Mikkel Thorup et Vijay Vazirani. De nombreux enseignants et collgues nous ont appris beaucoup de choses sur les algorithmes. Nous remercions tout particulirement nos professeurs Jon L. Bentley, Bob Floyd, Don Knuth, Harold Kuhn, H. T. Kung, Richard Lipton, Arnold Ross,
  • 26. XXVIII Prface Larry Snyder, Michael I. Shamos, David Shmoys, Ken Steiglitz, Tom Szymanski, va Tardos, Bob Tarjan et Jeffrey Ullman. Nous remercions, pour leur contribution, tous les assistants chargs de cours dalgorithmique au MIT et Dartmouth, dont Joseph Adler, Craig Barrack, Bobby Blumofe, Roberto De Prisco, Matteo Frigo, Igal Galperin, David Gupta, Raj D. Iyer, Nabil Kahale, Sarfraz Khurshid, Stavros Kolliopoulos, Alain Leblanc, Yuan Ma, Maria Minkoff, Dimitris Mitsouras, Alin Popescu, Harald Prokop, Sudipta Sengupta, Donna Slonim, Joshua A. Tauber, Sivan Toledo, Elisheva Werner-Reiss, Lea Wittie, Qiang Wu et Michael Zhang. Lassistance informatique nous a t fournie par William Ang, Scott Blomquist et Greg Shomo au MIT, et par Wayne Cripps, John Konkle et Tim Tregubov Dartmouth. Merci galement Be Blackburn, Don Dailey, Leigh Deacon, Irene Sebeda et Cheryl Patton Wu du MIT, et Phyllis Bellmore, Kelly Clark, Delia Mauceli, Sammie Travis, Deb Whiting et Beth Young de Dartmouth pour leur assistance administrative. Michael Fromberger, Brian Campbell, Amanda Eubanks, Sung Hoon Kim et Neha Narula nous ont aussi apport une assistance opportune Dartmouth. Nombreux sont celles et ceux qui ont eu la gentillesse de signaler des erreurs dans la premire dition. Merci aux personnes suivantes, dont chacune a t la premire signaler une erreur dissimule dans la premire dition : Len Adleman, Selim Akl, Richard Anderson, Juan Andrade-Cetto, Gregory Bachelis, David Barrington, Paul Beame, Richard Beigel, Margrit Betke, Alex Blakemore, Bobby Blumofe, Alexander Brown, Xavier Cazin, Jack Chan, Richard Chang, Chienhua Chen, Ien Cheng, Hoon Choi, Drue Coles, Christian Collberg, George Collins, Eric Conrad, Peter Csaszar, Paul Dietz, Martin Dietzfelbinger, Scot Drysdale, Patricia Ealy, Yaakov Eisenberg, Michael Ernst, Michael Formann, Nedim Fresko, Hal Gabow, Marek Galecki, Igal Galperin, Luisa Gargano, John Gately, Rosario Genario, Mihaly Gereb, Ronald Greenberg, Jerry Grossman, Stephen Guattery, Alexander Hartemik, Anthony Hill, Thomas Hofmeister, Mathew Hostetter, Yih-Chun Hu, Dick Johnsonbaugh, Marcin Jurdzinki, Nabil Kahale, Fumiaki Kamiya, Anand Kanagala, Mark Kantrowitz, Scott Karlin, Dean Kelley, Sanjay Khanna, Haluk Konuk, Dina Kravets, Jon Kroger, Bradley Kuszmaul, Tim Lambert, Hang Lau, Thomas Lengauer, George Madrid, Bruce Maggs, Victor Miller, Joseph Muskat, Tung Nguyen, Michael Orlov, James Park, Seongbin Park, Ioannis Paschalidis, Boaz Patt-Shamir, Leonid Peshkin, Patricio Poblete, Ira Pohl, Stephen Ponzio, Kjell Post, Todd Poynor, Colin Prepscius, Sholom Rosen, Dale Russell, Hershel Safer, Karen Seidel, Joel Seiferas, Erik Seligman, Stanley Selkow, Jeffrey Shallit, Greg Shannon, Micha Sharir, Sasha Shen, Norman Shulman, Andrew Singer, Daniel Sleator, Bob Sloan, Michael Sofka, Volker Strumpen, Lon Sunshine, Julie Sussman, Asterio Tanaka, Clark Thomborson, Nils Thommesen, Homer Tilton, Martin Tompa, Andrei Toom, Felzer Torsten, Hirendu Vaishnav, M. Veldhorst, Luca Venuti, Jian Wang, Michael Wellman, Gerry Wiener, Ronald Williams, David Wolfe, Jeff Wong, Richard Woundy, Neal Young, Huaiyuan Yu, Tian Yuxing, Joe Zachary, Steve Zhang, Florian Zschoke et Uri Zwick.
  • 27. c Dunod La photocopie non autorise est un dlit Prface XXIX Nombre de nos collgues ont fourni des compte-rendus dtaills ou ont rempli un long questionnaire. Merci donc Nancy Amato, Jim Aspnes, Kevin Compton, William Evans, Peter Gacs, Michael Goldwasser, Andrzej Proskurowski, Vijaya Ramachandran et John Reif. Nous remercions galement les personnes suivantes qui nous nous renvoy le questionnaire : James Abello, Josh Benaloh, Bryan BeresfordSmith, Kenneth Blaha, Hans Bodlaender, Richard Borie, Ted Brown, Domenico Cantone, M. Chen, Robert Cimikowski, William Clocksin, Paul Cull, Rick Decker, Matthew Dickerson, Robert Douglas, Margaret Fleck, Michael Goodrich, Susanne Hambrusch, Dean Hendrix, Richard Johnsonbaugh, Kyriakos Kalorkoti, Srinivas Kankanahalli, Hikyoo Koh, Steven Lindell, Errol Lloyd, Andy Lopez, Dian Rae Lopez, George Lucker, David Maier, Charles Martel, Xiannong Meng, David Mount, Alberto Policriti, Andrzej Proskurowski, Kirk Pruhs, Yves Robert, Guna Seetharaman, Stanley Selkow, Robert Sloan, Charles Steele, Gerard Tel, Murali Varanasi, Bernd Walter et Alden Wright. Nous aurions aim pouvoir rpondre toutes vos suggestions, mais cette seconde dition aurait d alors faire dans les 3000 pages ! A La seconde dition a t faite avec LTEX 2. Michael Downes a converti les maA A A cros LTEX pour les faire passer de LTEX classique LTEX 2 ; il a aussi converti les chiers texte pour quils utilisent les nouvelles macros. David Jones a fourni une A assistance sur LTEX 2. Les gures de la seconde dition ont t ralises par les auteurs laide de MacDraw Pro. Comme pour la premire dition, lindex a t compil avec Windex, qui est un programme C dvelopp par les auteurs ; la bibliographie a t prpare avec B IBTEX. Ayorkor Mills-Tettey et Rob Leathern ont aid la conversion des gures vers MacDraw Pro ; Ayorkor a, en outre, contrl notre bibliographie. Comme cela avait t le cas pour la premire dition, travailler avec The MIT Press et McGraw-Hill fut un vrai plaisir. Nos superviseurs, Bob Prior pour The MIT Press et Betsy Jones pour McGraw-Hill, ont support nos caprices et nous ont maintenu dans le droit chemin en maniant adroitement la carotte et le bton. Enn, nous remercions nos femmes (Nicole Cormen, Gail Rivest et Rebecca Ivry), nos enfants (Ricky, William et Debby Leiserson ; Alex et Christopher Rivest ; Molly, Noah et Benjamin Stein) et nos parents (Renee et Perry Cormen ; Jean et Mark Leiserson ; Shirley et Lloyd Rivest ; Irene et Ira Stein) pour leur amour et leur soutien pendant lcriture de ce livre. La patience et les encouragements de nos familles ont permis ce projet de voir le jour. Nous leur ddions affectueusement ce livre. T HOMAS H. C ORMEN C HARLES E. L EISERSON RONALD L. R IVEST C LIFFORD S TEIN Mai 2001 Hanover, New Hampshire Cambridge, Massachusetts Cambridge, Massachusetts Hanover, New Hampshire
  • 28. PARTIE 1 INTRODUCTION Cette partie prsente les fondamentaux qui doivent vous guider pour concevoir et analyser des algorithmes. Elle a pour objectif dexposer en douceur la manire de spcier les algorithmes, certaines stratgies de conception qui nous serviront tout au long de ce livre, ainsi que bon nombre des concepts essentiels sous-jacents lanalyse des algorithmes. Les parties suivantes de ce livre sappuieront sur toutes ces fondations. c Dunod La photocopie non autorise est un dlit Le chapitre 1 donne une prsentation gnrale des algorithmes et de leur place dans les systmes informatiques modernes. Ce chapitre dnit ce quest un algorithme et donne des exemples. Il signale aussi, au passage, que les algorithmes sont une technologie, au mme titre que les matriels, les interfaces utilisateur graphique, les systmes orients objet ou les rseaux. Au chapitre 2, nous verrons nos premiers algorithmes, lesquels rsolvent le problme qui consiste trier une suite de n nombres. Ils seront crits en un pseudo code qui, mme sil nest pas directement traduisible en quelque langage de programmation traditionnel que ce soit, rete la structure de lalgorithme de manire sufsamment claire pour quun programmeur comptent puisse le mettre en uvre dans le langage de son choix. Les algorithmes de tri que nous tudierons sont le tri par insertion, qui utilise une stratgie incrmentale, et le tri par fusion, qui utilise une technique rcursive baptise diviser pour rgner . Bien que la dure dexcution de chacun de ces algorithmes croisse avec la valeur de n, le taux de croissance nest pas le mme pour les deux algorithmes. Nous dterminerons ces temps dexcution au chapitre 2 et introduirons une notation trs pratique pour les exprimer.
  • 29. 2 Partie 1 Le chapitre 3 dnira plus formellement cette notation, que nous appellerons notation asymptotique. Il commencera par dnir plusieurs notations asymptotiques qui nous serviront borner, majorer et/ou minorer, les dures dexcution des algorithmes. Le reste du chapitre 3 consistera essentiellement en une prsentation de notations mathmatiques. Le but recherch est de garantir que les notations que vous employez concordent avec celles utilises dans cet ouvrage, et non de vous enseigner de nouveaux concepts mathmatiques. Le chapitre 4 approfondira la mthode diviser-pour-rgner, introduite au chapitre 2. En particulier, le chapitre 4 donnera des mthodes pour la rsolution des rcurrences, qui sont trs utiles pour dcrire les dures dexcution des algorithmes rcursifs. Une technique trs puissante ici est celle appele mthode gnrale , qui permet de rsoudre les rcurrences induites par les algorithmes de type diviser-pour-rgner. Une bonne partie du chapitre 4 sera consacre la dmonstration de la justesse de la mthode gnrale ; vous pouvez, sans inconvnient aucun, sauter cette dmonstration. Le chapitre 5 introduira lanalyse probabiliste et les algorithmes randomiss. Lanalyse probabiliste sert gnralement dterminer la dure dexcution dun algorithme dans le cas o, en raison de la prsence dune distribution probabiliste intrinsque, le temps dexcution peut varier pour diffrentes entres de la mme taille. Dans certains cas, nous supposerons que les entres obissent une distribution probabiliste connue, de sorte que nous ferons la moyenne des temps dexcution sur lensemble des entres possibles. Dans dautres cas, la distribution probabiliste ne viendra pas des entres, mais de choix alatoires faits pendant lexcution de lalgorithme. Un algorithme dont le comportement dpend non seulement de lentre, mais aussi de valeurs produites par un gnrateur de nombres alatoires est un algorithme randomis. Nous pouvons employer des algorithmes randomiss pour garantir une distribution probabiliste sur les entres, et ainsi garantir quaucune entre particulire nentrane systmatiquement de pitres performances, voire mme pour borner les taux derreur des algorithmes qui sont autoriss donner, dans une certaine limite, des rsultats errons. Les annexes AC renferment dautres sujets mathmatiques qui vous faciliteront la lecture de cet ouvrage. Vous avez certainement dj vu une bonne partie de ces notions (bien que les conventions de notation spciques que nous utilisons ici puissent, loccasion, diffrer de ce que vous connaissiez) ; vous pouvez donc considrer les annexes comme une sorte de rfrence. En revanche, la plupart des concepts prsents dans la partie 1 sont vraisemblablement indits pour vous. Tous les chapitres de la partie 1 et toutes les annexes ont t rdigs dans un esprit trs didactique.
  • 30. Chapitre 1 Rle des algorithmes en informatique Quest-ce quun algorithme ? En quoi ltude des algorithmes est-elle utile ? Quel est le rle des algorithmes par rapport aux autres technologies informatiques ? Ce chapitre a pour objectif de rpondre ces questions. c Dunod La photocopie non autorise est un dlit 1.1 ALGORITHMES Voici une dnition informelle du terme algorithme : procdure de calcul bien dnie qui prend en entre une valeur, ou un ensemble de valeurs, et qui donne en sortie une valeur, ou un ensemble de valeurs. Un algorithme est donc une squence dtapes de calcul qui transforment lentre en sortie. Lon peut aussi considrer un algorithme comme un outil permettant de rsoudre un problme de calcul bien spci. Lnonc du problme spcie, en termes gnraux, la relation dsire entre lentre et la sortie. Lalgorithme dcrit une procdure de calcul spcique permettant dobtenir cette relation entre/sortie. Supposons, par exemple, quil faille trier une suite de nombres dans lordre croissant. Ce problme, qui revient frquemment dans la pratique, offre une base fertile pour lintroduction de nombre de techniques de conception et doutils danalyse standard. Voici comment nous dnissons formellement le problme de tri : Entre : suite de n nombres a1 , a2 , ..., an . Sortie : permutation (rorganisation) a1 , a2 , ..., an de la suite donne en entre, de faon que a1 a2 an .
  • 31. 4 1 Rle des algorithmes en informatique Ainsi, partir de la suite 31, 41, 59, 26, 41, 58 , un algorithme de tri produit en sortie la suite 26, 31, 41, 41, 58, 59 . propos de la suite donne en entre, on parle dinstance du problme de tri. En gnral, une instance dun problme consiste en lentre (satisfaisant aux contraintes, quelles quelles soient, imposes dans lnonc du problme) requise par le calcul dune solution au problme. Le tri est une opration majeure en informatique (maints programmes lemploient comme phase intermdiaire), ce qui explique que lon ait invent un grand nombre dalgorithmes de tri. Lalgorithme optimal pour une application donne dpend, entre autres facteurs, du nombre dlments trier, de la faon dont les lments sont plus ou moins tris initialement, des restrictions potentielles concernant les valeurs des lments, ainsi que du type de priphrique de stockage utiliser : mmoire principale, disques ou bandes. Un algorithme est dit correct si, pour chaque instance en entre, il se termine en produisant la bonne sortie. Lon dit quun algorithme correct rsout le problme donn. Un algorithme incorrect risque de ne pas se terminer pour certaines instances en entre, voire de se terminer sur une rponse autre que celle dsire. Contrairement ce que lon pourrait croire, un algorithme incorrect peut savrer utile dans certains cas, si son taux derreur est susceptible dtre contrl. Nous en verrons un exemple au chapitre 31, quand nous tudierons des algorithmes servant dterminer les grands nombres premiers. En gnral, seuls nous intresseront toutefois les algorithmes corrects. Un algorithme peut tre spci en langage humain ou en langage informatique, mais peut aussi tre bas sur un systme matriel. Lunique obligation est que la spcication fournisse une description prcise de la procdure de calcul suivre. a) Quels sont les types de problme susceptibles dtre rsolus par des algorithmes ? Le tri nest absolument pas lunique problme pour lequel ont t invents des algorithmes. (Vous lavez sans dout devin rien quen voyant la taille de cet ouvrage.) Les applications concrtes des algorithmes sont innombrables, entre autres : Le projet du gnome humain a pour objectifs didentier les 100 000 gnes de lADN humain, de dterminer les squences des 3 milliards de paires de bases chimiques qui constituent lADN humain, de stocker ces informations dans des bases de donnes et de dvelopper des outils danalyse de donnes. Chacune de ces tapes exige des algorithmes trs labors. Les solutions aux divers problmes sous-jacents sortent du cadre de ce livre, mais les concepts traits dans nombre de chapitres de cet ouvrage sont utiliss pour rsoudre ces problmes de biologie, permettant ainsi aux scientiques de faire leur travail tout en utilisant les ressources avec efcacit. Cela fait gagner du temps, aussi bien au niveau des hommes que des machines, et de largent, du fait que les expriences de laboratoire peuvent ainsi fournir davantage dinformations.
  • 32. 1.1 Algorithmes 5 Internet permet des gens parpills un peu partout dans le monde daccder rapidement toutes sortes de donnes. Tout cela repose sur des algorithmes intelligents qui permettent de grer et manipuler de grosses masses de donnes. Exemples de problmes rsoudre : recherche de routes optimales pour lacheminement des donnes (ce genre de technique sera prsent au chapitre 24) ; utilisation dun moteur de recherche pour trouver rapidement les pages contenant tel ou tel type de donnes (les techniques affrentes seront vues aux chapitres 11 et 32). Le commerce lectronique permet de ngocier et changer, de manire lectronique, biens et services. Le commerce lectronique exige que lon prserve la condentialit de donnes telles que numros de carte de crdit, mots de passe et relevs bancaires. La cryptographie cl publique et les signatures numriques (traites au chapitre 31), qui font partie des technologies fondamentales employes dans ce contexte, sappuient sur des algorithmes numriques et sur la thorie des nombres. Dans lindustrie et le commerce, il faut souvent optimiser lallocation de ressources limites. Une compagnie ptrolire veut savoir o placer ses puits de faon maximiser les prots escompts. Un candidat la prsidence veut savoir dans quels supports publicitaires il doit investir pour maximiser ses chances dlection. Une compagnie arienne dsire raliser laffectation des quipages aux vols de telle faon que les cots soient minimiss, les vols assurs sans dfaillance et la lgislation respecte. Un fournisseur de services Internet veut savoir o placer des ressources supplmentaires pour desservir ses clients de manire plus efcace. Voil des exemples de problmes susceptibles dtre rsolus par la programmation linaire, que nous tudierons au chapitre 29. c Dunod La photocopie non autorise est un dlit Certains dtails de ces exemples sortent du cadre de cet ouvrage, mais nous donnerons des techniques qui sappliquent ces problmes et catgories de problme. Nous montrerons aussi, dans ce livre, comment rsoudre maints problmes concrets, dont les suivants : Soit une carte routire sur laquelle sont indiques toutes les distances entre intersections adjacentes ; il faut dterminer le trajet le plus court entre deux intersections. Le nombre ditinraires peut tre norme, mme si lon na pas ditinraire qui se recoupe. Comment trouver le trajet le plus court parmi tous les trajets possibles ? Ici, nous modlisons la carte (qui, elle-mme, modlise les routes relles) sous la forme dun graphe (sujet trait au chapitre 10 et lannexe B), puis nous cherchons dterminer le chemin le plus court entre deux sommets du graphe. Le chapitre 24 montrera comment rsoudre ce problme de manire efcace. Soit une suite A1 , A2 , . . . , An de n matrices, dont nous voulons calculer le produit A1 A2 . . . An . La multiplication matricielle tant associative, il existe plusieurs ordres licites pour calculer le produit. Par exemple, si n = 4, nous pourrions faire les multiplications comme si le produit tait parenths de lune quelconque des faons suivantes : (A1 (A2 (A3 A4 ))), (A1 ((A2 A3 )A4 )), ((A1 A2 )(A3 A4 )), ((A1 (A2 A3 ))A4 ) ou (((A1 A2 )A3 )A4 ). Si toutes les matrices sont carres (et ont donc la mme taille),
  • 33. 1 Rle des algorithmes en informatique 6 lordre des multiplications naffecte pas la dure de calcul du produit. Si, en revanche, les matrices sont de tailles diffrentes (ces tailles tant, toutefois, compatibles au niveau de la multiplication matricielle), alors lordre des multiplications peut faire une trs grosse diffrence. Le nombre dordres potentiels de multiplication tant exponentiel en n, essayer tous les ordres possibles risque de demander beaucoup de temps. Nous verrons au chapitre 15 comment utiliser la technique gnrale connue sous le nom de programmation dynamique pour rsoudre ce problme de faon beaucoup plus efcace. Soit lquation ax = b (mod n) dans laquelle a, b et n sont des entiers ; nous voulons trouver tous les entiers x, modulo n, qui satisfont cette quation. Il peut y avoir zro, une ou plusieurs solutions. Nous pourrions essayer de faire x = 0, 1, . . . , n1 dans lordre, mais le chapitre 31 donnera une mthode plus efcace. Soient n points du plan, dont nous voulons dterminer lenveloppe convexe. Cette enveloppe est le plus petit polygone convexe qui contient les points. Intuitivement, nous pouvons nous reprsenter chaque point comme un clou plant dans une planche. Lenveloppe convexe serait alors reprsente par un lastique qui entoure tous les clous. Chaque clou autour duquel senroule llastique est un sommet de lenveloppe convexe. (Voir la gure 33.6 pour un exemple.) Nimporte lequel des 2n sous-ensembles des points pourrait correspondre aux sommets de lenveloppe convexe. Seulement, il ne suft pas de savoir quels sont les points qui sont des sommets de lenveloppe ; il faut aussi connatre lordre dans lequel ils apparaissent. Il existe donc bien des choix pour les sommets de lenveloppe convexe. Le chapitre 33 donnera deux bonnes mthodes pour la dtermination de lenveloppe convexe. Ces numrations sont loin dtre exhaustives (comme vous lavez probablement devin en soupesant ce livre), mais elles tmoignent de deux caractristiques que lon retrouve dans bon nombre dalgorithmes intressants : 1) Il existe beaucoup de solutions priori, mais la plupart dentre elles ne sont pas celles que nous voulons. Trouver une solution qui convienne vraiment, voil qui nest pas toujours vident. 2) Il y a des applications concrtes. Parmi les problmes prcdemment numrs, les chemins les plus courts fournissent les exemples les plus lmentaires. Une entreprise de transport, par exemple une socit de camionnage ou la SNCF, a intrt trouver les trajets routiers ou ferroviaires les plus courts, car cela diminue les cots de main duvre et dnergie. Un nud de routage Internet peut avoir dterminer le chemin le plus court travers le rseau pour minimiser le dlai dacheminement dun message. b) Structures de donnes Cet ouvrage prsente plusieurs structures de donnes. Une structure de donnes est un moyen de stocker et organiser des donnes pour faciliter laccs ces donnes et leur modication. Il ny a aucune structure de donnes qui rponde tous les
  • 34. 1.1 Algorithmes 7 besoins, de sorte quil importe de connatre les forces et limitations de plusieurs de ces structures. c) Technique Vous pouvez vous servir de cet ouvrage comme dun livre de recettes pour algorithmes, mais vous risquez tt ou tard de tomber sur un problme pour lequel il nexiste pas dalgorithme publi (cest le cas, par exemple, de nombre des exercices et problmes donns dans ce livre !). Cet ouvrage vous enseignera des techniques de conception et danalyse dalgorithme, de faon que vous puissiez crer des algorithmes de votre cru, prouver quils fournissent la bonne rponse et comprendre leur efcacit. d) Problmes difciles Une bonne partie de ce livre concerne les algorithmes efcaces. Notre mesure habituelle de lefcacit est la vitesse, cest--dire la dure que met un algorithme produire ses rsultats. Il existe des problmes, cependant, pour lesquels lon ne connat aucune solution efcace. Le chapitre 34 tudie un sous-ensemble intressant de ces problmes, connus sous lappellation de problmes NP-complets. c Dunod La photocopie non autorise est un dlit En quoi les problmes NP-complets sont-ils intressants ? Primo, lon na jamais trouv dalgorithme efcace pour un problme NP-complet, mais personne na jamais prouv quil ne peut pas exister dalgorithme efcace pour un problme. Autrement dit, lon ne sait pas sil existe ou non des algorithmes efcaces pour les problmes NP-complets. Secundo, lensemble des problmes NP-complets offre la proprit remarquable suivante : sil existe un algorithme efcace pour lun quelconque de ces problmes, alors il existe des algorithmes efcaces pour tous. Cette relation entre les problmes NP-complets rend dautant plus frustrante labsence de solutions efcaces. Tertio, plusieurs problmes NP-complets ressemblent, sans tre identiques, des problmes pour lesquels nous connaissons des algorithmes efcaces. Un petit changement dans lnonc du problme peut entraner un changement majeur au niveau de lefcacit du meilleur algorithme connu. Il est intressant davoir quelques connaissances concernant les problmes NPcomplets tant donn que, chose surprenante, certains dentre eux reviennent souvent dans les applications concrtes. Si lon vous demande de concocter un algorithme efcace pour un problme NP-complet, vous risquez de perdre pas mal de temps chercher pour rien. Si vous arrivez montrer que le problme est NP-complet, vous pourrez alors consacrer votre temps dvelopper un algorithme efcace fournissant une solution qui est bonne sans tre optimale. titre dexemple concret, prenons le cas dune entreprise de camionnage ayant un dpt central. Chaque jour, elle charge le camion au dpt puis lenvoie faire des livraisons plusieurs endroits. la n de la journe, le camion doit revenir au dpt de faon pouvoir tre recharg le jour suivant. Pour rduire les cots, lentreprise
  • 35. 8 1 Rle des algorithmes en informatique veut choisir un ordre de livraisons tel que la distance parcourue par le camion soit minimale. Ce problme, qui nest autre que le fameux problme du voyageur de commerce , est un problme NP-complet. Il na pas dalgorithme efcace connu. Sous certaines hypothses, cependant, il existe des algorithmes efcaces donnant une distance globale qui nest pas trop loigne de la distance minimale. Le chapitre 35 prsente ce genre dalgorithmes, dits algorithmes dapproximation . Exercices 1.1.1 Donnez un exemple concret qui intgre lun des problmes suivants : tri, optimisation de lordre de multiplication des matrices, dtermination de lenveloppe convexe. 1.1.2 part la vitesse, quest-ce qui pourrait servir mesurer lefcacit dans un contexte concret ? 1.1.3 Slectionnez une structure de donnes que vous avez dj vue, puis tudiez ses avantages et ses inconvnients. 1.1.4 En quoi le problme du chemin minimal et celui du voyageur de commerce, prcdemment mentionns, se ressemblent-ils ? En quoi sont-ils diffrents ? 1.1.5 Trouvez un problme concret pour lequel seule conviendra la solution optimale. Trouvez ensuite un problme pour lequel une solution approche pourra faire laffaire. 1.2 ALGORITHMES EN TANT QUE TECHNOLOGIE Supposez que les ordinateurs soient inniment rapides et que leurs mmoires soient gratuites. Faudrait-il encore tudier les algorithmes ? Oui, ne serait-ce que pour montrer que la solution ne boucle pas indniment et quelle se termine avec la bonne rponse. Si les ordinateurs taient inniment rapides, nimporte quelle mthode correcte de rsolution dun problme ferait laffaire. Vous voudriez sans doute que votre solution entre dans le cadre dune bonne mthodologie dingnierie (cest--dire quelle soit bien conue et bien documente), mais vous privilgierez le plus souvent la mthode qui est la plus simple mettre en uvre. Si rapides que puissent tre les ordinateurs, ils ne sont pas inniment rapides. Si bon march que puisse tre la mmoire, elle nest pas gratuite. Le temps machine est donc une ressource limite, et il en est de mme de lespace mmoire. Il faut utiliser ces ressources avec parcimonie, et des algorithmes performants, en termes de dure et dencombrement, vous aideront atteindre cet objectif.
  • 36. 1.2 Algorithmes en tant que technologie 9 a) Efcacit Il arrive souvent que des algorithmes conus pour rsoudre le mme problme diffrent fortement entre eux en termes defcacit. Ces diffrences peuvent tre bien plus importantes que celles dues au matriel et au logiciel. c Dunod La photocopie non autorise est un dlit titre dexemple, au chapitre 2 nous verrons deux algorithmes de tri. Le premier, appel tri par insertion, prend un temps approximativement gal c1 n2 pour trier n lments, c1 tant une constante indpendante de n. La dure du tri est donc, grosso modo, proportionnelle n2 . Le second, appel tri par fusion, prend un temps approximativement gal c2 n lg n, o lg n dsigne log2 n et c2 est une autre constante indpendante, elle aussi, de n. Le tri par insertion a gnralement un facteur constant infrieur celui du tri par fusion, de sorte que c1 < c2 . Nous verrons que les facteurs constants peuvent tre beaucoup moins signicatifs, au niveau de la dure dexcution, que la dpendance par rapport au nombre n de donnes trier. L o le tri par fusion a un facteur lg n dans son temps dexcution, le tri par insertion a un facteur n, qui est beaucoup plus grand. Le tri par insertion est gnralement plus rapide que le tri par fusion pour de petits nombres de donnes mais, ds que le nombre n dlments trier devient sufsamment grand, lavantage du tri par fusion (lg n contre n) fait plus que compenser la diffrence entre les facteurs constants. Mme si c1 est trs infrieur c2 , il y a toujours un palier au-del duquel le tri par fusion devient plus rapide. Pour avoir un exemple concret, comparons un ordinateur rapide (ordinateur A) excutant un tri par insertion et un ordinateur lent (ordinateur B) excutant un tri par fusion. Ces deux machines doivent chacune trier un tableau dun million de nombres. Supposez que lordinateur A excute un milliard dinstructions par seconde et que lordinateur B nexcute que dix millions dinstructions par seconde, de sorte que lordinateur A est 100 fois plus rapide que lordinateur B en termes de puissance de calcul brute. Pour rendre la diffrence encore plus sensible, supposez que le meilleur programmeur du monde crive le tri par insertion en langage machine pour lordinateur A et que le code rsultant demande 2n2 instructions pour trier n nombres. (Ici, c1 = 2.) Le tri par fusion, en revanche, est programm pour lordinateur B par un programmeur mdiocre utilisant un langage de haut niveau avec un compilateur peu performant, de sorte que le code rsultant demande 50n lg n instructions (donc, c2 = 50). Pour trier un million de nombres, lordinateur A demande 2(106 )2 instructions = 2 000 secondes, 109 instructions/seconde alors que lordinateur B demande 50106 lg 106 instructions 100 secondes, 107 instructions/seconde Avec un algorithme dont le temps dexcution crot plus lentement, mme si le compilateur est mdiocre la machine B tourne 20 fois plus vite que la machine
  • 37. 10 1 Rle des algorithmes en informatique A ! Lavantage du tri par fusion ressort encore plus si nous trions dix millions de nombres : l o le tri par insertion demande environ 2,3 jours, le tri par fusion prend moins de 20 minutes. En gnral, plus la taille du problme augmente et plus augmente aussi lavantage relatif du tri par fusion. b) Algorithmes et autres technologies Lexemple prcdent montre que les algorithmes, linstar des matriels informatiques, sont une technologie. Les performances globales du systme dpendent autant des algorithmes que des matriels. Comme toutes les autres technologies informatiques, les algorithmes ne cessent de progresser. Lon peut se demander si les algorithmes sont vraiment si importants que cela sur les ordinateurs modernes, compte tenu de ltat davancement dautres technologies telles que horloges ultra-rapides, pipelines et architectures superscalaires, interfaces utilisateur graphiques conviviales et intuitives, systmes orients objet, et technologies de rseau local et de rseau tendu. La rponse est oui. Mme si certaines applications nexigent pas explicitement dalgorithmes au niveau de lapplication elle-mme (cest le cas, par exemple, de certaines applications simples bases sur le web), la plupart intgrent une certaine dose intrinsque dalgorithmes. Prenez le cas dun service bas sur le web qui dtermine des trajets pour aller dun endroit un autre. (Ce genre de service existe dj lheure o nous crivons ces lignes.) Sa mise en uvre exige des matriels rapides, une interface utilisateur graphique, des technologies de rseau tendu, voire des fonctionnalits objet. cela sajoutent des algorithmes pour certains traitements tels que recherche ditinraires (utilisant vraisemblablement un algorithme de chemin minimal), dessin de cartes et interpolation dadresses. Qui plus est, mme une application qui nemploie pas dalgorithmes au niveau de lapplication elle-mme sappuie indirectement sur une foule dalgorithmes. Lapplication sexcute sur des matriels performants ? La conception de ces matriels a utilis des algorithmes. Lapplication tourne par dessus des interfaces graphiques ? Toutes les interfaces utilisateur graphiques reposent sur des algorithmes. Lapplication fonctionne en rseau ? Le routage sappuie fondamentalement sur des algorithmes. Lapplication a t crite dans un langage autre que du code machine ? Alors, elle a t traduite par un compilateur, un interprteur ou un assembleur, toutes ces belles choses faisant un usage intensif dalgorithmes. Les algorithmes sont au cur de la plupart des technologies employes dans les ordinateurs modernes. Enn, avec les capacits sans cesse accrues des ordinateurs, ces derniers traitent des problmes de plus en plus vastes. Comme nous lavons vu dans la comparaison
  • 38. Notes 11 entre le tri par insertion et le tri par fusion, cest avec les problmes de grande taille que les diffrences defcacit entre algorithmes sont les plus agrantes. Possder une base solide en algorithmique, voil qui fait toute la diffrence entre le programmeur dlite et le programmeur lambda. Les technologies informatiques modernes permettent de faire certaines tches mme si lon ne sy connat gure en algorithmes ; mais avec une bonne formation en algorithmique, lon peut aller beaucoup, beaucoup plus loin. Exercices 1.2.1 Donnez un exemple dapplication exigeant des algorithmes intrinsques, puis discutez les fonctions des algorithmes concerns. 1.2.2 On veut comparer les implmentations du tri par insertion et du tri par fusion sur la mme machine. Pour un nombre n dlments trier, le tri par insertion demande 8n2 tapes alors que le tri par fusion en demande 64n lg n. Quelles sont les valeurs de n pour lesquelles le tri par insertion lemporte sur le tri par fusion ? 1.2.3 Quelle est la valeur minimale de n pour laquelle un algorithme dont le temps dexcution est 100n2 sexcute plus vite quun algorithme dont le temps dexcution est 2n sur la mme machine ? PROBLMES c Dunod La photocopie non autorise est un dlit 1.1. Comparaison de temps dexcution Pour chaque fonction f (n) et pour chaque dure t du tableau suivant, dterminez la taille maximale n dun problme susceptible dtre rsolu dans le temps t, en supposant que lalgorithme mette f (n) microsecondes pour traiter le problme. 1 1 1 1 1 1 1 seconde minute heure jour mois an sicle lg n n n n lg n n2 n3 2n n!
  • 39. 12 1 Rle des algorithmes en informatique NOTES Il existe nombre de textes excellents sur le thme gnral des algorithmes, dont les ouvrages de Aho, Hopcroft et Ullman [5, 6], Baase et Van Gelder [26], Brassard et Bratley [46, 47], Goodrich et Tamassia [128], Horowitz, Sahni et Rajasekaran [158], Kingston [179], Knuth [182, 183, 185], Kozen [193], Manber [210], Mehlhorn [217, 218, 219], Purdom et Brown [252], Reingold, Nievergelt et Deo [257], Sedgewick [269], Skiena [280] et Wilf [315]. Certains des aspects plus concrets de la conception des algorithmes sont traits par Bentley [39, 40] et Gonnet [126]. Vous trouverez aussi une introduction lalgorithmique dans les ouvrages intituls Handbook of Theoretical Computer Science, Volume A [302] et CRC Handbook on Algorithms and Theory of Computation [24]. Enn, vous trouverez des prsentations dalgorithmes utiliss en biologie informatique dans les manuels de Guseld [136], Pevzner [240], Setubal et Medinas [272] et Waterman [309].
  • 40. Chapitre 2 c Dunod La photocopie non autorise est un dlit Premiers pas Ce chapitre a pour but de vous familiariser avec la dmarche que nous adopterons dans ce livre quand il sagira de rchir la conception et lanalyse des algorithmes. On peut le lire indpendamment de la suite, bien quil fasse plusieurs fois rfrence des notions qui seront abordes dans les chapitres 3 et 4. (Il contient aussi plusieurs sommations que lannexe A montrera comment rsoudre). Nous commencerons par tudier lalgorithme du tri par insertion, an de rsoudre la problmatique du tri expose au chapitre 1. Nous introduirons un pseudo code qui ne devrait pas surprendre le lecteur ayant dj pratiqu la programmation, et qui nous servira spcier nos algorithmes. Aprs avoir dcrit en pseudo code lalgorithme du tri par insertion, nous montrerons quil fait bien ce quon attend de lui et nous analyserons son temps dexcution. Lanalyse permettra dintroduire une notation qui met en valeur la faon dont le temps dexcution crot avec le nombre dlments trier. Aprs avoir tudi le tri par insertion, nous prsenterons le paradigme diviser pour rgner pour la conception dalgorithmes, technique qui nous servira dvelopper lalgorithme du tri par fusion. Nous terminerons par lanalyse du temps dexcution du tri par fusion. 2.1 TRI PAR INSERTION Notre premier algorithme, savoir le tri par insertion, rsout la problmatique du tri expose au chapitre 1 : Entre : Suite de n nombres a1 , a2 , . . . , an .
  • 41. 2 Premiers pas 14 Sortie : permutation (rorganisation) a1 , a2 , . . . , an de la suite donne en entre, de faon que a1 a2 an . Les nombres trier sont parfois appels cls. Dans cet ouvrage, nous exprimerons gnralement les algorithmes sous la forme de programmes crits en un pseudo code qui, certains gards, rappelle C, Pascal ou Java. Si vous connaissez dj lun de ces langages, vous naurez gure de mal lire nos algorithmes. Ce qui diffrencie le pseudo code du vrai code cest que, avec le pseudo code nous employons lcriture qui nous semble tre la plus claire et la plus concise pour spcier lalgorithme ; ne soyez donc pas surpris de voir apparatre un mlange de franais et de vrai code. Autre diffrence entre pseudo code et vrai code : le pseudo code ne se soucie pas, en principe, de problmes dingnierie logicielle tels quabstraction des donnes, modularit, traitement derreur, etc. Cela permet au pseudo code de reter plus clairement la substantique moelle de lalgorithme. Nous commencerons par le tri par insertion, qui est un algorithme efcace quand il sagit de trier un petit nombre dlments. Le tri par insertion sinspire de la manire dont la plupart des gens tiennent des cartes jouer. Au dbut, la main gauche du joueur est vide et ses cartes sont poses sur la table. Il prend alors sur la table les cartes, une par une, pour les placer dans sa main gauche. Pour savoir o placer une carte dans son jeu, le joueur la compare avec chacune des cartes dj prsentes dans sa main gauche, en examinant les cartes de la droite vers la gauche, comme le montre la gure 2.1. A tout moment, les cartes tenues par la main gauche sont tries ; ces cartes taient, lorigine, les cartes situes au sommet de la pile sur la table. 10 4 5 7 10 5 2 4 7 2 Figure 2.1 Tri de cartes jouer, via tri par insertion. Notre pseudo-code pour le tri par insertion se prsente sous la forme dune procdure appele T RI -I NSERTION. Elle prend comme paramtre un tableau A[1 . . n] qui
  • 42. 2.1 Tri par insertion 15 contient une squence trier, de longueur n. (Dans le code, le nombre n dlments de A est not longueur[A]). Les nombres donns en entre sont tris sur place : ils sont rorganiss lintrieur du tableau A, avec tout au plus un nombre constant dentre eux stock lextrieur du tableau tout instant. Lorsque T RI -I NSERTION se termine, le tableau dentre A contient la squence de sortie trie. T RI -I NSERTION(A) 1 pour j 2 longueur[A] 2 faire cl A[j] 3 Insre A[j] dans la squence trie A[1 . . j 1]. 4 ij1 5 tant que i > 0 et A[i] > cl 6 faire A[i + 1] A[i] 7 ii1 8 A[i + 1] cl a) Invariants de boucle et validit du tri par insertion 1 2 3 4 5 6 (a) 5 2 4 6 1 3 1 2 3 4 5 6 (d) 2 4 5 6 1 3 1 2 3 4 5 6 (b) 2 5 4 6 1 3 1 2 3 4 5 6 (e) 1 2 4 5 6 3 1 2 3 4 5 6 (c) 2 4 5 6 1 3 1 2 3 4 5 6 (f) 1 2 3 4 5 6 c Dunod La photocopie non autorise est un dlit Figure 2.2 Fonctionnement de T RI -I NSERTION sur le tableau A = 5, 2, 4, 6, 1, 3 . Les indices apparaissent au-dessus des cases, les valeurs du tableau apparaissant dans les cases. (a)(e) Itrations de la boucle pour des lignes lines 18. chaque itration, la case noire renferme la cl lue dans A[j] ; cette cl est compare aux valeurs des cases grises situes sa gauche (test en ligne 5). Les ches grises montrent les dplacements des valeurs dune position vers la droite (ligne 6), alors que les ches noires indiquent vers o sont dplaces les cls (ligne 8). (f)Tableau tri nal. La gure 2.2 illustre le fonctionnement de cet algorithme pour A = 5, 2, 4, 6, 1, 3 . Lindice j indique la carte courante en cours dinsertion dans la main. Au dbut de chaque itration de la boucle pour extrieure , indicie par j, le sous-tableau compos des lments A[1 . . j 1] correspond aux cartes qui sont dj dans la main, alors que les lments A[j + 1 . . n] correspondent aux cartes qui sont encore sur la table. En fait, les lments A[1 . . j 1] sont les lments qui occupaient initialement les positions 1 j 1, mais qui depuis ont t tris. Nous utiliserons ces proprits de A[1 . . j 1] pour dnir ce que lon appelle, de manire plus formelle, un invariant de boucle : Au dbut de chaque itration de la boucle pour des lignes18, le sous-tableau A[1 . . j 1] se compose des lments qui occupaient initialement les positions A[1 . . j 1] mais qui sont maintenant tris.
  • 43. 2 Premiers pas 16 Les invariants de boucle nous aideront comprendre pourquoi un algorithme est correct. Nous devons montrer trois choses, concernant un invariant de boucle : Initialisation : Il est vrai avant la premire itration de la boucle. Conservation : Sil est vrai avant une itration de la boucle, il le reste avant litration suivante. Terminaison : Une fois termine la boucle, linvariant fournit une proprit utile qui aide montrer la validit de lalgorithme. Si les deux premires proprits sont vries, alors linvariant est vrai avant chaque itration de la boucle. Notez la ressemblance avec la rcurrence mathmatique dans laquelle, pour dmontrer quune proprit est vraie, vous montrez, primo quelle est vraie pour une valeur initiale, secundo que, si elle est vraie pour le rang N, alors elle lest pour le rang N + 1 (phase inductive). La troisime proprit est peut-tre la plus importante, vu que nous utilisons linvariant de boucle pour prouver la validit de lalgorithme. Elle diffre aussi de lusage habituel de la rcurrence mathmatique, dans laquelle la phase inductive se rpte indniment ; ici, on arrte linduction quand la boucle se termine. Voyons comment ces proprits sappliquent au tri par insertion. Initialisation : Commenons par montrer que linvariant est vri avant la premire itration de la boucle, quand j = 2.(1) Le sous-tableau A[1 . . j1] se compose donc uniquement de llment A[1] qui est, en fait, llment originel de A[1]. En outre, ce sous-tableau est tri (cest une trivialit), ce qui montre bien que linvariant est vri avant la premire itration de la boucle. Conservation : Passons ensuite la deuxime proprit : montrer que chaque itration conserve linvariant. De manire informelle, le corps de la boucle pour extrieure fonctionne en dplaant A[j 1], A[j 2], A[j 3], etc. dune position vers la droite jusqu ce quon trouve la bonne position pour A[j] (lignes 47), auquel cas on insre la valeur de A[j] (ligne 8). Un traitement plus formel de la deuxime proprit nous obligerait formuler et prouver un invariant pour la boucle tant que intrieure . Pour linstant, nous ne nous encombrerons pas dun tel formalisme et nous nous appuierons uniquement sur notre analyse informelle pour montrer que la deuxime proprit est vrie pour la boucle extrieure. Terminaison : Enn, voyons ce qui se passe quand la boucle se termine. Pour le tri par insertion, la boucle pour extrieure prend n quand j dpasse n, cest--dire quand j = n+1. En substituant n+1 j dans la formulation de linvariant de boucle, lon a que le sous-tableau A[1 . . n] se compose des lments qui appartenaient originellement A[1 . . n] mais qui ont t tris depuis lors. Or, le sous-tableau (1) Quand la boucle est une boucle pour, le moment o nous contrlons linvariant avant la premire itration se situe juste aprs lassignation initiale la variable servant de compteur de boucle et juste avant le premier test dans len-tte de boucle. Dans le cas de T RI -I NSERTION, cet instant se situe aprs affectation de la valeur 2 la variable j mais avant le premier test vriant si j longueur[A].
  • 44. 2.1 Tri par insertion 17 A[1 . . n] nest autre que le tableau complet ! Par consquent, le tableau tout entier est tri, et donc lalgorithme est correct. Nous reverrons plus loin dans ce chapitre, ainsi que dans dautres chapitres, cet emploi des invariants de boucle pour justier la validit des algorithmes. b) Conventions concernant le pseudo code Nous adopterons les conventions suivantes pour le pseudo code. 1) Lindentation indique une structure de bloc. Par exemple le corps de la boucle pour qui commence la ligne 1 se compose des lignes 28, et le corps de la boucle tant que qui commence la ligne 5 contient les lignes 67 mais pas la ligne 8. Notre style dindentation sapplique galement aux instructions si-alors-sinon. Lemploi de lindentation, au lieu dindicateurs du genre dbut et n,pour matrialiser les blocs rduit sensiblement lencombrement tout en prservant, voire amliorant, la clart. (2) . 2) Les boucles tant que, pour et rpter, ainsi que tests si, alors et sinon ont la mme signication quen Pascal. (3) Il existe, toutefois, une diffrence subtile concernant les boucles pour : en Pascal la valeur de la variable servant de compteur de boucle est indnie la sortie de la boucle, alors que dans ce livre le compteur de boucle conserve sa valeur aprs la n de la boucle. Ainsi donc, juste aprs une boucle pour, la valeur du compteur de boucle est la valeur immdiatement suprieure la limite de bouclage. Nous avons utilis cette proprit dans notre dmonstration de la conformit du tri par insertion. Len-tte de la boucle pour, en ligne 1, est pour j 2 longueur[A] ; donc, quand la boucle se termine, j = longueur[A] + 1 (ou, de manire quivalente, j = n + 1, puisque n = longueur[A]). 3) Le symbole indique que le reste de la ligne est un commentaire. c Dunod La photocopie non autorise est un dlit 4) Une affectation multiple de la forme i j e affecte aux deux variables i et j la valeur de lexpression e ; on la considre comme quivalente laffectation j e suivie de laffectation i j. 5) Les variables comme i, j et cl sont locales la procdure donne. Nous nutiliserons pas de variables globales, sauf indication explicite. 6) On accde aux lments dun tableau via le nom du tableau suivi de lindice entre crochets. Ainsi, A[i] reprsente le i-me lment du tableau A. La notation . . indique une plage de