Hiver 2017
INFO3012
Algorithmique
Éric Hervet
Département d’informatique
Faculté des sciences
Université de Moncton
Moncton, N.-B., Canada
E1A 3E9
Table des matières
I. Introduction ........................................... 1
I.1. Besoins, coûts et bénéfices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
I.2. Types de données abstraits et structures de données . . . . . . . . . . . . . . . 1
I.3. Problèmes, algorithmes et programmes . . . . . . . . . . . . . . . . . . . . . . . 2
I.4. Ecacitédalgorithme................................. 2
II. Notionsmathématiques..................................... 3
II.1. Nombresetintervalles ................................. 3
II.2. Ensemblesetrelations................................. 3
II.3. Logarithmes ....................................... 5
II.4. Récursivité........................................ 5
II.5. Sommations et récurrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
II.6. Preuves mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
III. Analysedalgorithmes...................................... 9
III.1. Introduction....................................... 9
III.2. Meilleur cas, cas pire et cas moyen . . . . . . . . . . . . . . . . . . . . . . . . . 10
III.3. Complexité asymptotique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
III.4. Temps d’exécution d’un programme . . . . . . . . . . . . . . . . . . . . . . . . . 11
IV. RappelsdeC++......................................... 13
V. Structures de données fondamentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
V.1. Listes ........................................... 14
V.2. Piles............................................ 14
V.3. Files............................................ 16
VI. Arbresbinaires.......................................... 17
VI.1. Définitions et propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
VI.2. Parcours d’arbres binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
VI.3. Implémentations .................................... 20
VI.3.1. Partableaux ................................. 20
VI.3.2. Parpointeurs................................. 20
VI.3.3. Espacerequis................................. 21
VI.4. Arbres binaires de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
VI.5. ArbresdeHuman................................... 23
VI.5.1. Construction................................. 23
VI.5.2. Utilisation .................................. 23
VI.6. Tablesdehachage.................................... 24
i
VI.6.1. Principe.................................... 24
VI.7. Arbresgénéraux..................................... 24
VII.Graphes .............................................. 26
VII.1. Terminologie et représentations . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
VII.2. Implémentations .................................... 28
VII.3. Parcours en profondeur ou en largeur . . . . . . . . . . . . . . . . . . . . . . . . 29
VII.4. Tritopologique ..................................... 31
VII.5. Problèmes des chemins les plus courts . . . . . . . . . . . . . . . . . . . . . . . 32
VII.6. Arbres de recouvrement minimaux . . . . . . . . . . . . . . . . . . . . . . . . . 34
VII.7. Chemins hamiltoniens et eulériens . . . . . . . . . . . . . . . . . . . . . . . . . . 35
VII.7.1. CheminEulérien............................... 35
VII.7.2. Chemin Hamiltonien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
VIII.Algorithmesavancés....................................... 37
VIII.1. Diviser-pour-régner (Divide and Conquer).................... 37
VIII.2. Programmation dynamique (Dynamic Programming) ............. 38
VIII.3. Retour arrière (Backtracking) ............................ 40
ii
INFO3012 Algorithmique I.. Introduction
I. Introduction
I.1. Besoins, coûts et bénéfices
+Les problèmes les plus complexes (prévisions météorologiques, environnementales, analyse des
médias sociaux, etc.) requièrent des algorithmes de plus en plus efficaces, malgré la rapidité
croissante des vitesses de calcul des ordinateurs.
+Un algorithme est dit efficace s’il résout un problème en respectant des contraintes établies
(quantité de mémoire, temps d’exécution, etc.).
+Une structure de données est une manière de représenter les données d’un problème et les
opérations qui s’appliquent à cette collection de données.
+Une structure de données doit donc être choisie soigneusement après avoir analysé les données
et les contraintes d’un problème ainsi que les opérations qui doivent être rendues possibles.
+Toute structure de données a des coûts (inconvénients) et des bénéfices (avantages). Autre-
ment dit selon le problème traité, une structure de données peut être « meilleure » (plus
adaptée) qu’une autre ou inversement.
Exemple : base de données bancaire.
+Il y a très souvent un compromis espace (mémoire) vs temps (d’exécution).
I.2. Types de données abstraits et structures de données
+Un type est une collection de valeurs. Un type peut être simple (booléen, entier, etc.) ou
composé (complexe, « enregistrement » (record), etc.).
+Un type de données est un type et un ensemble d’opérations sur les valeurs du type (par
exemple pour les entiers : addition, soustraction, etc.).
+Un type de données abstrait (en anglais ADT pour Abstract Data Type) est une
réalisation d’un type de données comme composant logiciel. Un type de données abstrait
définit les entrées, les sorties et le comportement de chaque opération sans donner les
détails d’implémentation (séparation entre entêtes (headers) et définitions (sources)).
+Une structure de données est une implémentation d’un type de données abstrait. En POO
(programmation orientée objet), une structure de données donne généralement lieu à une
classe où les opérations manipulant les données sont des fonctions membres de la classe et
les variables représentant les données des attributs. Un objet est une instance de classe qui
reste en mémoire tout le temps de l’exécution d’un programme (à moins d’une libération
Éric Hervet - 1/40 - Hiver 2017
INFO3012 Algorithmique I.. Introduction
explicite par le programmeur).
+Les données d’une structure de données ont à la fois une forme logique et une forme physique.
Dans la définition d’un type de données abstrait (données manipulées et leurs opérations),
elles sont sous leur forme logique.
Dans l’implémentation (corps des fonctions, allocations mémoire), elles sont définies physi-
quement.
I.3. Problèmes, algorithmes et programmes
+Un problème est une tâche à résoudre.
La définition d’un problème doit énoncer clairement les entrées fournies et les sorties
attendues, et parfois aussi les contraintes que la (qu’une) solution doit respecter.
Un problème peut parfois être défini comme une fonction mathématique où les valeurs en
entrée sont appelées paramètres.
+Un algorithme est une méthode (recette, procédure) à suivre pour résoudre un problème.
Un algorithme est généralement découpé en plusieurs étapes.
Un problème peut (souvent) être résolu par différents algorithmes (exemple : tris).
+Un algorithme doit prendre en compte toutes les entrées et contraintes et se terminer (dans
un temps « raisonnable »).
+Un programme est une instance d’algorithme, dans un langage de programmation donné, et
qui utilise des structures de données et des déclarations (de variables et de fonctions).
Un programme doit être capable de lire les données d’entrées et de produire les données de
sortie selon des formats déterminés.
I.4. Efficacité d’algorithme
+Il est très important de s’attarder sur les coûts d’un algorithme, de s’assurer qu’il donne des
résultats corrects, et qu’il se termine.
Pour cela, on fait des calculs et des démonstrations mathématiques.
Éric Hervet - 2/40 - Hiver 2017
1 / 43 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 !