-
Extrait du Cours :Ce polycopié rassemble les cours et travaux dirigés (avec corrigés) du module Algorithmique de l’ENS Lyon. A l’origine prévu pour la première année du Magistère d’Informatique, le module s’intègre désormais dans la troisième année de la Licence d’Informatique. Et dire que personne ne s’est rendu compte du changement!Cela fait à peine dix ans que j’enseigne ce cours. A défaut de changer le contenu (pour faire quoi d’autre ?) ou d’utiliser autre chose que le tableau et la craie (idem ?), je change les irrésistibles traits d’humour qui font tout le charme de ces séances du Mercredi (l’horaire ne change pas non plus). Et j’use toute une batterie de TD-men and women, lesquels ont apporté leur contribution au fil des ans, construisant ou améliorant des séances de travaux dirigés. Je les remercie tous sincèrement, par ordre d’apparition : Odile Millet-Botta, Tanguy Risset, Alain Darte, Bruno Durand, Frédéric Vivien, Jean-Christophe Dubacq, Olivier Bodini, Daniel Hirschkoff, Matthieu Exbrayat, Natacha Portier, Emmanuel Hyon, Eric Thierry, Michel Morvan et Yves Caniou.Sans aucune pression ou presque, Yves Caniou et Eric Thierry ont réussi à se motiver pour rassembler les TD. L’année précédente, j’avais rassemblé les cours. Enfin, quand on dit rassembler, c’est surtout les gentils étudiants-scribes qui rassemblent, en tapotant de leurs doigts agiles la quintessence de notre enseignement inégalable.Algorithme Cours en pdfTable des Matières :1 Introduction : calcul de x1.1 Énoncé du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2 Algorithme naïf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3 Méthode binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4 Méthode des facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.5 Arbre de Knuth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.6 Résultats sur la complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.8 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Diviser pour régner 192.1 Algorithme de Strassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2 Produit de deux polynômes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.3 Master theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.4 Résolution des récurrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.4.1 Résolution des récurrences homogènes . . . . . . . . . . . . . . . . . . . . 232.4.2 Résolution des récurrences avec second membre . . . . . . . . . . . . . . . 232.5 Multiplication et inversion de matrices . . . . . . . . . . . . . . . . . . . . . . . . 242.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.7 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Programmation dynamique 353.1 Pièces de Monnaies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.2 Le problème du sac à dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.2.1 En glouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363.2.2 Par programmation dynamique . . . . . . . . . . . . . . . . . . . . . . . . 363.3 Quelques exemples de programmation dynamique . . . . . . . . . . . . . . . . . . 373.3.1 Chaînes de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.3.2 Plus longue sous-suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.3.3 Location de skis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.5 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Algorithmes gloutons 514.1 Exemple du gymnase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514.2 Coloriage d’un graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524.2.1 Algorithme glouton 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.2.2 Algorithme glouton 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.2.3 Graphe d’intervalles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.2.4 Algorithme de Brelaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.3 Théorie des matroïdes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544.3.1 Matroïdes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.3.2 Algorithme glouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.4 Ordonnancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574.6 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 Tri 635.1 Tri rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.1.1 Coût . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.1.2 Médiane en temps linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.2 Tri fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.3 Tri par tas : Heapsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.3.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.3.2 Tri par tas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.3.3 Insertion d’un nouvel élément . . . . . . . . . . . . . . . . . . . . . . . . . 665.3.4 Suppression d’un élément du tas . . . . . . . . . . . . . . . . . . . . . . . 665.4 Complexité du tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.4.1 Les grands théorèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.4.2 Démonstration des théorèmes . . . . . . . . . . . . . . . . . . . . . . . . . 675.4.3 Peut-on atteindre la borne ? . . . . . . . . . . . . . . . . . . . . . . . . . . 695.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705.6 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856 Graphes 876.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.2 Arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.2.1 Caractérisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.2.2 Parcours d’arbres binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 886.2.3 Arbres binaires de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . 916.3 Structures de données pour les graphes . . . . . . . . . . . . . . . . . . . . . . . . 936.4 Accessibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976.4.1 Rappels sur les relations binaires . . . . . . . . . . . . . . . . . . . . . . . 976.4.2 Chemins dans les graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.4.3 Fermeture transitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.5 Plus courts chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016.5.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016.5.2 Présentation des plus courts chemins . . . . . . . . . . . . . . . . . . . . . 1016.5.3 Avec des poids positifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026.5.4 Chemins algébriques dans les semi-anneaux . . . . . . . . . . . . . . . . . 1026.5.5 Algorithme de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036.6 Parcours en largeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056.7 Parcours en profondeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076.7.1 Première version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076.7.2 Analyse fine du parcours en profondeur . . . . . . . . . . . . . . . . . . . 1086.8 Tri topologique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106.9 Forte connexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106.10 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106.11 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177 Tables de hachage 1197.1 Recherche en table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197.2 Tables de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197.3 Collisions séparées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207.4 Adressage ouvert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217.5 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1228 Analyse amortie 1238.1 Compteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238.1.1 Méthode des acomptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238.1.2 Méthode du potentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248.2 Malloc primaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248.2.1 Méthode globale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248.2.2 Méthode des acomptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248.2.3 Méthode du potentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248.3 Insertion ET suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258.4 Gestion des partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258.4.1 Représentation en listes chaînées . . . . . . . . . . . . . . . . . . . . . . . 1258.4.2 Représentation en arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258.5 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1269 NP-Complétude 1279.1 P versus NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279.2 3-SAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279.3 Clique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299.4 Couverture par les sommets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.5 Circuit hamiltonien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.6 Coloration de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1319.6.1 COLOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1319.6.2 3-COLOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339.6.3 3-COLOR-PLAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1349.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379.8 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14310 Algorithmes d’approximation 14510.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14510.2 Vertex cover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14510.2.1 Version classique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14510.2.2 Version pondérée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14610.3 Voyageur de commerce : TSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14710.3.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14710.3.2 Inapproximabilité de TSP : . . . . . . . . . . . . . . . . . . . . . . . . . . 14710.3.3 2-approximation dans le cas où c vérifie l’inégalité triangulaire . . . . . . . 14710.4 Bin Packing : BP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14810.4.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14810.4.2 Next Fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14910.4.3 Dec First Fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15010.5 2-Partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15010.5.1 NP-complétude au sens faible et au sens fort . . . . . . . . . . . . . . . . 15010.5.2 Approximation gloutonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . 15110.5.3 Une (1 + !)-approximation . . . . . . . . . . . . . . . . . . . . . . . . . . . 15210.5.4 FPTAS pour 2-Partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15410.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15610.7 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
cours algorithme exercice
Wednesday, January 9, 2013
Cours algorithme et exercices
Subscribe to:
Posts (Atom)