Vous êtes sur la page 1sur 11

Algorithmes : conception et réalisation

MQT 63834
Professeur Antoine Gautier, Ph. D.

Département Opérations et systèmes de décision


Faculté des sciences de l’administration, Université Laval
Session d’hiver 2004∗

1 Introduction
Les contributions des méthodes quantitatives à la gestion se regroupent en deux classes principales.
D’une part, il est possible d’obtenir par une analyse mathématique des principes généraux de gestion, par
exemple en montrant que certaines chaînes de montage sont auto-équilibrées. D’autre part les méthodes
quantitatives offrent la possibilité du calcul explicite de certaines variables cruciales dans les décisions
opérationnelles. Dans ce deuxième cas les calculs se résument rarement à une simple série d’opérations
arithmétiques aisément réalisables avec un chiffrier. Les procédures comportent souvent un grand nombre
d’opérations, décrites par un algorithme.
S’il est possible de s’intéresser aux algorithmes in-abstracto, c’est à dire sans se préoccuper de leur
utilisation pratique par des ordinateurs, ce n’est pas l’approche privilégiée dans le cours. Sans perdre de
vue les propriétés théoriques des algorithmes, nous nous concentrerons durant la première partie du cours
sur le lien entre algorithmes et ordinateurs (la programmation) et sur plusieurs structures de données indis-
pensables à la réalisation d’un programme. Sur cette base nous explorerons un échantillon d’algorithmes
représentatifs à la fois des applications en gestion et des approches algorithmiques.
Le cours MQT 63834 est donc l’un des cours de fondement proposés par le département OSD dans le
cadre des programmes de deuxième cycle de la FSA. Il constitue une introduction aux méthodes de traite-
ment de l’information et de calcul (algorithmes). On traite des principaux algorithmes usuels (recherche,
tri, graphes) en introduisant des concepts d’analyse d’efficacité. Les structures de données sont également
vues sous cet angle.
La mise en pratique des connaissances acquises sur les algorithmes se fera par le langage de program-
mation Pascal, qui constitue une bonne introduction aux langages de programmation actuels (C, C++,
Java, etc.)
∗ Version du 22 décembre 2003.

1
MQT 63834 2

Pré-requis
Le cours est ouvert à tous les étudiants de deuxième et troisième cycle, la clientèle cible étant celle des
cheminements Gestion manufacturière et logistique (GML) et Modélisation et décision organisationnelle
(MDO) du MBA.
Le cours est ouvert aux étudiants sans expérience de programmation ainsi qu’à ceux qui sont familiers
avec la partie informatique des langages mais moins avec l’analyse des algorithmes (complexité,...).

Objectifs du cours
Le cours vise à amener les étudiants à :
– Distinguer un algorithme conceptuel d’un programme informatique logiciel
– Acquérir des notions de base d’analyse des algorithmes, c’est-à-dire établir exactement ce que fait
un algorithme et évaluer le nombre d’opérations nécessaires à son exécution
– Connaître certaines structures de données de base (tableaux, listes, arbres, monceaux,...)
– Connaître un certain nombre d’algorithmes fondamentaux (tri, recherche, graphes...)
– Être capable de transcrire un algorithme en un programme en langage Pascal
– Acquérir un langage et des méthodes d’analyse des algorithmes afin d’être capable de recommander
une approche de traitement de grands problèmes.

Activités principales
– Cours magistraux et discussions
– Ateliers d’apprentissage Turbo Pascal
– Lectures
– Exercices à remettre individuellement
– Projet de session

2 Matériel

Ouvrages obligatoires
1. N OTES DE COURS et ATELIER DE FORMATION T URBO PASCAL (janvier 2004).
2. L IVRE La référence de base est le livre de Parsons (1995) qui constitue une excellente introduction
aux algorithmes et à leur analyse. Le livre est épuisé mais une copie sera disponible à la réserve (vous
pouvez également tenter votre chance sur www.Amazon.com ou www.Ebay.ca) ; nous utiliserons
surtout les chapitres 1, 4, 5, 6, et 9.

Ouvrages complémentaires
A PPRENTISSAGE DU LANGAGE P A S C A L
Les étudiants qui ont une expérience de la programmation pourront peut-être trouver les documents
obligatoires suffisants. Pour les autres, voici une liste d’ouvrages recommandés. En anglais le livre de
MQT 63834 3

Grogono (1985) est clair, mais il est malheureusement épuisé. Une photocopie sera disponible à la ré-
serve des professeurs (la traduction française de cet ouvrage n’est pas recommandée). En français on
trouvera l’ouvrage de Delannoy (1997). Pour les moins fortunés, le Hernert (1995) est une bonne pe-
tite référence. Le livre qui fait autorité pour le langage Pascal, dont Turbo Pascal est une extension, est
Jensen et Wirth (1991).

