Source: http://www.cs.mcgill.ca/~crepeau/COURSES/ift2121-plan.html
Timestamp: 2018-01-21 12:15:57+00:00

Document:
IFT 2121 --- H98
Professeur: Claude Crépeau, 3347 André--Aisenstadt
Début des cours: le lundi 5 janvier 1998
Début des TPs: le vendredi 9 janvier 1998
Horaire: cours lundi 11:30-13:30, mercredi 11:30-12:30, TPs vendredi 08:30-10:30
Objectifs: Comment développer un algorithme efficace pour résoudre un problème donné? Parmi plusieurs algorithmes résolvant un même problème, lequel choisir? Pour illustrer l'importance de ces questions, considérez le problème du calcul du déterminant d'une matrice. Un algorithme classique, dû à Gauss et Jordan, peut calculer le déterminant d'une matrice 20x20 en moins d'un dixième de seconde sur un ordinateur contemporain. Un autre algorithme tout aussi classique, basé sur la définition récursive du déterminant, prendrait dix millions d'années pour arriver au même résultat sur le même ordinateur!
L'algorithmique propose des réponses à ces questions. Pour la première, il y a un ensemble de techniques générales de conception d'algorithmes. Nous étudierons par exemple l'approche vorace, la technique diviser-pour-régner, la programmation dynamique et l'approche probabiliste. Pour la seconde question, l'algorithmique offre des techniques d'analyse de l'efficacité d'algorithmes basées principalement sur la résolution de récurrences et les notations asymptotiques. À l'aide de ces méthodes, il est possible de prédire la quantité de temps ou de mémoire requise à l'exécution d'un algorithme sur des exemplaires de grande taille du problème à résoudre. (C'est ainsi que nous pouvons prédire qu'il faudrait des millions d'années pour calculer un déterminant par le «mauvais» algorithme.) Cette analyse constitue une base de comparaison pour guider le choix d'algorithme.
Le cours IFT 2121 permettra à l'étudiante d'apprendre à concevoir des algorithmes, d'analyser l'efficacité de ceux-ci et de se familiariser avec des techniques mathématiques pertinentes. Elle développera le réflexe de ne pas se contenter de la première méthode trouvée mais plutôt de chercher l'algorithme le plus efficace possible pour résoudre le problème auquel elle sera confrontée.
Le cours ne demande pas de programmation. Il y aura un examen intra, un examen final et un certain nombre d'exercices théoriques. L'évaluation durant le cours se fera avec des notes numériques; la conversion en notation littérale se fera sur la note cumulative finale.
Barème (avec seuil):
Examen intra: 25%
Exercices: 40%
Le seuil: Pour que les exercices comptent dans la note finale, vous devez obtenir une moyenne pondérée d'au moins 40% aux examens.
Livre obligatoire: Gilles Brassard et Paul Bratley, Fundamentals of Algorithmics, Prentice-Hall, 1996.
(La version française originale Algorithmique: conception et analyse, Masson, 1987, ne répond plus entièrement aux besoins du cours.)
Note: Certaines sections du livre correspondent à des sujets que l'étudiant devrait déjà bien connaître. Celles-ci sont indiquées ci-dessous comme lecture libre et il incombera à chacun de s'assurer qu'il maîtrise bien la matière. Si nécessaire, quelques unes de ces notions pourront être survolées en démonstration.
Autres livres utiles: Thomas H. Cormen, Charles E. Leiserson et Ronald L. Rivest, Introduction to Algorithms, MIT Press, 1990. Alfred V. Aho, John E. Hopcroft et Jeffrey D. Ullman, The Design and Analysis of Computer Algorithms, Addison-Wesley, 1974. Dexter C. Kozen, The Design and Analysis of Algorithms, Springer-Verlag, 1992.
1ère semaine: Motivations: §§ 1.1, 1.2, 7.1; Introduction: chapitre 2.
[Lecture libre: §§ 1.3, 1.4, 1.5, 1.6 (sauf § 1.6.4), 1.7 (sauf § 1.7.4).]
2ième semaine: Notation asymptotique: Chapitre 3.
3ième semaine: 24,25 septembre. Résolution de récurrences, § 4.7.
4ième semaine: Analyse d'algorithmes: §§ 4.1-4.5.
5ième semaine: Structures de données: § 5.9; Algorithmes voraces: §§ 6.1, 6.2, 6.3.
[Lecture libre: §§ 5.1-5.5, 5.7.]
6ième semaine: Algorithmes voraces (suite): § 6.4; Diviser-pour-régner: §§ 7.1 (rappel), 7.2, 7.4, 7.6.
7ième semaine: Diviser-pour-régner (suite): §§ 7.5, 7.7.
8ième semaine: Cryptographie: § 7.8;
9ième semaine: Programmation dynamique: §§ 8.1.1, 8.2, 8.3., §§ 8.5, 8.6, 8.7, 8.8.
10ième semaine: Graphes de jeu: § 9.1; Parcours de graphes: §§ 9.3, 9.4, 9.5.
11ième semaine: Graphes implicites et retour arrière: § 9.6; Algorithmes probabilistes: §§ 10.5.1, 10.7.1, 10.1, 10.2, 10.3, 10.4, 10.5 (sauf 10.5.3).
12ième semaine: Algorithmes probabilistes (suite): §§ 10.6, 10.7; Introduction à la complexité: §§ 12.1, 12.2.
13ième semaine: Introduction à la complexité (suite): §§ 12.4, 12.5 (bref rappel), 12.6.

References: § 1
 § 1
 § 4
 § 5
 § 6
 § 7
 § 9
 § 9