Notes de cours INFO510 / INFO511, L3 IUP TR
Algorithmique et structures de donn´ees
Jacques-Olivier Lachaud
LAMA, Universit´e de Savoie
11 octobre 2011
1
Introduction
Ce document trace les grandes lignes d’un cours de niveau introductif `a l’algorithmique et aux
structures de donn´ees. Le langage algorithmique choisi est un pseudo-Pascal. Le langage de mise en
œuvre est le langage C. Ce cours s’adresse `a des ´etudiants relativement d´ebutants en informatique,
mais ayant eanmoins quelques notions de base. L’objectif est de connaˆıtre les TAD (types abstraits
de donn´ees) classiques (listes, arbres) et leurs utilisations courantes, et de savoir les mettre en œuvre.
Pour la syntaxe du pseudo-langage algorithmique, on peut se ef´erer au document d’Eric Sopena
(LaBRI, IUT Bordeaux 1). Les livres sur les structures de donn´ees sont pl´ethores. Ici, quelques exem-
ples sont pris de Data Structures and Algorithms, Aho/Hopcroft/Ullman, Ed. Addison-Wesley, 1987.
Un livre tr`es complet sur l’algorithmique est Introduction `a l’algorithmique, Cormen/Leiserson/Rivest/Stein,
Dunod, 2004. Pour le langage C, The C programming Langage, Kernighan/Ritchie est tr`es bon, mais
n’int`egre pas les modifications de la derni`ere version du C. On peut conseiller aussi le ethodologie
de la programmation en C, Braquelaire, Ed. Dunod, 2005, qui int`egre la norme C99.
Plan
1. G´en´eralit´es
(a) Qu’est-ce qu’un algorithme ?
(b) Quelques probl`emes classiques
(c) Rappels d’algorithmique ´el´ementaire
(d) Actions, Fonctions
(e) Taxinomie des Types Abstraits de Donn´ees (TAD)
2. Quelques algorithmes sur les tableaux
(a) Le tableau
(b) Algos de base : parcours, min, max, argmin, argmax, recherche
(c) n-i`eme plus grand d’une collection ? Vers le tri
(d) Les tris internes/externes
(e) Autres tris : bin-sort
(f) Bornes inf´erieures d’un tri
3. Structures s´equentielles
(a) Listes et cas particuliers Piles et Files
(b) Exemple de mise en œuvre d’une Pile
(c) Mise en œuvre des files
(d) Utilisation des files
(e) Algorithmes classiques utilisant les listes
(f) Mise en œuvre des listes (contigu¨e ou non)
(g) La file `a double entr´ee et le calcul de l’enveloppe convexe
4. Structures arborescentes
(a) Arbres, arbres binaires, arbres n-aires
(b) Arbres partiellement ordonn´es, file `a priorit´e et tas
(c) Arbre binaire de recherche et applications
(d) Arbre suffixe et palindrome
(e) Tas et tri
(f) Arbre quaternaire et plus proche point
5. Complexit´e des algorithmes
1
(a) Un cadre de comparaison vitesse/taille
(b) Notations O, Ω, Θ
(c) Complexit´e des algorithmes pr´esent´es
6. Structures relationnelles Graphes, digraphes
1 G´en´eralit´es
1.1 Qu’est-ce qu’un algorithme ?
Des probl`emes aux programmes.
1. Identifier le probl`eme `a esoudre. Ce n’est toujours ´evident, surtout quand la personne soumet-
tant le probl`eme n’est pas informaticienne. Il faut aussi v´erifier que le probl`eme peut ˆetre r´esolu
`a l’aide d’un ordinateur.
Exemples : Savoir dans un groupe qui est le “meilleur” 6=Savoir dans un groupe qui a en moyenne les
meilleures notes.
Quelle est la meilleure formation 6=Quelle est la formation avec le meilleur pourcentage de diplˆom´e 6=
Quelle est la formation avec la meilleure insertion professionnelle.
2. Formaliser le probl`eme. Une fois le probl`eme bien identifi´e, on utilise des mod`eles formels (en
en´eral bien ´etudi´es) pour exprimer le probl`eme sous une forme bien d´efinie et bien sp´ecifi´ee.
Exemples : Les syst`emes d´equations lin´eaires (circuits, r´esistance des mat´eriaux, g´eom´etrie)
Les ´equations aux eriv´ees partielles (EDP) (m´ecanique des fluides, ´electromagn´etisme, etc)
Les grammaires et autres outils de math´ematiques discr`etes (reconnaissance de texte, logique et satis-
faction de contraintes)
Les syst`emes d’information, les IHM sont repr´esent´ees sous forme relationnelle et les processus avec des
diagrammes adapt´es (MERISE, UML)
3. Trouver une solution dans le cadre du mod`ele choisi, `a l’aide d’une succession d’op´erations
´el´ementaires. On parle d’algorithme.
D´efinition 1 (Algorithme (inspir´e de Wikipedia)) Un algorithme est un ´enonc´e d’une suite
d’op´erations permettant de donner la r´eponse `a un probl`eme (´enonc´e en terme de : j’ai telles
donn´ees en entr´ees, je veux telles donn´ees en sortie). Si ces op´erations s’ex´ecutent en s´equence,
on parle d’algorithme equentiel. Si les op´erations s’ex´ecutent sur plusieurs processeurs en par-
all`ele, on parle d’algorithme parall`ele.
Exemples : Pour les EDP, il existent des sch´emas classiques pour transformer toute EDP en une succes-
sion de calculs qui approchent la solution r´eelle de plus en plus pr´ecis´ement.
Pour les ´equations lin´eaires, elles sont souvent mises sous forme matricielles, puis r´esolues avec des
algorithmes d’inversion de matrices.
Pour la reconnaissance de texte, on utilisera souvent des structures de donn´ees auxiliaires dans lesquelles
on r´eduit consid´erablement l’espace de recherche.
Un algorithme est donc un moyen de calculer une solution au probl`eme pos´e, le calcul ´etant
ecompoe en un nombre fini d’instructions et devant ˆetre ex´ecutable en un temps fini, quelle
que soit la donn´ee en entr´ee (probl`eme dit de la terminaison).
On d´ecrit un algorithme souvent `a l’aide d’un pseudo-langage naturel tr`es simplifi´e, `a la fois
lisible et formel. Les donn´ees, r´esultats, et variables interm´ediaires sont clairement d´eclar´es,
chaque calcul est pr´ecis´e de fa¸con compl`ete, etc.
4. L’algorithme est enfin traduit sous forme d’un langage de programmation adapt´e, parfois d´ependant
aussi du syst`eme d’exploitation.
Il est clair que les ordinateurs ne savent faire que des oerations extrˆemement ´eementaires :
acc`es m´emoire et arithm´etique essentiellement. C’est donc le travail de l’informaticien d’´ecrire
une solution `a un probl`eme complexe sous forme d’une suite d’instructions ´el´ementaires.
2
Quelques questions :
(a) Quels langages de programmation connaissez-vous ?
(b) Quelles sont leurs principales diff´erences ?
(c) Quel est l’influence d’un langage particulier pour r´esoudre un probl`eme donn´e ?
(d) D’o`u vient le mot algorithme ?
5. Les langages de programmation visent d’une part `a fournir des op´erations un peu moins ´el´ementaires
pour faciliter le travail de l’informaticien et d’autre part `a rester assez fid`ele au code du pro-
cesseur pour ne pas introduire des instructions dont le temps d’ex´ecution serait important ou
non pr´edictible (tr`es important notamment dans le cas de la programmation syst`eme). A ce
jeu, le langage C, cr´e aux d´ebuts des ann´ees 1970, est tr`es proche de la machine. Toutes les
instructions C sont ainsi ´el´ementaires (ex´ecution en un temps constant) et un programme C se
traduit en langage assembleur de fa¸con courte et directe (ou langage machine).
Les fondations th´eoriques de l’algorithmique datent du milieu du XX`eme si`ecle, avec notamment les
travaux d’Alan Turing, c´el`ebre math´ematicien anglais, qui participa au d´ecryptage des communications
allemandes pendant la seconde guerre mondiale.
Exemple : [Routage dans un r´eseau]
Comment acheminer des donees d’une machine A `a une machine B dans le monde ? Comme il y a des
milliards de machines (plus de 1,2 Milliards d’abonn´es `a Internet), on ne peut pas tester tous les r´eseaux
possibles. De mˆeme on ne peut pas pr´ecalculer tous les chemins possibles (2e19 routes diff´erentes avec
IPv4).
Pour les mobiles, eme probl´ematique mais avec 2,5 Milliards d’appareils.
Exemple : [Feux d’intersection]
On cherche `a trouver le meilleur param´etrage des feux `a une intersection un peu complexe.
A
B
C
ED
Trouver le nombre minimum de phases d’intersection est ´equivalent `a maximiser les travers´ees simul-
tan´ees.
Ce probl`eme se traduit sous forme d’un graphe : sommet (flux de eplacement AB, AC, . . . ), arˆete (si
pr´esente, indique que les flux ne sont pas compatibles)
Trouver les paquets simultan´es revient `a colorier le graphe avec un nombre minimum de couleur. On
sait que c’est en fait un probl`eme difficile (NP-difficile).
1.2 Quelques probl`emes algorithmiques classiques
Le tri d’une collection d’´el´ements selon une relation d’ordre. Par exemple, on veut remettre dans
l’ordre croissant de leurs dates des transactions bancaires. Il existe des solutions algorithmiques
efficaces pour le tri. Il est ainsi possible de trier un milliard d’´el´ements en un temps raisonnable
(minutes `a qqs heures).
Rechercher les textes comportant un ensemble de mots-cl´es dans une base de donn´ees tr`es im-
portante de textes. Difficile si reconnaissance exact, efficace si reconnaissance approch´ee. Google
en est le produit phare : plus de mille milliards de pages r´ef´erenc´ees en juillet 2008, plusieurs
centaines de milliers de teraoctets.
3
Le voyageur de commerce. Probl`eme tr`es difficile dans le cas g´en´eral. Calculables si le nombre
de villes est inf´erieur `a 30. Algorithmes tr`es rapides si les positions des villes sont connues et que
les distances donnent le coˆut du billet d’avion.
L’optimisation combinatoire. Trouver les meilleurs param`etres qui minimisent une fonction coˆut.
Efficace en pratique, difficile dans des cas tordus.
Calculer l’enveloppe convexe d’un nuage de points
esoudre le Rubik’s cube. Th´eoriquement, toute configuration est `a 20 mouvements au plus de la
solution (borne atteinte, prouv´e depuis juillet 2010). En pratique, les meilleures algorithmes font
une cinquantaine de mouvements. Les humains resolvent plutˆot en 80-100 mouvements. Tout
peut se moeliser sous forme de plus court chemin dans un graphe, mais malheureusement le
graphe ne tient dans la emoire d’aucun ordinateur (4.3e19 sommets !).
Proposer un emploi du temps qui satisfasse toutes les contraintes est aussi une tˆache difficile.
Savoir mˆeme si c’est possible ou non est difficile.
. . .
1.3 Rappels d’algorithmique ´el´ementaire
Tout ordinateur est utilis´e pour faire des calculs. Les calculs effectu´es ependent de donn´ees fournies
par l’utilisateur. Le esultat des calculs est aussi stock´e par l’ordinateur sous une forme qui sera ensuite
lisible par l’utilisateur. Par essence, les donn´ees peuvent varier mais dans un domaine bien d´efini. On
parle de type de la donn´ee. Pour esigner la donn´ee, on lui donne un nom sp´ecifique (le plus explicite
possible). La donn´ee est alors appel´ee une variable. De fa¸con concr`ete, il s’agit d’une zone de la
m´emoire qui est r´eserv´ee exclusivement `a la m´emorisation de la donn´ee. Pour se ef´erer `a la valeur de
la donn´ee, on utilise simplement le nom de la variable en algorithmie. Sur un ordinateur, au niveau
´electronique, c’est beaucoup plus compliqu´e : le processeur en fait interroge sa m´emoire pour r´ecup´erer
la valeur de la variable (sous forme de bits).
On utilisera en algorithmique des types suppos´es pr´ed´efinis (dans le langage de mise en œuvre) :
entier, r´eel, bool´een, chaˆıne de caract`eres, intervalle de valeurs.
On d´efinira des variables avec :
Var : i : entier ;
x,y : r´eel
On supposera les types booeen (vrai,faux), entier, r´eel, caract`eres, chaˆıne de caract`eres, pr´ed´efinis.
On pourra d´efinir de nouveaux en les groupant sous forme de tableaux, d’entit´es, ou en les pointant
`a l’aide de pointeurs.
Quelques instructions et structures de contrˆoles classiques :
L’affectation `a une variable :
A<expression>
L’expression doit avoir une valeur du type de A
Op´erations d’entr´ees sorties :
Saisie au clavier (lecture sur l’entr´ee standard du programme)
Lire(<liste d’identifiants de variables>)
Affichage `a l’´ecran (´ecriture sur la sortie standard du programme)
Ecrire(<liste d’expressions>)
Le bloc d’instruction D´ebut-Fin
D´ebut
instruction 1 ...
Fin
Permet de regrouper une s´equence d’instructions comme si c’´etait une seule instruction. Notam-
4
1 / 47 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 !