S UR LES ALGORITHMES
Des éléments de complexité algorithmique sont empruntés à Sakarovitch (1984), Garey et Johnson
(1979) et à Papadimitriou et Steiglitz (1982). Une bonne introduction à la programmation par contraintes
est celle de Smith (1995). Finalement, les ouvrages de Brassard et Bratley (1987), Brassard et Bratley
(1996), Sedgewick (1988), Knuth (1973), Bal et Grune (1992), van Leeuwen et Widmayer (1992), Froi-
devaux et al. (1993) et Cormen et al. (1990) seront les bienvenus dans votre bibliothèque si vous désirez
poursuivre dans le domaine des algorithmes.

Outils informatiques
Vous devrez avoir installé un compilateur Pascal sur votre portable avant les ateliers d’apprentissage
(deuxième semaine). En voici plusieurs, tous gratuits.
Bloodshed. Pour Windows 95/98/NT/2000/XP. Sur www.bloodshed.net, télécharger
Dev-Pascal 1.9.2 + GNU Pascal.
Pour l’utiliser : ouvrez un fichier .pas existant, ou créez-en un avec la fonction File-New-source-file
(ctrl-U) — ne tentez pas de créer des Projets, c’est compliqué.
Turbo Pascal 7.01 pour DOS. Fonctionne sous toutes les versions de Windows sauf XP. Documentation
et aide en français. Installation : sur la page internet du cours, allez chercher le fichier TP7F.zip.
Lors du transfert, enregistrez le sous le nom c:\TP7F.zip. Décompressez-le. Si vous utilisez Winzip,
spécifiez le répertoire : « extract to : c:\ ». Vous pouvez maintenant lancer le programme avec
le raccourci c:\TP7F\Turbo (ne tentez pas d’installer le compilateur à un endroit différent.).
Gpc. Compilateur GNU, fonctionne sous windows, unix, linux et MacOS X. www.gnu.org et www.
microbizz.nl/gpc.html pour la version OS X.

Ressources Internet
– Le forum d’entraide Pascal, avec tutoriel : www.developpez.com/pascal/
– Le forum usenet : news://fr.comp.lang.pascal
– Tout sur la (monstrueuse) fonction d’Ackermann :
pweb.netcom.com/~hjsmith/Ackerman.html.

3 Utilisation des ordinateurs portables


L’utilisation des ordinateurs portables pour le cours est réservée au travail sur les exercices et le projet
(hors rencontres en classe) et à certaines parties des cours en classe (formation Turbo Pascal principale-
MQT 63834 4

ment). À l’exception de ces dernières vous êtes priés de garder les portables fermés et éteints.

4 Organisation du cours et travaux


Horaire
Le cours se tiendra les jeudis de 8 heures 30 à 11 heures 30.

Affichage
Il est possible que certaines modifications soient apportées au déroulement du cours. Toute information
supplémentaire sera communiquée en classe, et possiblement sur le site du cours.

Formation Turbo Pascal


La formation au langage Turbo Pascal est particulièrement exigeante et ne vous laisse que peu de
marge de manœuvre quant au retard que vous pourriez y prendre. Durant cinq semaines à partir de la
deuxième semaine de cours, des sessions d’apprentissage Turbo Pascal obligatoires auront lieu les lundis
de 13 heures 15 à 15 heures 30. Il vous est demandé de faire certaines lectures avant chacune des séances :

Séance Thème Lectures préalables


Atelier : pages 1 à 36
Bases du langage, structures de contrôle, entrées et
1 Grogono : chapitres 1, 2 et 3 et §6.1,
sortie
6.5
Atelier : pages 37 à 70
Types structurés, fonctions et procédures, variables
2 Grogono : chapitre 4 (sauf §4.4) et
locales v/s globales, entrées et sorties sur fichier
§6.6, 7.2 et 7.3
Atelier : pages 71 à 86
3 Utilisation des pointeurs
Grogono : chapitre 8
Atelier : pages 87 à la fin
4 Récursivité
Grogono : §4.4
5 Rattrapage et révision (relecture)

Devoirs
Une série de devoirs (au plus 10) à remettre, incluant des exercices théoriques et pratiques. Visez une
présentation claire et précise tant dans le fond que dans la forme. En particulier, les programmes en remis
sans lignes de commentaires seront refusés.
Le but des devoirs est de vous aider à comprendre et appliquer le contenu du cours et à développer vos
aptitudes à manipuler des concepts algorithmiques ainsi que le langage Turbo Pascal. Il s’agit de travaux
personnels, individuels et originaux.
Des éléments de correction des devoirs seront donnés en classe peu après la date de remise. Cependant,
pour les exercices de programmation, il ne vous sera pas remis de corrigés complets ; l’important est que
MQT 63834 5

