Algorithmique - Cours et Travaux Dirigés Ecole Normale Supérieure

Algorithmique - Cours et Travaux Dirigés
Ecole Normale Supérieure de Lyon
Rédaction
Etudiants-scribes, MIM 2003 et 2004
Cours
Yves Robert
Travaux Dirigés
Yves Caniou et Eric Thierry
2003-2004-2005
2
Table des matières
1 Introduction : calcul de xn11
1.1 Énoncé du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Algorithme naïf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3 Méthode binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Méthode des facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5 Arbre de Knuth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.6 Résultats sur la complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.8 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 Diviser pour régner 19
2.1 Algorithme de Strassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Produit de deux polynômes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Master theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Résolution des récurrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4.1 Résolution des récurrences homogènes . . . . . . . . . . . . . . . . . . . . 23
2.4.2 Résolution des récurrences avec second membre . . . . . . . . . . . . . . . 23
2.5 Multiplication et inversion de matrices . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.7 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3 Programmation dynamique 35
3.1 Pièces de Monnaies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2 Le problème du sac à dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2.1 En glouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2.2 Par programmation dynamique . . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 Quelques exemples de programmation dynamique . . . . . . . . . . . . . . . . . . 37
3.3.1 Chaînes de matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.2 Plus longue sous-suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.3.3 Location de skis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.5 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4 Algorithmes gloutons 51
4.1 Exemple du gymnase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 Coloriage d’un graphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2.1 Algorithme glouton 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2.2 Algorithme glouton 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.2.3 Graphe d’intervalles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3
4.2.4 Algorithme de Brelaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3 Théorie des matroïdes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3.1 Matroïdes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.2 Algorithme glouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.4 Ordonnancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5 Tri 63
5.1 Tri rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1.1 Coût . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.1.2 Médiane en temps linéaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2 Tri fusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.3 Tri par tas : Heapsort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.2 Tri par tas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.3 Insertion d’un nouvel élément . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.4 Suppression d’un élément du tas . . . . . . . . . . . . . . . . . . . . . . . 66
5.4 Complexité du tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.4.1 Les grands théorèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.4.2 Démonstration des théorèmes . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.4.3 Peut-on atteindre la borne ? . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.5 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.6 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6 Graphes 87
6.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.2 Arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.2.1 Caractérisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.2.2 Parcours d’arbres binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.2.3 Arbres binaires de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.3 Structures de données pour les graphes . . . . . . . . . . . . . . . . . . . . . . . . 93
6.4 Accessibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.4.1 Rappels sur les relations binaires . . . . . . . . . . . . . . . . . . . . . . . 97
6.4.2 Chemins dans les graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.4.3 Fermeture transitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.5 Plus courts chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.5.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.5.2 Présentation des plus courts chemins . . . . . . . . . . . . . . . . . . . . . 101
6.5.3 Avec des poids positifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.5.4 Chemins algébriques dans les semi-anneaux . . . . . . . . . . . . . . . . . 102
6.5.5 Algorithme de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.6 Parcours en largeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.7 Parcours en profondeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.7.1 Première version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.7.2 Analyse fine du parcours en profondeur . . . . . . . . . . . . . . . . . . . 108
6.8 Tri topologique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.9 Forte connexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.10 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.11 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4
7 Tables de hachage 119
7.1 Recherche en table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.2 Tables de hachage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.3 Collisions séparées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
7.4 Adressage ouvert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
7.5 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
8 Analyse amortie 123
8.1 Compteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
8.1.1 Méthode des acomptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
8.1.2 Méthode du potentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.2 Malloc primaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.2.1 Méthode globale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.2.2 Méthode des acomptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.2.3 Méthode du potentiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.3 Insertion ET suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.4 Gestion des partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.4.1 Représentation en listes chaînées . . . . . . . . . . . . . . . . . . . . . . . 125
8.4.2 Représentation en arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.5 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
9NP-Complétude 127
9.1 P versus NP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.2 3-SAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.3 Clique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
9.4 Couverture par les sommets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.5 Circuit hamiltonien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.6 Coloration de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
9.6.1 COLOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
9.6.2 3-COLOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
9.6.3 3-COLOR-PLAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
9.7 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.8 Références bibliographiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
10 Algorithmes d’approximation 145
10.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
10.2 Vertex cover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
10.2.1 Version classique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
10.2.2 Version pondérée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
10.3 Voyageur de commerce : TSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.3.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.3.2 Inapproximabilité de TSP : . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.3.3 2-approximation dans le cas c vérifie l’inégalité triangulaire . . . . . . . 147
10.4 Bin Packing : BP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.4.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.4.2 Next Fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.4.3 Dec First Fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
10.5 2-Partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
10.5.1 NP-complétude au sens faible et au sens fort . . . . . . . . . . . . . . . . 150
10.5.2 Approximation gloutonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
5
1 / 159 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !