Une boˆ
ıte d’outils
pour la programmation
en Caml
Laurent Ch´
eno
avec la collaboration de
Alain B`
eges
´
et´
e 1995
Lyc´
ee Louis-le-Grand, Paris
Table des mati`
eres
I Structures de donn´
ees 13
1 Piles 15
1.1 D´
efinition abstraite de la structure ....................... 15
1.2 Une structure concr`
ete ............................. 15
1.3 Une impl´
ementation en Caml .......................... 16
2 Files d’attente 19
2.1 D´
efinition abstraite de la structure ....................... 19
2.2 Interface propos´
ee ............................... 19
2.3 Une structure concr`
ete ............................. 19
3 Une structure pour les listes circulaires 23
3.1 Description de la structure ........................... 23
3.2 Impl´
ementation en Caml ............................ 23
4 Files de priorit´
e27
4.1 D´
efinition abstraite de la structure ....................... 27
4.2 Une structure concr`
ete: les tas ......................... 27
4.3 Impl´
ementation en Caml ............................ 29
4.4 Preuve et ´
evaluation de l’algorithme ...................... 33
5 Partitions d’un ensemble 35
5.1 D´
efinition abstraite de la structure ....................... 35
5.2 Un autre point de vue ............................. 36
5.3 Interface propos´
ee ............................... 36
5.4 Une structure concr`
ete ............................. 37
5.5 ´
Evaluation ................................... 39
5.6 Impl´
ementation en Caml ............................ 39
II Quelques algorithmes sur les graphes 43
6G
´
en´
eralit´
es sur les graphes 45
6.1 Vocabulaire ................................... 45
6.2 Une repr´
esentation avec des listes ....................... 46
6.3 Une repr´
esentation matricielle ......................... 47
6.4 Conversion d’une repr´
esentation `
a l’autre ................... 47
7 Les algorithmes de Floyd et de Warshall 49
7.1 Le probl`
eme des plus courts chemins ..................... 49
7.2 L’algorithme de Floyd ............................. 50
7.3 Impl´
ementation en Caml de N{+}..................... 51
7.4 Impl´
ementation en Caml de l’algorithme de Floyd ............... 52
3
4TABLE DES MATI`
ERES
7.5 L’algorithme de Warshall ............................ 53
8 L’algorithme de Dijkstra 55
8.1 Utilit´
e d’un nouvel algorithme ......................... 55
8.2 Description de l’algorithme de Dijkstra .................... 55
8.3 Impl´
ementation de l’algorithme de Dijkstra en Caml .............. 57
8.4 ´
Evaluation ................................... 59
9 Arbre couvrant minimal d’un graphe non orient´
e61
9.1 Pr´
esentation du probl`
eme ........................... 61
9.2 Algorithme de Prim .............................. 63
9.2.1 Description informelle ......................... 63
9.2.2 Impl´
ementation en Caml ........................ 63
9.2.3 ´
Evaluation ............................... 64
9.3 Algorithme de Kruskal ............................. 66
9.3.1 Description de l’algorithme ...................... 66
9.3.2 Impl´
ementation en Caml ........................ 66
9.3.3 ´
Evaluation ............................... 66
III Quelques algorithmes de g´
eom´
etrie combinatoire 69
10 Enveloppe convexe d’un ensemble de points du plan 71
10.1 Rappels sur la convexit´
e............................ 71
10.2 Algorithme de Graham-Andrew ........................ 72
10.2.1 La marche de Graham ......................... 72
10.2.2 L’algorithme de Graham est optimal .................. 73
10.2.3 L’am´
elioration de l’algorithme de Graham par Andrew ........ 74
10.3 Strat´
egie diviser pour r´
egner .......................... 75
10.3.1 Algorithme de Shamos ......................... 75
10.3.2 Algorithme de Preparata et Hong ................... 76
10.4 Impl´
ementation en Caml ............................ 78
10.4.1 Le tri-fusion .............................. 78
10.4.2 Quelques fonctions utilitaires ..................... 78
10.4.3 La recherche des points extr´
emaux d’un polygone convexe ...... 78
10.4.4 L’algorithme de Preparata et Hong: les ponts inf´
erieur et sup´
erieur .. 80
10.4.5 La fonction enveloppeConvexe ................... 80
11 Probl`
emes de proximit´
e dans le plan 83
11.1 Quelques probl`
emes classiques ......................... 83
11.1.1 La paire la plus rapproch´
ee ...................... 83
11.1.2 Les plus proches voisins ........................ 83
11.1.3 Triangulation ............................. 83
11.2 La paire la plus rapproch´
ee ........................... 84
11.2.1 Premi`
ere analyse ............................ 84
11.2.2 Un cas particulier: la dimension 1 ................... 84
11.2.3 Retour au probl`
eme plan ........................ 85
11.2.4 Impl´
ementation en Caml ........................ 87
11.3 Diagrammes de Voronoi ............................ 91
11.3.1 D´
efinition ............................... 91
11.3.2 Quelques propri´
et´
es .......................... 91
11.3.3 Applications .............................. 94
11.4 Algorithme de Tsai ............................... 96
11.4.1 Quelques pr´
eliminaires ......................... 96
TABLE DES MATI`
ERES 5
11.4.2 Premi`
ere ´
etape ............................. 97
11.4.3 Deuxi`
eme ´
etape ............................ 97
11.4.4 Troisi`
eme ´
etape ............................ 99
11.4.5 Remarques ............................... 99
11.4.6 Les diagrammes de Vorono¨
ı revisit´
es .................. 100
11.5 Impl´
ementation en Caml ............................100
11.5.1 Quelques utilitaires .......................... 100
11.5.2 Deuxi`
eme ´
etape de l’algorithme ....................102
11.5.3 Troisi`
eme ´
etape ............................104
11.5.4 D´
etermination du diagramme de Vorono¨
ı............... 105
11.5.5 Affichage dans une fenˆ
etre graphique ................. 106
IV Annexes 109
A Un petit manuel de r´
ef´
erence de Caml 111
A.1 Types de base ................................. 112
A.1.1 Unit ..................................112
A.1.2 Bool´
eens ................................112
A.1.3 Nombres entiers ............................112
A.1.4 Nombres `
a virgule ou “flottants” ...................112
A.1.5 Caract`
eres ...............................112
A.1.6 Chaˆ
ınes de caract`
eres .........................113
A.1.7 Couples et multiplets ..........................113
A.1.8 Listes .................................. 114
A.2 Types construits ................................ 115
A.2.1 Types produit ............................. 115
A.2.2 Types somme ............................. 115
A.2.3 Types param´
etr´
es ...........................115
A.2.4 Types (mutuellement) r´
ecursifs ....................115
A.2.5 Abr´
eviations de type .........................115
A.3 Structures de contrˆ
ole .............................116
A.3.1 S´
equencement .............................116
A.3.2 Op´
erateurs &et or ...........................116
A.3.3 Conditionnelles ............................ 116
A.3.4 Filtrage ................................. 116
A.3.5 Boucles ................................. 119
A.3.6 Exceptions ............................... 120
A.4 Effets de bord: types mutables ......................... 120
A.4.1 Types mutables ............................ 120
A.4.2 Autre type mutable: les r´
ef´
erences ...................120
A.4.3 Autre type mutable: les vecteurs ....................121
A.5 Effets de bord: entr´
ees / sorties ........................ 122
A.5.1 Entr´
ees/sorties clavier/´
ecran ......................122
A.5.2 Fichiers texte .............................. 122
A.5.3 Fichiers binaires ............................123
A.6 Effets de bord: la biblioth`
eque graphique ...................123
B Quelques id´
ees pour la programmation fonctionnelle 125
B.1 Fonctionnelles en guise de structures de contrˆ
ole ............... 126
B.1.1 Un exemple ..............................126
B.1.2 Retour au probl`
eme g´
en´
eral: la s´
equence ............... 127
B.1.3 Boucle while .............................127
B.1.4 Boucle de comptage ..........................128
1 / 136 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 !