votre programme fonctionne, et non pas que vous ayez une solution toute faite...

T RANSMISSION PAPIER ET ÉLECTRONIQUE


Pour la majorité des devoirs vous devrez réaliser un ou plusieurs programmes en Turbo Pascal. En plus
de remettre vos devoir imprimés sur papier, vous devez envoyer au professeur un courriel unique avec, en
fichiers attachés :
(1) tous les fichiers source (.PAS),
(2) tous les fichiers exécutables (.EXE), et
(3) tous les fichiers sortie (.OUT), le cas échéant.
Le sujet du courriel sera précisément « Fichiers du devoir i » pour le i-ème devoir.

Évaluation
Note poids
Moyenne des n − 1 meilleurs travaux sur n 1/3
Projet 1/3
Examen final (dernier jour de cours) 1/3

Pour rejoindre le professeur


Bureau Pavillon Palasis Prince, 1519
Disponibilité Les lundis après 14 heures 30
Téléphone 656–7066
Courriel Antoine.Gautier@fsa.ulaval.ca
Site internet http://www.fsa.ulaval.ca/personnel/gautiera/

Utilisation du courriel
Vous pouvez utiliser le courriel pour poser des questions courtes par exemple sur un point de dé-
tail du cours ou sur l’un des travaux. Je m’efforce de répondre rapidement, sans pour autant offrir un
« service 7-24 ». Pour les longues explications il est préférable de venir au moment de mes disponibilités
telles qu’annoncées.

5 Feuille de route
1. Introduction : programme 6= algorithme !
– les algorithmes
– structures de données : les tableaux
– notions élémentaires de complexité
– lectures préalables : Parsons (1995) (§1.1, 1.5 et 1.6).
2. Le tri (1)
– pointeurs et listes chaînées
– tri par insertion
– lectures préalables : Parsons (1995) (§4.1–4.3).
MQT 63834 6

3. Le tri (2)
– concept de division
– récursion : tri par fusion
– complexité
– lectures préalables : Parsons (1995) (§4.4–4.7).
4. Le tri (3)
– tri rapide (QuickSort)
– complexité
– lectures préalables : Parsons (1995) (§4.4–4.7).
5. Graphes et complexité algorithmique
– introduction aux graphes, applications pratiques
– graphes implicites
– complexité algorithmique
– lectures préalables : Parsons (1995) (chapitre 9, sauf les programmes en Pascal, §1.2 et appendice A).
6. Les arbres binaires (1)
– structures d’arbre binaire
– opérations de recherche
– efficacité
– lectures préalables : Parsons (1995) (§5.1–5.7).
7. Les arbres binaires (2) et les monceaux (1)
– équilibrage des arbres
– les monceaux (Heaps)
– complexité
– lectures préalables : Parsons (1995) (§5.8–5.9 jusqu’à la page 136 et §6.1–6.2).
8. Comment traverser un arbre
– arbres explicites et implicites
– structures de données
– récursion
– application : algorithme de Branch and Bound
– lectures préalables : Parsons (1995) (§5.5).
9. Algorithmes sur les graphes (1)
– structures de données pour les graphes
– algorithmes de fouille (profondeur, largeur)
– lectures préalables : Parsons (1995) (§9.1–9.4).
10. Algorithmes sur les graphes (2)
– Plus court chemin, tri topologique
– lectures préalables : Parsons (1995) (§9.5–9.7).
11. Quelques stratégies algorithmiques
– algorithmes gloutons
– diviser pour régner : la multiplication des matrices
– lectures préalables : Brassard et Bratley (1987) (chapitre 3 et pp. 129–130).
12. Problèmes NP-complets
– Le problème du commis voyageur
– lectures préalables : dans Sakarovitch (1984), chapitre 4.
13. La programmation dynamique
– généralités
MQT 63834 7

– exemples
– lectures préalables : Parsons (1995) (§11.1–11.3).
14. La programmation par contraintes : article de Smith (1995).
MQT 63834 8

Références
H. E. Bal et D. Grune. Programming languages. In E. G. Coffman, jr., J. K. Lenstra, et A. H. G. Rinnoy
Kan, editors, Computing, volume 3 of Handbooks in Operations Research and Management Science,
chapter 2, pages 31–90. Elsevier Science B.V., 1992.
Jacques Borowczyk, Jean-luc Chabert, Michel Guillemot, Ahmed Djebbar, Jean-Caude Martzloff, et Anne
Michel-Pajus. Histoire d’algorithmes : du caillou à la puce. Regards sur la science. Belin, Paris, 1995.
Gilles Brassard et Paul Bratley. Algorithmique, conception et analyse. Manuels informatiques. Masson /
Presses de l’Université de Montréal, 1987.
Gilles Brassard et Paul Bratley. Fundamental of Algorithmics. Prentice-Hall, 1996.
Thomas H. Cormen, Charles Eric Leiserson, et Ronald L. Rivest. Introduction to Algorithms. MIT
Press/McGraw-Hill, 1990.
Claude Delannoy. Programmer en Turbo Pascal 7.0. Langages. Eyrolles, 1997.
Christine Froidevaux, Marie-Claude Gaudel, et Michèle Soria. Types de données et algorithmes. Edis-
cience International, Paris, France, 1993. aussi chez McGraw-Hill, Paris.
Michael R. Garey et David S. Johnson. Computers and intractability : A guide to N P –Completeness. W.
H. Freeman and Company, New York, 1979.
Peter Grogono. Programming in Pascal. Computer Science. Addison-Wesley, deuxième edition, 1985.
Patrice Hernert. Les Algorithmes. Que Sais-je ? Presses Universitaires de France, Paris, 1995.
Kathleen Jensen et Niklaus Wirth. Pascal user manual and report (ISO-Pascal). Springer-Verlag, fourth
edition, 1991.
Donald Ervin Knuth. The Art of Computer Programming, Vol. 1,2 et 3. Addison–Wesley, 1973.
C. H. Papadimitriou et K. Steiglitz. Combinatorial Optimization ; Algorithms and Complexity. Prentice–
Hall, 1982.
Thomas W. Parsons. Introduction to algorithms in Pascal. John Wiley & Sons, 1995.
Michel Sakarovitch. Optimisation combinatoire : Programmation Discrète. Hermann, 293 rue Lecourbe,
Paris XIII, France, 1984.
Robert Sedgewick. Algorithms. Computer Science. Addison-Wesley, 1988.
Barbara M. Smith. A tutorial on constraint programming. School of Computer Studies Research Report
Series 95–14, University of Leeds, Division of Artificial Intelligence, April 1995.
J. van Leeuwen et P. Widmayer. Fundamental algorithms and data structures. In E. G. Coffman, jr., J. K.
Lenstra, et A. H. G. Rinnoy Kan, editors, Computing, volume 3 of Handbooks in Operations Research
and Management Science, chapter 7, pages 323–374. Elsevier Science B.V., 1992.

Note : Les ouvrages suivants sont disponibles à la réserve des professeurs de la bibliothèque générale
(pavillon Bonenfant) : Parsons (1995); Grogono (1985); Brassard et Bratley (1987, 1996); Cormen et al.
(1990); Delannoy (1997); Hernert (1995); Sakarovitch (1984); Sedgewick (1988).
MQT 63834 9

Directives pour les devoirs comprenant des programmes Turbo Pascal


Au fur et à mesure que la session avance vous deviendrez plus agiles avec la programmation Turbo Pas-
cal ; vous serez évalués selon des critères qui eux aussi vont augmenter. Pour vous aider à vous améliorer,
voici une série de points à assimiler.

1. Chaque travail doit être remis dans une enveloppe 8,5 × 11 sur laquelle vous aurez inscrit clairement
votre nom et le numéro du devoir (1 à 10). L’enveloppe contiendra
(a) un listing commenté de chacun de vos programmes Turbo Pascal
(b) les sorties, le cas échéant.
2. Avant la date et l’heure de remise prévues, envoyez au professeur le courriel correspondant (voir le
Syllabus page 5).
3. Évitez les lettres majuscules sauf, si vous le souhaitez, les mots réservés de Pascal.
4. Remettez un listing et des sorties sur papier, imprimés avec une fonte à espacement fixe (Ohlf,
Courier, etc.).
5. Utilisez l’indentation (TAB) pour faire ressortir la structure de votre programme. De plus, sur la
sortie papier, faites apparaître tous les blocs à l’aide de traits de couleur (voir exemple en classe
ainsi que la forme utilisée dans le livre de Parsons).
6. Incorporez des (* commentaires *) dans votre programme — mais pas trop.
7. Choisissez des noms de variables, de procédures et de fonctions évocateurs, par exemple indice
plutôt que XYTi. Pour les compteurs de boucles, on pourra se contenter de i,j,k,...
8. Si votre programme ne marche pas, ne compile pas, ou donne de mauvais résultats, il faut le men-
tionner.
9. Vous devez tester votre programme pour vérifier qu’il fait bien ce que vous en attendez. Par exemple :
– Un programme de calcul de la moyenne dans le cours devrait donner 100 lorsque toutes les notes
valent 100, et 0 lorsqu’elles valent toutes 0.
– Un programme de tri devrait être vérifié par un deuxième programme de test d’ordre (facile à
écrire).
– Un programme de tri devrait fonctionner sur une liste de un ou de deux items. Une liste déjà triée,
ou triée en ordre inverse, devrait être traitée correctement.
Pour les autres programmes, il vous faudra inventer vos propres tests (un programme qui passe tous
vos tests n’est pas garanti correct, mais un programme qui échoue à l’un de vos tests est certainement
erroné !)
10. À l’aide de (* commentaires *), précisez pour chaque fonction et procédure la liste des variables
locales et globales. Rappelez-vous que les variables qui n’ont pas besoin d’être globales doivent être
locales.
11. N’utilisez pas l’instruction GOTO.
MQT 63834 10

Projet MQT 63834


Les projets, à effectuer en groupes de deux étudiants, seront pour vous l’occasion d’accomplir un travail
complet de conception, réalisation et test d’un logiciel informatique de traitement. Vous rechercherez un
thème de projet parmi les cours que vous prenez à la FSA, le choix devant répondre à 4 critères simples :
a) Le logiciel résout un problème qui se pose dans la gestion d’une entreprise ou d’une administration.
b) Le logiciel doit utiliser plusieurs des techniques vues en classe.
c) Le logiciel doit utiliser au moins un algorithme d’optimisation (exact ou heuristique).
d) Le logiciel doit lire ses données dans un fichier et écrire ses résultats dans un autre.
Notez que d’autres critères pertinents pour les logiciels commerciaux ne sont pas visés dans ce travail :
complexité, convivialité, esthétique, aide, etc. Afin de choisir un sujet à la fois intéressant et à votre portée,
vous pourrez discuter de votre choix avec le professeur dès les premières semaines.

Échéancier :

Remise d’un rapport préliminaire (1 à 2 pages) comportant :


– Composition définitive de l’équipe et présentation du projet
Jeudi – Vos références bibliographiques (livres, articles, notes de cours,...)
18 mars
– Analyse conceptuelle (modélisation du problème réel)
– Un exemple numérique de petite taille du problème
– Difficultés à surmonter
Remise d’un rapport intermédiaire (environ 4 pages) comportant :
– Le rapport préliminaire, corrigé et modifié au besoin + la version annotée par le
professeur
Jeudi – Analyse fonctionnelle (ce que fera le programme)
1 avril
– Organigrammes, liste des structures de données, des procédures et des fonctions
Pascal
– La résolution, sur papier, de l’exemple numérique
– Les références bibiographiques de l’algorithme utilisé (article original)
Remise du rapport final comportant :
– Les rapports préliminaire et intermédiaire, corrigés et modifiés au besoin + les
versions annotées par le professeur
– Listing sur papier documenté (faire les liens avec l’organigramme)
– Une documentation (manuel de l’utilisateur)
Jeudi – Résultats d’une batterie de tests numériques (y-compris votre exemple
15 avril
numérique), analyse de performance
– Conclusions
– Les acétates de votre présentation en classe
– Un courriel contenant le rapport final, code, exécutable(s) et quelques sorties est
également envoyé au professeur.
Présentation des projets en classe
MQT 63834 11

Présentation des projets

Chaque équipe disposera de 5 minutes pour se préparer et de 20 minutes pour présenter son projet. Le
format suivant est obligatoire :

Acétate 1 : Présentation du problème que vous avez choisi de résoudre


Acétate 2 : Présentation synthétique des données
Acétate 3 : Algorithme
Acétate 4 : Structures de données (en justifiant vos choix)
Acétate 5 : Difficultés particulières
(Démonstration du prototype)
Acétate 6 : Résultats de vos tests
Acétate 7 : Étude de complexité (théorique et/ou empirique)
Acétate 8 : Conclusions
⇒ Soyez clair, précis, et n’écrivez sur vos acétates que le strict nécessaire.
L’ordre de passage des équipes sera tiré au sort à 8 heures 30

T OUTE ÉQUIPE DONT LE TRAVAIL CORRESPOND AUX CRITÈRES CI - DESSUS ET QUI AURA
RÉUSSI À VENDRE SON LOGICIEL À UNE ENTREPRISE POUR UN PRIX NON - DÉRISOIRE SE
VERRA ATTRIBUER LA PLUS HAUTE NOTE AU COURS !

Je vous souhaite une excellente session !