COURSAlgorithmique Et Structure de Donnees USTM
-
Upload
georlain-mavega-kombila -
Category
Documents
-
view
218 -
download
0
Transcript of COURSAlgorithmique Et Structure de Donnees USTM
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
1/232
Algorithmique (objet) et
Structure de données
Licence 2ème annéeFaculté des Sciences USTM
Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
2/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
2 / 232
Remerciements & Copyright Certains transparents sont basés sur des supports trouvés sur :
WebEt d’autres trouvés dans des Livres et cours sur le sujet
Copyright ©
2009-2012 Bienvenu Fassinut-Mombot; all rights
reservedCe support de cours est soumis aux droits d’auteur et n’est donc pas dans ledomaine public. Sa reproduction est cependant autorisée à
condition derespecter les conditions suivantes :
Si ce document est reproduit pour les besoins personnels du reproducteur, touteforme de reproduction (totale ou partielle) est autorisée à
la condition de citerl’auteur.Si ce document est reproduit dans le but d’être distribué
à
des tierces personnes,il devra être reproduit dans son intégralité
sans aucune modification. Cette notice
de copyright devra donc être présente. De plus, il ne devra pas être vendu.Cependant, dans le seul cas d’un enseignement gratuit, une participation aux fraisde reproduction pourra être demandée, mais elle ne pourra être supérieure auprix du papier et de l’encre composant le document.Toute reproduction sortant du cadre précisé
ci-dessus est interdite sans accordpréalable écrit de l’auteur.
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
3/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
3 / 232
““Comment Organiser auComment Organiser au MieuxMieux
ll’’InformationInformation
dansdans
un Programme ?un Programme ?””
Un problème métaphysique ?
TableauxTableaux
intint
tab[10];tab[10];
structstruct
Data_tData_t
{{
intint index_;index_;char* value_;char* value_;
}} Data_tData_t;;
StructuresStructures Structures deStructures de
donndonn
éé
eses
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
4/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
4 / 232
Objectifs…Concevoir et réaliser un algorithme correct et efficace pour un
problème donné.Sensibilisation aux problèmes algorithmiques et à
leur performance,que ce soit sous la forme de complexité
asymptotique ou à
laperformance sur des machines d’aujourd’hui en tenant compte de laperformance du cache, et de la capacité
multiprocesseur.Introduire des types abstraits, discuter leurs implémentationspossibles
Connaître les structures de données séquentielles simples, complexes etarborescentes : tableaux, listes chaînées, piles, files, arbres et graphesFaire un choix argumenté
sur l'utilisation de telle ou telle structure dedonnées ainsi que sur l'algorithme qui la manipule.
Mettre en œuvre des structures de données et les algorithmesassociés dans des programmes écrits en langage C/C++ dont l’aspect
orienté
objet sera réduit au minimumIl ne s'agit pas d'un cours de programmation pur et dur en C/C++
!
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
5/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
5 / 232
Contenu Notions de bases de l’algorithmique
Algorithmique et ProgrammationProcédure de réalisation d’un programme
Structures de donnéesStructures de données élémentairesTableauxTypes composés
ou
structuresPreuve et complexité
algorithmiqueNotion de complexité
algorithmiqueNotion de Récursivité
Structures de données linéaires ou séquentielles
ListesPiles et FilesStructures de données non-linéaires ou arborescentes
ArbresGraphes
ProgrammationNotion de base du langage C/C++Environnement de programmation
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
6/232
Notions de bases de l’algorithmique
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
7/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
7 / 232
Algorithmique et Programmation Qu’est-ce qu’un algorithme ?
Vous avez déjà
ouvert un livre de recettes de cuisine?Avez-vous déjà
déchiffré
un mode d’emploi traduit de l’anglais pour fairefonctionner un magnétoscope, un réveil, digicode…?Si oui?
•
Sans le savoir vous avez déjà
exécuté
des algorithmes.Encore plus fort :
Avez-vous indiqué
un chemin à
un individu égaré?Avez-vous fait chercher un objet à
quelqu’un par téléphone?Si oui?
•
Vous avez déjà
fabriqué
-
et fait exécuter -
des algorithmesDéfinition (selon l’Encyclopédia
Universalis) améliorée :
Un algorithmeest la spécification d’un schéma de calcul, sous forme d’une suite [finie]d’opérations élémentaires [décrites dans un langage universel] obéissant à un
enchaînement déterminé [représentant les calculs nécessaires à la productionde la valeur d’une certaine fonction générale utilisant certaines données].
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
8/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
8 / 232
Algorithmique et Programmation
Exemple : Algorithme de résolution d’une équation
Un algorithme de résolution de l'équation ax+b = 0
données : a et b entiers
Algorithme :
ecrire ("Résolution de l’équation : ax+b=0") lire( a ) , lire( b )
Si a est non nul Alors,
on obtient la solution : x = -b/a
Sinon Si b est non nul Alors,
l'équation est insoluble
Sinon tout réel est solution
Résultat : la solution de l’équation ax+b=0; si elle existe
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
9/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
9 / 232
Algorithmique et Programmation Qu’est-ce qu’un programme ?
Un programme
est la description (traduction) d’un algorithmedans un langage de programmation obéissant à
des règles trèsprécises.Un langage de programmation
est un langage commun entremachine et programmeur qui implante et réalise un algorithme.
Exemple: le langage C/C++ #include #include int main (void) {int a, b;
puts( "Résol ut i on de l ’ équat i on:
ax+b=0\ n" ) ; printf( "a? \n" ) ; scanf( "%d" , &a) ;
printf( "b? \n" ) ; scanf( "%d" , &b) ;
if( a ≠
0) printf( "x=%f \ n" , - b/ a) ;
else if ( b ≠
0) puts( " l ’ équat i on
est i nsol ubl e\ n") ;else puts( "t out r éel estsol ut i on\ n") ;
return EXIT_SUCCESS;}
ALGORITHME:ecr i r e( "Résol ut i on de l ’ équat i on: ax+b=0")l i r e( a) , l i r e( b)Si a est non nul Al or s,
on obt i ent l a sol ut i on : x = - b/ aSi non Si b est non nul Al or s,l ' équat i on est i nsol ubl e
Si non t out r éel est sol ut i on
Structure de contrôle
conditionnelle
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
10/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
10 / 232
Algorithmique et Programmation Quelle est la différence ?
En utilisant des images :•
Si un programme était une construction, l’algorithme serait le plan•
Si un programme était une toile de peinture, l’algorithme seraitl’esquisse
Algorithme :
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
11/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
11 / 232
Algorithmique et Programmation Quelle est la différence ?
En utilisant des images :•
Si un programme était une construction, l’algorithme serait le plan•
Si un programme était une toile de peinture, l’algorithme seraitl’esquisse
Programme :
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
12/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
12 / 232
Un Langage Algorithmique : Comment faire? décrire l’algorithme dans une forme telle que la passage au
programme ne pose plus aucun problème, pour que cette opération decodage devienne une simple mécanique de traduction du LangageAlgorithmique vers le langage cibleHistoriquement, plusieurs types de notations ont été
utilisées pourreprésenter des algorithmes
Descriptions littérairesOrganigrammesPseudo-codes
Les pseudo-codesDéfinition :
un pseudo-code
est une série de conventions qui ressemble àun langage de programmation authentique dont on aurait évacué
la plupartdes problèmes de syntaxe.Remarque :
un pseudo-code est susceptible de varier d’une référence à
une autre. En effet, un pseudo-code est purement conventionnel. Aucunemachine n’est censée le reconnaître.
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
13/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
13 / 232
Squelette d’un algorithme
Spécifications
de l’algorithme
Déclaration des
constantes et des
variables
Corps de l’algorithme(traitements)
/ / BUT : cet al gor i t hme ef f ect ue . . ./ / ENTREE : une l i st e de M noms/ / SORTI E : une l i st e t r i ée par or dr e al phabét i que
/ / CONSTANTES : l es const ant es/ / l ’ i ni t i al i sat i on est obligatoireobligatoire/ / au moment de l eur décl ar at i onCONST : pi
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
14/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
14 / 232
Notion d’instruction Une instruction est un ordre élémentaire -
au sens
algorithmique, que peut exécuter un programme.Les données manipulées par les instructions sont:des variables proprement ditesdes variables constantes
des valeurs littérales ("bonjour", 45, VRAI)des expressions complexes (combinaisons de variables, constanteset valeurs littérales avec des opérateurs)
L’opérateur
d’AFFECTATION, une
"mise
en mémoire" :L’opérateur
d’affectation
permet
de donner
(ou
d’affecter) unevaleur
à
une
variable•
Sa syntaxe
est
la suivante
:nom_de_l a_var i abl e
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
15/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
15 / 232
Notion d’instruction
Opérateurs
d'entrée/sortieClavier et écran
•
LIRE(x) : données
du problème
(usercomputer)permet
de lire au clavier la valeur
de la variable x
•
ECRIRE(x) : affichage
à
l'écran
(computer
user)permet
d’afficher
la valeur
de la variable xFichiers
texte•
Le type FICHIER permet
de lire et d’écrire
dans
un fichier
•
lireF(x,file) : met dans
x la première valeur
lue
dans
le fichier•
ecrireF(x,file) : permet
d’écrire
la valeur
de x dans
le fichier
VAR : f i l e : FI CHI ERFi l e
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
16/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
16 / 232
Notion de séquence
DEBUT
FIN
ACTION 1 :
LIRE(valeur)
Une séquence est une suite d'opérations
élémentaires (ou ACTIONS) dont l'exécution est
séquentielle.
ACTION 2 :
produit
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
17/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
17 / 232
Notion de rupture de séquence
DEBUT
FIN
ACTION 1 :
LIRE(valeur)
L'exécution des opérations élémentaires (ou
ACTIONS 2a et 2b) n'est pas systématique.
Elle dépend d'une "condition".
La lecture d’une rupture de séquence s'effectue
en fonction des éléments transmis "à titre decondition".
ACTION 2a :
ECRIRE("choix a")
RUPTURE
de
SEQUENCE
ACTION 2b :
ECRIRE("choix b")
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
18/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
18 / 232
Structure algorithmique La structure algorithmique
concerne
la concaténation
et
les imbrications de séquences et ruptures de séquences.Ruptures de séquences
ou
structures de contrôle
:Rupture conditionnelle
(et non répétitive) d’instructions•
SI…ALORS...FINSI
•
SI...ALORS…SINON...FINSI•
CAS...PARMI...FINCASPARMI
•
CAS…PARMI…PARDEFAUT...FINCASPARMI
Rupture répétitive
(itérations
et boucles) d’instructions
:•
TANTQUE…FAIRE…FINTANTQUE
•
REPETER…JUSQU'A...
•
REPETER…TANTQUE...
•
POUR…FAIRE...FINPOUR
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
19/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
19 / 232
Rupture conditionnelle (et non répétitive) SI…ALORS…FINSI
ALGORITHME: val eur _absol ue/ / BUT : cal cul e l a val . abs. d’ un ent i er sai si par l ’ ut i l ./ / ENTREE : un ent i er r el at i f sai si par l ’ ut i l i sat eur/ / SORTI E : l a val eur absol ue de l ’ ent i er sai si
VAR:x :ENTIER DEBUT
LI RE( x ) / / af f ect at i on d’ une val eur par l ’ ut i l .SI( x < 0 ) / / si cet t e val eur est négat i ve
ALORS / / al or s cet t e condi t i on est vr ai ex
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
20/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
20 / 232
Rupture conditionnelle (et non répétitive) SI..ALORS..SINON..FINSI
ALGORITHME: max_deux_nombr es/ / BUT : cher che l a val eur max. par mi 2 val eur s sai si es/ / ENTREE : deux r éel s sai si s par l ’ ut i l i sat eur/ / SORTI E : l e maxi mum des deux val eur s
VAR:a, b, max :REELDEBUT
LI RE( a, b)SI( a >= b ) ALORS
max
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
21/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
21 / 232
Rupture conditionnelle (et non répétitive) CAS..PARMI..FINCASPARMI
ALGORITHME: nom_moi s/ / BUT : af f i che l e nom du moi s en f onct i on du numér o/ / ENTREE : un ent i er sai si par l ’ ut i l i sat eur/ / SORTI E : l e nom du moi s cor r espondant au chi f f r e sai si
VAR:moi s :ENTIER DEBUT
LI RE( moi s )CAS( moi s ) PARMI:
CAS1: 1 ECRI RE( " J anvi er " )CAS2: 2 ECRI RE( " Févr i er " ). . .CAS12: 12 ECRI RE( " Décembre" )
FINCASPARMIFIN
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
22/232
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
23/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
23 / 232
Rupture répétitive (et conditionnelle) TANTQUE..FAIRE..FINTANTQUE
ALGORITHME: compt eur _r ebour s/ / BUT : af f i che l a val eur d' un compt eur à r ebour s/ / ENTREE : un ent i er sai si par l ’ ut i l i sat eur/ / SORTI E : l a val eur du compt eur à r ebour s
VAR:nombr e :ENTIER DEBUT
LI RE( nombr e )TANTQUE( nombr e > 0 )FAIRE
ECRI RE( "Val eur du compt eur à r ebour s: " , nombr e )nombre
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
24/232
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
25/232
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
26/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
26 / 232
Rupture répétitive (et inconditionnelle) POUR..FAIRE..FINPOUR
ALGORITHME: compt eur _r ebour s4/ / BUT : af f i che l a val eur d' un compt eur à r ebour s/ / ENTREE : un ent i er sai si par l ’ ut i l i sat eur/ / SORTI E : l a val eur du compt eur à r ebour s
VAR:nombr e :ENTIER
DEBUTLI RE( nombr e )
POUR ( compt eur
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
27/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
27 / 232
Notion de variable
La notion de variable est très importante en
programmationDans un programme informatique, on a, en permanence,besoin de stocker
provisoirement des valeurs :•
données issues du disque dur ;•
données fournies par l'utilisateur (frappées au clavier) ;
•
résultats (intermédiaires ou définitifs) obtenus par leprogramme.
Al i h i S d d é
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
28/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
28 / 232
Notion de variable Du point de vue sémantique, une variable est une entité
qui possède trois caractéristiques :Une variable possède un nom, on parle d’identifiantUne variable possède une valeur
qui évolue au cours de l’exécutiondu programme
Une variable possède un type
qui caractérise l’ensemble desvaleurs qu’elle peut prendreDu point de vue pratique, une variable est une manièremnémotechnique pour désigner un emplacement mémoirerepérée par une adresse
(numéro de la case ou cellulemémoire que la variable occupe au sein de l’ordinateur)
Il n’est pas possible de choisir l’adresse d’une variable, cette
adresse est attribuée automatiquement par l’ordinateurToute variable possède une et une seule adresse
Al i h i S d d é
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
29/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
29 / 232
Notion de variable Le type d’une variable indique au compilateur la manière de stocker lavariable en mémoireEn employant une image
Une variable
est un récipient, que l'ordinateur va repérer par uneétiquette
(un nom). Pour avoir accès au contenu du récipient, il suffit dele désigner par son étiquette.
Il existe plusieurs type de récipients!
De la même manière, il existe plusieurs type de variable…
Al i h i S d d é
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
30/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
30 / 232
Notion de variable
Lorsqu'on déclare une variable, il ne suffit pas de créer
un récipient
(réserver un emplacement mémoire).Il faut encore préciser ce que l'on voudra mettre dedans, car decela dépendent la taille
et la nature
du récipient.
Il est important de connaître comment sont stockées lesvariablescar C/C++ propose de nombreuses manipulations au niveau bit.
La mémoire est une suite de bit structurée en octets (8bits) puis en mots (4 octets, 32 bits).Exemple :
•
L’adresse 1084 doit se lire comme “le 1084eme octet de la mémoire”
Al i h i S d d é
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
31/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
31 / 232
Notion de variable globale/locale Lors de la déclaration des données qui seront utilisées par leprogramme, il y a réservation de
l'espace mémoire pour les variables dédiées au fonctionnement duprogramme principal ou à
chacun des sous programmes.Mais il est possible, aussi, d'effectuer une réservation, non dédiée, devariables dites : GLOBALES.
Les variables globales ont la possibilité
d'être exploiter parl'ensemble du programme et les modules appelés, (c'est-à-dire enlecture et en écriture),
on parle de portée des données
et d'accessibilité.
Chaque programme et sous-programme a son propre espace devariables, inaccessibles par les autres, ces variables sont dites :LOCALES.
L'accès aux valeurs enregistrées peut se faire via adressage (utilisation
d'un pointeur), ce qui permet le limiter ou non ces accès à
tous lesconstituants du programme.
Al ith i t St t d d é
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
32/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
32 / 232
Notion de Pointeur Le pointeur est une variable de type "adresse d’une autre
variable":La déclaration s'effectue sous la forme : VAR: * VAR: *Pnom_de_variablePnom_de_variable : TYPE_POINT: TYPE_POINTÉÉ
//le contenu de//le contenu de Pnom_de_variablePnom_de_variable est de type TYPEest de type TYPE _POINT _POINTÉÉ
•
Exemple : VAR: *Pnombr e_ent i er : POI NTEUR_SUR_ENTI ERL’utilisation s'effectue à
l'aide de l'opérateur &, et permet d’obtenirl’adresse de la variable pointée :&&nom_de_variablenom_de_variable //adresse de//adresse de nom_de_variablenom_de_variable
•
Exemple : Pnombr e_ent i er
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
33/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
33 / 232
Notion de Pointeur Nom Adresse
04DFF5C004DFF5C2
04DFF5C4
04DFF5C6
04DFF5C8
Contenu
5720
04DFF5C2
nombre_entier
Pnombre_entier
04DFF5CA
04DFF5CC
04DFF5CE
04DFF5D0
La valeur de lavariablenombre_entier
(5720)se trouve à
l’adresse04DFF5C2Pnombre_entier
contient l’adresse(04DFF5C2) de lavariablenombre_entier, et se
trouve à
l’adresse04DFF5C8La valeur denombre_entier
(5720)
est accessible à
l'aidede *Pnombre_entier
Al ith i t St t d d é
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
34/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
34 / 232
Notion de Pointeur Allocation dynamique de la mémoire ou réservation
mémoireLa commande se nomme RESERVER( ) et permet d’allouer un espacemémoire pour stocker le contenu qui sera pointé
par le pointeurqui est fourni à
la commande selon la syntaxe suivante :
RESERVER(pointeur)RESERVER(pointeur)
•
Exemple : VAR: *Pnombr e_ent i er : POI NTEUR_SUR_ENTI ERRESERVER( Pnombr e_ent i er )
Lorsque la place en mémoire n’est plus utile, il suffit de lalibérer en utilisant la commande suivante :
LIBERER(pointeur)LIBERER(pointeur)
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
35/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
35 / 232
Structure des programmes Organisation
(ou
découpage) en modules
les traitements doivent être scindés en plusieurs modules (sous-
programmes) et la structure algorithmique principale doit être regroupédans le programme principal en intégrant les appels éventuels aux sous-programmes.Un module peut appelé
un autre module, si ce module appelle le module
appelant, cette spécificité
se nomme : la récursivité
croisée.Un module peut s'appeler lui-même (la récursivité).Un (et un seul) programme principal par programme modulaire
A l'intérieur de ce programme principal, se trouvent des appels aux
modules appartenant au programme.Le programme Principal, peut faire appel à
des procédures ou fonctionsdiverses (se sont les deux sortes de modules ou sous-programmesexistant en algorithmique), ce qui a pour effet de structurer le
programme, de réduire sa place en mémoire ainsi que son écriture, etsurtout, de faciliter sa maintenance.
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
36/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
36 / 232
Structure du programme principal // zone de déclaration des constantes et variables// globales accessibles par le programme principal ainsi
// que ses modules (ou sous-programmes)CONSTGLOBALE: // ou CONST: puisque placé en tête
... // données constantes globales VARGLOBALE: // ou VAR:
... // données variables globales du programme
// nom du programme principalPROGRAMME: nom_du_pr ogr amme// déclaration des constantes et variables localesCONST:
... // données constantes locales du programme
VAR:... // données variables locales du programme
DEBUT... // corps du programme principal
FIN
// fin du programme principal
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
37/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
37 / 232
Notion de Procédure et Fonction Une
procédure
ou
une
fonction
est
un sous-programme
qui a pourobjectif
de réaliser
une
tâche
particulière
(et une
seule) qui lui
estpropre.Points communs
entre une
procédure
et une
fonction
:Les sous-programmes
disposent
d'une
zone propre
de réservation
et destockage
des données, en fonction
du nombre
et du type de celles-ci.Afin
de faire communiquer
le programme
et le sous-programme, il
estpossible (mais
facultatif) de transmettre
un ou
plusieurs
paramètres aumodule appelé
(c'est
à
dire, la valeur
de certaines
variables utiles
aumodule).
Différences
fondamentales
entre une
procédure
et une
fonction
:Une procédure ne peut pas transmettre, en retour
(en fin d'appel) devaleur
issue de l'objectif du module, au programme (ou sous-programme)appelant.
Une fonction peut transmettre
(facultativement), au terme de sonappel, une et une seule donnée
au programme appelant.
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
38/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
38 / 232
Programme principal et Procédure PROCEDURE: nom_pr ocedur e( ) // nom de la procédure// zone de déclaration des constantes de la procédureCONST: // suite de déclaration de données constantes// zone de déclaration des variables de la procédure VAR: // suite de déclaration de données variablesDEBUTPROCEDURE // début effectif de la procédure
... // zone de la procédureFINPROCEDURE // fin de la procédure//-------------------------------------------------------------// nom du programmePROGRAMME: nom_du_pr ogr amme// zone de déclaration des constantes du programme principalCONST: // suite de déclaration de données constantes// zone de déclaration des variables du programme principal VAR: // suite de déclaration de données variablesDEBUT // début effectif du programme principal
... // zone du programme principal
nom_pr ocedur e( ) // appel de la procedureFIN // fin du programme principal
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
39/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
39 / 232
Programme principal et Fonction FONCTION: nom_f onct i on( ) :ENTIER // nom et type de la fonction// zone de déclaration des constantes de la fonctionCONST: // suite de déclaration de données constantes// zone de déclaration des variables de la fonction VAR: r esul t at :ENTIER DEBUTFONCTION // début effectif de la fonction
... // zone de la fonctionRETOURNER: r esul t at //un seul pour une meilleure lisibilitéFINFONCTION // fin de la fonction//-------------------------------------------------------------// nom du programmePROGRAMME: nom_du_pr ogr amme// zone de déclaration des constantes du programme principalCONST: // suite de déclaration de données constantes// zone de déclaration des variables du programme principal VAR: var _ent i er e :ENTIER DEBUT // début effectif du programme principal
... // zone du programme principalvar _ent i er e
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
40/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
40 / 232
Notion de paramètre formel / réel On appelle "paramètre(s)", les noms des variables placés dans ladéfinition d'une procédure ou d’une fonction, lors de la déclaration oudans l'écriture de son appel.Ce sont des variables locales à
la procédure ou à
la fonction, et à
cetitre, ils sont déclarés dans l'en-tête du sous programme, entreparenthèses : ce sont les paramparamèètres formelstres formels.
Ils n’ont pas de valeur particulière dans la définition du sous-programmeLes paramètres, inscrits lors de l'appel au module, servent à
communiquer avec le sous-programme prédéfini : ce sont lesparamparamèètres rtres rééelsels
(ou effectifs)effectifs)
appelés aussi argumentsarguments.Lorsque les paramètres sont de type "donnée" (et non un adressage àl'aide d'un pointeur sur la donnée), ils contiennent effectivement lesvaleurs avec lesquelles sera effectué
le traitement du sous-programme.Lors de l'appel, leur valeur est recopiée dans les paramètres formels
correspondants à
l'emplacement prédéfini (l'ordre est conservé).
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
41/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
41 / 232
Variables Locales et Paramètres : passage par valeur
PROCEDURE: i ncr ement e( val eur :ENTIER )
DEBUTPROCEDUREval eur
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
42/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
42 / 232
Variables Locales et Paramètres : passage par pointeur
PROCEDURE: i ncr ement e( Pval eur
:POINTEUR_SUR_ENTIER )DEBUTPROCEDURE
*Pval eur
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
43/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
43 / 232
Pause-réflexion sur cette partie
Avez-vous des questions ?
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
44/232
Structures de données
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
45/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
45 / 232
Structure de données : Introduction Structures de données ?
Définition :
une structure de donnée
est un moyen de coder etde structurer les données manipulées.Exemple :
Données
Algorithme
Résultats
Structures
de
données
Programme = Algorithme + Structures de données
Type suite = t abl eau [ 1. . N] d’ ent i er s
etudiant = st r uct ur enom, pr énom : chaî ne de car act èr es
âge : ent i er posi t i f
sexe : car act èr e
. . .
f i n st r uct ur e
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
46/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
46 / 232
Structure de données élémentaires
Opérateurs et Symboles
Type
ENTIER
(4 octets
ou
32 bits)
Opérations
possibles
AdditionSoustraction
Multiplication
DivisionExposant
Modulo
Comparaisons
Opérateurs associés, symboles,
mot clés correspondants
+-
*
DIV (Pour la division entière)^
MOD (Pour le reste d’une division)
< >= =
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
47/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
47 / 232
Structure de données élémentaires
Opérateurs et Symboles
Type
REEL
(8 octets
ou
64 bits)
Opérations
possibles
Addition
Soustraction
Multiplication
Division
Exposant
Comparaisons
Opérateurs associés, symboles,
mot clés correspondants
+
-
*
/
^
< >= =
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
48/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
48 / 232
Structure de données élémentaires
Opérateurs et Symboles
Type
CARACTERE
(1 octet
ou
8 bits)
Opérations
possibles
Comparaison
Extraction
Opérateurs associés, symboles,
mot clés correspondants
< >= =
CARACTERE
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
49/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
49 / 232
Structure de données élémentaires
Opérateurs et Symboles
Type
CHAINE
Opérations
possibles
Concaténation
Longueur
Extraction
Opérateurs associés, symboles,
mot clés correspondants
CHAINE
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
50/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
50 / 232
Structure de données élémentaires
Opérateurs et Symboles
Type
BOOLEEN
(1 octet
ou
8 bits)
Opérations
possibles
Comparaison
Négation
Conjonction
Disjonction
Opérateurs associés, symboles,
mot clés correspondants
=
NON (il se note aussi ¬)
ET
OU
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
51/232
g q Dr. Bienvenu FASSINUT-MOMBOT
51 / 232
Structure de données élémentaires
Opérations élémentaires : Déclaration
nom_de_la_donnee :ENTIER
nom de la donnée
type élémentaire
Nom attribué à la
donnée déclarée.
Le type est toujours
précédé du signe :
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
52/232
g q Dr. Bienvenu FASSINUT-MOMBOT
52 / 232
Structure de données élémentaires Opérations élémentaires : Initialisation (avec
déclaration)
nom_de_la_donnee
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
53/232
g q Dr. Bienvenu FASSINUT-MOMBOT
53 / 232
Structure de données élémentaires Opérations élémentaires : Affectation (hors
déclaration)
nom_de_la_donnee
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
54/232
g q Dr. Bienvenu FASSINUT-MOMBOT
54 / 232
Structure de données élémentaires
Opérations élémentaires : Utilisation
autre_donnee
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
55/232
g q Dr. Bienvenu FASSINUT-MOMBOT
55 / 232
Structure de données élémentaires
Opérations élémentaires : Ré-affectation
nom_de_la_donnee
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
56/232
g q Dr. Bienvenu FASSINUT-MOMBOT
56 / 232
Les tableaux : spécificités et contraintesLes tableaux permettent de manipuler de nombreusesvariables représentant des valeurs distinctes de mêmenature (type), d’une manière très compacteLors de la déclaration, un type de donnée élémentaireest affecté
au tableau.
L'accès aux données d'un tableau se fait par le biaisd'un indice dans une dimension propre.La principale caractéristique des tableaux est d'avoir lapossibilité
de représenter un domaine à
une, deux, voire
trois dimensions.En algorithmique, il est même possible de dépasser cette 3èmedimension, toujours dans un but de simplification de l'écriturealgorithmique.
En revanche, dans certains langages, cette limite est parfoissituée à
deux ou trois.
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
57/232
g q Dr. Bienvenu FASSINUT-MOMBOT
57 / 232
Les tableaux : Représentation graphique
Tableaux
Deux dimensions
Une dimension
Trois dimensions
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
58/232
Dr. Bienvenu FASSINUT-MOMBOT
58 / 232
Les tableaux : Opérations élémentaires
nom_du_tableau [ indice_min . . indice_max ] :TYPE
nom du tableau
indice minimum
Nom attribué au tableau
déclaré.
L'indice minimum correspond
à l'indice du premier élément
du tableau (la première casemémoire).
Déclaration
indice maximum
L'indice maximum correspond à l'indice dudernier élément du tableau (la dernière case
mémoire). L'indice minimum et l'indice maximum
sont toujours séparés par 2 points " . . "
type élémentaire
Le type élémentaire (ENTIER,
REEL, CARACTERE, CHAINE,
BOOLEEN), est toujours précédédu signe :
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
59/232
Dr. Bienvenu FASSINUT-MOMBOT
59 / 232
Les tableaux : Opérations élémentaires
nom du tableau
Nom attribué au tableau
déclaré.
Initialisation globale (avec déclaration)
indice maximum
Les indices minimum et maximumcorrespondent aux indices du premier et du
dernier (respectivement) élément du tableau.
nom_du_tableau [ indice_min . . indice_max ]
{ élément1 , élément2 , élément3 , … } :TYPE
valeurs affectées initialement
Les valeurs affectées init ialement sont
notées entre accolades et séparéespar une virgule. Le signe d'affectation
est inscrit avant la première accolade.
type élémentaire
Le type élémentaire (ENTIER,
REEL, CARACTERE, CHAINE,BOOLEEN), est noté après les
valeurs affectées.
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
60/232
Dr. Bienvenu FASSINUT-MOMBOT
60 / 232
Les tableaux : Opérations élémentaires
nom du tableau
Nom attribué au tableau
déclaré.
Affectation unitaire (hors déclaration)
nom_du_tableau [ indice_courant ] valeur
indice courant
valeur
L'indice courant est une valeur entière permettant d'adresser la case mémoire pour
y insérer une valeur. L'indice courant peut être sous la forme d'un chiffre compris
entre les indices min et max, une variable entière, une opération arithmétiquecomprenant une ou plusieurs variables et/ou des valeurs entières.
Valeur affectée dans le tableau à l'indice
courant. L'affectation est indiquée grâce au
symbole situé à la gauche de la valeur.
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
61/232
Dr. Bienvenu FASSINUT-MOMBOT
61 / 232
L'indice courant est une valeur entière permettant
d'adresser la case mémoire pour y l ire la valeur
affectée. L'indice courant peut être sous la forme
d'un chiffre compris entre les indices min et max,
une variable entière, une opération arithmétique
comprenant une ou plusieurs variables et/ou des
valeurs entières.
Les tableaux : Opérations élémentaires
nom de la donnée
Nom d'une donnée de même
type que la valeur affectée
issue du tableau.
Utilisation unitaire
autre_donnee nom_du_tableau [ indice_courant ]
nom du tableau
indice courant
Nom du tableau dont est extraite la valeur affectée à
l'autre donnée, grâce à l'adressage de la case
mémoire obtenue à l'aide de l'indice courant.
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
62/232
Dr. Bienvenu FASSINUT-MOMBOT
62 / 232
Les tableaux : Opérations élémentaires
nom du tableau
Nom du tableau dont la valeur adressée à
l'aide de l'indice courant est ré-affectée.
Ré-affectation unitaire
nom_du_tableau [ indice_courant ]
nom_du_tableau [ indice_courant ] + 1
nom du tableau indice courant
Nom du tableau
contenant la valeur
d'affectation.
L'indice courant du tableau dont la
valeur est extraite peut être différent
de celui de la ré-affectation.
opération
Opération lors
de l'affectation
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
63/232
Dr. Bienvenu FASSINUT-MOMBOT
63 / 232
Les tableaux : Opérations élémentaires
nom_du_tableau [ indice_min1d . . indice_max1d ]
[ indice_min2d . . indice_max2d ] :TYPE
nom du tableau
Nom attribué au tableau
déclaré.
Déclaration
indices première dimension
Les indices minimum et maximum
correspondent ici à la première dimension du
tableau. L'indice minimum et l'indice maximum
sont toujours séparés par 2 points " . . "
indices seconde dimension
Les indices minimum et maximum
correspondent ici à la secondedimension du tableau.
type élémentaire
Le type élémentaire (ENTIER, REEL,
CARACTERE, CHAINE, BOOLEEN), esttoujours précédé du signe :
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
64/232
Dr. Bienvenu FASSINUT-MOMBOT
64 / 232
Les tableaux : Opérations élémentaires
nom du tableau
Nom attribué au tableau
déclaré.
Initialisation globale (avec déclaration)
nom_du_tableau [ indice_min1d . . indice_max1d ]
[ indice_min2d . . indice_max2d ]
{ {élément1 , élément2 , … },{…},…} :TYPE
indices minimum et maximum
Les indices minimum et maximum
correspondent ici à la première dimension du
tableau pour les premiers crochets, à la
seconde pour les suivants.
ouverture première dimensionLa première accolade signif ie l'ouverture de la
première dimension. Il y a autant d'ouverture
d'accolades pour la seconde dimension que
indice_max1d.
seconde dimensionLes éléments sont ordonnés dans la
seconde dimension, entre
accolades.
Algorithmique et Structure de données
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
65/232
Dr. Bienvenu FASSINUT-MOMBOT
65 / 232
Les tableaux : Opérations élémentaires
nom du tableau
Nom attribué au tableau
déclaré.
Affectation unitaire (hors déclaration)
nom_du_tableau [ indice_courant1d ]
[ indice_courant2d ] valeur
indice courant première dimension
L'indice courant est ici l 'indice de la première
dimension.
indice courant seconde dimension
L'indice courant est ic i l 'indice de la seconde dimension.
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
66/232
Algorithmique et Structure de donnéesD Bi FASSINUT MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
67/232
Dr. Bienvenu FASSINUT-MOMBOT
67 / 232
Les tableaux : Opérations élémentaires
nom_du_tableau [ indice_min1d . . indice_max1d ]
[ indice_min2d . . indice_max2d ]
[ indice_min3d . . indice_max3d ] :TYPE
nom du tableau
Nom attribué au tableau
déclaré.
Déclaration
indices
indices troisième dimensionLes indices minimum et maximum
correspondent ici à la troisièmedimension du tableau.
type élémentaireLe type élémentaire (ENTIER, REEL,
CARACTERE, CHAINE, BOOLEEN), esttoujours précédé du signe :
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
68/232
Algorithmique et Structure de donnéesD Bi FASSINUT MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
69/232
Dr. Bienvenu FASSINUT-MOMBOT
69 / 232
Les tableaux : Exemple 2 Tableau à deux dimension
calendrier [ 1..12 ] [ 1..31 ] :CHAINE
1 2 3 4 5 6 7 8 9 10 11 12
1
2
3
4
30
31
… …
première dimension
s
e c o n d e d i m e n s i o n
Algorithmique et Structure de donnéesD Bi FASSINUT MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
70/232
Dr. Bienvenu FASSINUT-MOMBOT
70 / 232
Les tableaux : Exemple 3 calendrier [ 1..12 ] [ 1..31 ] [ 1..5 ] :CHAINE
première dimension
s
e c o n d e
d i m e n s i o n
t r o i s i è m e d i m e n s i o n
Algorithmique et Structure de donnéesDr Bienvenu FASSINUT MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
71/232
Dr. Bienvenu FASSINUT-MOMBOT
71 / 232
Les types composés ou structures Création de types par le programmeur
À
l’instar des tableaux permettant de regrouper des variables demême type, il existe la possibilité
de regrouper des variables detypes quelconques au sein de types créés par le programmeur enfonction de ses besoins.Exemple: l’objet «
personne
»
du monde réel possède énormement
de propriétésOn utilise la syntaxe suivante : par convention de nommage, unnom de type composé
doit systématiquement commencer par ‘t _ ’STRUCTURESTRUCTURE t _nom_du_t ypet _nom_du_t ype
nom_champ_1 : t ype_champ_1nom_champ_1 : t ype_champ_1
……nom_champ_nnom_champ_n :: t ype_champ_nt ype_champ_n
Utilisation et Accès aux champsVARVAR nom_denom_de var i abl e :var i abl e : t _nom_du_t ypet _nom_du_t ype / / d/ / dééf i ni t i on de VARf i ni t i on de VARnom_de_var i abl enom_de_var i abl e.. nom_du_champnom_du_champ / /acc/ /accèèss àà un champun champ
Algorithmique et Structure de donnéesDr Bienvenu FASSINUT MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
72/232
Dr. Bienvenu FASSINUT-MOMBOT
72 / 232
Les types composés ou structures Création de types par le programmeur
Opérateur d’affectation•
C’est le seul opérateur que l’ordinateur peut appliquer auxstructures car il s’agit de recopier les champs d’une variable
de type composé
dans les mêmes champs d’une autre variabledu même type.Structures contenant des tableaux
•
Lorsqu’un champ est de type tableau, il est nécessaire de
stocker sa taille utile dans un champ de la structureStructures définies à
l’aide de structures•
Un champ d’une structure peut être d’un type composé, c’est-
à-dire une structure définie au préalable
Algorithmique et Structure de donnéesDr Bienvenu FASSINUT MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
73/232
Dr. Bienvenu FASSINUT-MOMBOT
73 / 232
Les types composés ou structures Pointeurs vers les structures
Soit t_comun type composé
(une structure). Définir un pointeur ptrvers un contenu de type t_coms’écrit comme suite : VAR VAR **pt rptr :: t_comt_com
Son initialisation est la suivanteSon initialisation est la suivanteRESERVER(RESERVER( pt rpt r ))
Il est alors possible dIl est alors possible d’’accaccééderder àà
ses champsses champs àà
ll’’aide laide l’’une des deuxune des deuxnotationsnotations ééquivalentes ciquivalentes ci--dessousdessous( *( *pt rpt r ) .) . nom_du_champnom_du_champ nom_du_champnom_du_champ
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
74/232
Dr. Bienvenu FASSINUT-MOMBOT
74 / 232
Pause-réflexion sur cette partie
Avez-vous des questions ?
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
75/232
Travaux Dirigés (TD)
Algorithmique et Structure de donnéesDr Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
76/232
Dr. Bienvenu FASSINUT-MOMBOT
76 / 232
TD 1 : Structure de contrôle Exercice
1 : SI..ALORS..FINSIEnoncé
: Un élève
entre la valeur
d'une
moyenne
pour un examen, le
programme
indique
la réussite
s'il
obtient
une
note supérieure
ou
égale à12.Exercice
2 : SI..ALORS..SINON..FINSIEnoncé
: En fonction du prix d'un produit HT et de la catégorie decelui-ci (luxe: TVA=19,6 % ; autre: TVA=5,5 %), le programme calcule savaleur TTC.Exercice
3 : CAS..PARMI..PARDEFAUT..FINCASPARMIEnoncé
: En fonction du numéro du mois choisi par l'utilisateur, leprogramme affiche le nombre de jours correspondant (les annéesbissextiles ne sont pas prises en compte).
Exercice
4 : TANTQUE..FAIRE..; REPETER..TANTQUE/JUSQU’A..;Enoncé
: Le programme affiche systématiquement chaque mot quel'utilisateur frappe jusqu'à
ce que le mot "fin" soit saisi. Le programmes'arrête à
ce moment-là, le mot “fin”
étant le dernier à
apparaître surl’écran.
Algorithmique et Structure de donnéesDr Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
77/232
Dr. Bienvenu FASSINUT MOMBOT
77 / 232
TD 1 : Structure de contrôle Exercice
1 résolu
: SI..ALORS..FINSIEnoncé
: Un élève
entre la valeur
d'une
moyenne
pour un examen, le programme
indique
la réussite
s'il
obtient
une
note supérieure
ou
égale
à
12. ALGORITHME: examen/ / BUT : dét er mi ne l ' obt ent i on d' un examen/ / ENTREE : un ent i er sai s i par l ’ ut i l i sat eur/ / SORTI E : l a val eur bool éenne i ndi quant l e r ésul t at
VAR:moyenne :REELexamen = 12 ) / / si moyenne est sup. ou ég. à 12 ALORS / / al or s cet t e condi t i on est vr ai e
examen
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
78/232
Dr. Bienvenu FASSINUT MOMBOT
78 / 232
TD 1 : Structure de contrôle Exercice
2 résolu
: SI..ALORS..SINON..FINSIEnoncé
: En fonction du prix d'un produit HT et de la catégorie de celui-ci (luxe:
TVA=19,6 % ; autre: TVA=5,5 %), le programme calcule sa valeur TTC. ALGORITHME: pr i x_t t cCONST:
t va_l uxe
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
79/232
Dr. Bienvenu FASSINUT MOMBOT
79 / 232
TD 1 : Structure de contrôle Exercice
3 résolu
: CAS..PARMI..PARDEFAUT..FINCASPARMIEnoncé
: En fonction du numéro du mois choisi par l'utilisateur, le programme
affiche le nombre de jours correspondant (les années bissextiles ne sont pasprises en compte). ALGORITHME: nombr e_j our s VAR:
moi s :CHAINE
nbr e_j our s :ENTIER DEBUT
LI RE( moi s )CAS( moi s ) PARMI:
CAS1: "Févr i er " nbr e_j our s
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
80/232
Dr. Bienvenu FASSINUT MOMBOT
80 / 232
TD 1 : Structure de contrôle Exercice
4 résolu
: TANTQUE..FAIRE..; REPETER..TANTQUE/JUSQU’A..;Enoncé
: Le programme affiche systématiquement chaque mot que l'utilisateur
frappe jusqu'à
ce que le mot "fin" soit saisi. Le programme s'arrête à
ce moment-là, le mot “fin”
étant le dernier à
apparaître sur l’écran. ALGORITHME: mot s_t apes2/ / af f i chage du mot t apé dés l or s que cel ui - ci/ / n' est pas l e mot "f i n"
VAR:mot :CHAINE
DEBUTREPETER
LI RE( mot )ECRI RE( mot )
TANTQUE( mot " f i n" )FIN
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
81/232
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
82/232
Preuve et Complexité Algorithmique
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
83/232
83 / 232
Notion de qualité d’un algorithme Il existe plusieurs algorithmes pour résoudre un mêmeproblème
Certains sont plus faciles que d’autres à
programmer...Certains sont plus efficace que d’autres…
Choix :
du plus facile à
comprendre, à
coder et à
debuggerdu plus rapide et utilisant efficacement les ressources2 cas typiques qui nécessitent des algorithmes efficaces:
taille du problème énorme
code exécuter un grand nombre de foisRecherche d'algorithme plus efficace et si possiblesimple
Analyse empirique d'un algorithme
Analyse mathématique d'un algorithme
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
84/232
84 / 232
Notion de qualité d’un algorithme Analyse empirique d'un algorithme
Soit 2 algorithmes réalisant la même tâche•
compare temps d'exécution sur des entrées typiques•
3 s ou 30 s d'attente pour l'utilisateur feront une grandedifférence
•
permet aussi de valider une analyse mathématiqueSi le temps d'exécution devient trop long, l'analyse
mathématique s'impose
•
attente pouvant être de l'ordre de l'heure ou du jourNécessite l'implémentation (écriture en langagemachine, exemple langage C/C++) d'une premièreversion de l'algorithme !!!
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
85/232
85 / 232
Notion de qualité d’un algorithme Analyse mathématique d'un algorithme
L'analyse mathématique d'un algorithme peut-être complexeUne spécialité
en informatiqueParamètres hors de portée du programmeur :
•
temps d'exécution d'une instruction•
ressources partagées
•
dépendance des données en entrée•
certains algorithmes sont tout simplement complexes et il n'y a pasde résultat mathématique pour les décrire
Néanmoins il est possible de prédire
•
la performance d'un algorithme•
si un algorithme est meilleur qu'un autrePremières étapes:
•
identifier les opérations abstraites de l'algorithmes–
exemple de la triple boucle, le nombre d'exécutions de l'instruction :count++• Ne pas tenir compte du temps en milliseconde
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
86/232
86 / 232
Notion de complexité d’un algorithme La fonction de complexité
d’un algorithme fait correspondre pourune taille donnée le nombre maximum d’instructions élémentaires qui
lui est nécessaire pour résoudre une instance quelconque de cettetaille.Soit c(x) = Nombre d’instructions élémentaires de l’algorithme A surl’entrée x alors le nombre maximum d’instructions élémentaires s’écrit
C(n) = max|x| de taille n c(x), où
|x| est la taille de x
En d’autres termes:La complexité
d’un algorithme
est une estimation du nombre d’opérationsde base
ou d’opérations élémentaires
effectuées par l’algorithme enfonction de la taille des données en entrée de l’algorithme.
On ne s’intéresse pas en général à
la complexité
exacte, mais à
sonordre de grandeur, c-à-d., on s’intéresse plutôt à
C(n) lorsque n est"grand".On parle d’ordre de grandeur asymptotique
ou complexité
asymptotique.La complexité
d’un algorithme est une mesure inhérente à
l’algorithme
(la méthode), elle ne dépend pas de la machine surlaquelle on l’implante.
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
87/232
87 / 232
Notion de complexité : Type de complexité L’algorithme A a une complexité
linéaire
si, lorsque n est grand, C(n)est proportionnelle à
n.
Mathématiquement, il faut qu’il existe une constante a
0 telle que :
Terminologie
(a, b sont des constantes, a > 0 et b > 1) :
Pour une fonction f (n) telle que lim
supn∞
C(n)/f(n)=a :f(n) type de complexité
1 constante : instructions exécutées un nombre limité
de fois;
n linéairen2 quadratique : utilisable sur de petits problèmes;bn exponentielle
logb
n logarithmique : division du problème pour le résoudrenb polynomiale
limsup ( ) /n
C n n a
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
88/232
88 / 232
Notion de complexité : Type de complexité Différence entre complexité
de l’ordre de 2n/2
et de n6
La différence est énorme ! Si l’on suppose qu’un ordinateur peutexécuter une instruction élémentaire en 10-9
s (1 GHz), soit 1milliard d’instructions par seconde, alors :
n (bits) temps pour 2n/2 temps pour n632 232/2
x 10-9
≈
65 μs 326
x 10-9
≈
1 s
64 264/2
x 10-9
≈
4 s 646
x 10-9
≈
1 mn 8 s
128 2128/2
x 10-9
≈
584 ans 1286
x 10-9
≈
1h13256 2256/2
x 10-9
≈
1011
Mans 2566
x 10-9
≈
3,5 jours512 2512/2
x 10-9
≈
1052
Mans 5126
x 10-9
≈
6,8 mois
1024 21024/2
x 10-9
≈
10128
Mans 10246
x 10-9
≈
36 ans
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
89/232
89 / 232
Notion de complexité : Type de complexité Dans la pratique, on cherche bien sûr des algorithmes de complexitéla plus faible possible.
Les complexités exponentielles sont donc à
éviter.Parfois, ce n’est pas possible ! Voici un problème de complexité
doublement exponentielle, où
tout algorithme a une complexité
Données (entrée) :
un entier x (écrit en base 10).Résultats (sortie) :
tous les entiers de x chiffres.
y a 10x
entiers de x chiffres, donc la complexité
est au moins 10x
.Or, la taille de l’entrée est ici de n ≈
log10
x. Autrement dit x ≈
10n.La complexité
de ce problème est au moinsContrairement à
ce qu’on pourrait croire, il existe des problèmes quine possèdent pas d’algorithme pour les résoudre, quelque soit leur
complexité
!On parle de problème indécidable.
10( ) 10n
C n
1010 10n x
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
90/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
91/232
91 / 232
Notion de complexité : Notation en O() On dira d’une fonction f(n) qu’elle est en O(g(n)) s’il existe deuxconstantes c > 0 et n0
≥
0 telles que |f (n)| ≤
c x |g(n)| pour toutes les
valeurs de n ≥
n0
, où
n est le nombre d'éléments à
traiter parl'algorithmesi n < n0
on ne connaît pas le comportement de l'algorithmeCette notation permet de :
limiter l'erreur quand on ignore les termes plus petits dans une
formulemathématiquelimiter l'erreur quand on ignore certaines parties du programme quiprennent peut de tempsclasser les algorithmes en fonction de leur comportement asymptotique
(avec n grand)•
On parle d’ordre de grandeur
et de complexité
asymptotique.L’idée est qu’il ne sert à
rien de calculer la complexité
d’unalgorithme à
l’unité
près.Par exemple, sur une machine à
1 GHz et pour n = 109, l’exécution de n ou
n + 1 instructions élémentaires prendrons 1 s dans les deux cas, ladifférence étant en pratique indiscernable !
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
92/232
92 / 232
Notion de complexité : Notation en O() Exemple
si la complexité
de l’algorithme A est CA
(n) = 3n -
2 et
celle de l’algorithme B est CB
(n) = 1/2n2
+ √n -
1, alors on noteraCA
(n) = O(n) et CB
(n) = O(n2).•
C’est une façon de dire que la complexité
de A est linéaire et celle deB quadratique.
Attention!C(n) = O(g(n)) est une notation!Si C1
(n) = O(n) et C2
(n) = O(n), alors il est faux de dire que C1
(n) =
C2
(n) ou encore que C1
(n) –
C2
(n) = 0 !
En effet, peut-être que C1
(n) = 3n et C2
(n) = n + 2√n.Mais il est correct d’écrire : C1
(n) + C2
(n) = O(n).En effet, C1
(n) + C2
(n) = 4n + 2√n ≤
5n pour tout n > 4
(car 2√n ≤
n 2 ≤ √n 4 ≤
n) où
n0
= 4 c = 5 dans la définition dela notation grand O.
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
93/232
93 / 232
Notion de complexité : principe de calcul Déterminer la complexité
algorithmique c’est "compter" le nombred’instructions qui seront exécutées ;
Pour une instruction élémentaire le coût est considéré
unitaire(constant)elle est indépendant de la taille de ses opérandes.
Deux expressions sont supposées équivalentes du point de vue ducoût car proportionnelles.Pour une instruction conditionnelle, en l’absence d’informationscomplémentaires, on choisit le nombre maximum d’instructionsauquel s’ajoute l’évaluation de l’expression booléenne.
Pour une instruction itérative, en l’absence d’informationscomplémentaires, on multiplie le nombre d’instructions internes à
laboucle au nombre de fois que cette boucle sera exécutée.Pour une instruction itérative conditionnelle, il faut évaluer
le cas au pire.
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
94/232
94 / 232
Notion de complexité Temps d’exécution
Comme une instruction élémentaire prend un temps constant(disons en secondes), indépendant des opérandes et donc de lataille des entrées, la complexité
peut donner une idée du tempsd’exécution du programme T qui s’exécuterait sur une entrée detaille n
temps(T, n) ≤
a ·
C(n)
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
95/232
95 / 232
Notion de Récursivité : Définition La récursivité
Concept fondamental :•
en mathématique :–
relation de récurrence :n! = n(n - 1)! pour n >= 1 avec 0! = 1
•
en informatique :–
fonctions récursives.Principe en algorithmique
Qui s’appelle lui-même.
Appels de plus en plus «
simples
».•
Évité
les Récursivités croisées : Un sous-programme SP1 appelle unsous-programme SP2 qui rappelle le sous-programme SP1.
Solution directe pour le dernier appel.Respect de la condition d’arrêt.
•
Existence d’une condition de sortie de la boucle récursive.
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
96/232
96 / 232
Notion de Récursivité : Exemple Instruction répétitive et récursivité
Calcul non récursif (itérative) de la factorielle/ / ALGORI THME Cal cul non r ecur si f ( i t ér at i ve) de l a f act or i el l eFONCTION: f act _non_r ecur si f ( n : ENTI ER) : ENTI ER VAR:
compt eur
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
97/232
97 / 232
Notion de Récursivité : Exemple Instruction répétitive et récursivité
Calcul récursif de la factorielle/ / ALGORI THME Cal cul r ecur si f de l a f act or i el l eFONCTION: f act _r ecur si f ( n : ENTI ER) : ENTI ER VAR:
r esul t at : ENTI ERDEBUTFONCTION
SI ( n = 0 ) ALORS
r esul t at
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
98/232
98 / 232
Notion de Récursivité : Intérêts Intérêts
Technique efficace de simplification de l'écriture d'unalgorithme de résolution d'un problème.L'algorithme récursif est défini (et élaboré) en fonction de lui-même.
Certaines structures de données peuvent contenir une mêmestructure en interne•
un répertoire d'ordinateur est composé
de fichiers et de dossiers,ces dossiers peuvent contenir d'autres fichiers et dossiers,quasiment à
l'infini….
Un problème, dans certains cas, peut se ramener au mêmeproblème de taille inférieure et ainsi de suite jusqu'à
obtenir unproblème élémentaire. Le concept de récursivité
estparfaitement adapté
avec cette catégorie de problèmes.
•
Par exemple, pour le calcul du factorielle de N : N !
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
99/232
99 / 232
Notion de Récursivité : Contraintes Contraintes
S’assurer que la fonction est complètement définie sur tout sondomaine d’application.Etre certain que l’algorithme aboutira sur un cas connu :
•
le cas d’arrêt de la récursivité.
Contrôler que le contexte d'utilisation est parfaitement adaptéaux inconvénients de la récursivité
en informatique :•
besoins en ressources systèmes (plus particulièrement en gestion del'espace mémoire) ;
•
les variables temporaires du programme ou de la fonction quiprovoque l'appel sont sauvegardées temporairement dans unestructure de type "pile" (vérifier la taille de la pile et le type de lapile : allocation statique ou dynamique).
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
100/232
100 / 232
(fact(3)) Exemple, Calcul de la factorielle fact()appel
2
3
2
6
1 1
3
2
1
0
3 x fact(3-1)
2 x fact(2-1)
1 x fact(1-1)
1
nappelappelappel
3 x 2
fact(3)
2 x 1
fact(2)
1 x 1
fact(1)
fact(0)
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
101/232
101 / 232
Exemple, Calcul de la factorielle (fact(3)) Gestion de la pile en récursivité
Une pile d’exécution est utilisée lors des appels récursifs :
EMPILER( 3 )
EMPILER( 2 )EMPILER( 1 )
DEPILER()DEPILER()DEPILER() 3
2
1
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
102/232
102 / 232
Et il y a aussi… Fibonacci Exemple :
Un robot peut avancer par des pas de 1 ou 2
mètres.Calculer le nombre de façons différentes
Distance Suite de pas Nb depossibilités
1 1 1
2 1,1 ou 2 2
3 1, 1, 1 ou 1, 2 ou 2, 1 3
4 1,1,1,1 ou 1,1,2 ou 1,2,1 ou 2,1,1 ou 2,2 5
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
103/232
103 / 232
Et il y a aussi… Fibonacci Pas(n): Nombre depossibilités pourparcourir n mètres.Pas(1) = 1, Pas(2) = 2; Pour n>2:
Si premier pas = 1 mètres,il reste n-1 mètres
->Pas(n-1) Si premier pas = 2 mètres,il reste n-2 mètres
->Pas(n-2)
Donc, Pas(n) =
Pas(n-1)+Pas(n-2)
Entrée: n
Sortie: Pas(n)Procédure Pas (n)
Si n=1 ou n=2 alors
Retourne n
Retourne Pas(n-1) + Pas(n-2)
Fin Pas
Séquence de Fibonacci:
f 1 = 1
f 2 = 2
f n = f n-1 + f n-2 pour n>2
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
104/232
104 / 232
"Dérécursiver" dérécursiver
=transformer un algorithme récursif en algorithme itératif c-à-d.un algorithme équivalent ne contenant pas d’appels récursifsdiminuer la taille de la pile
pour des raisons d'efficacité
(économie de temps et de
mémoire) «
on
»
peut être amené
à
"dérécursiver"certains algorithmes«
on
»
: le plus souvent les compilateursméthodes générales pour supprimer :
un appel récursif terminal
:•
utilise une boucle tant queun appel récursif non terminal
:
•
utilise une pile
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
105/232
105 / 232
"Dérécursiver"Remarques
Les programmes itératifs sont souvent plus efficaces,mais les programmes récursifs sont plus faciles à écrire.
Les compilateurs savent, la plupart du temps,reconnaître les appels récursifs terminaux, et ceux-cin’engendrent pas de surcoût par rapport à
la version
itérative du même programme.Il est toujours possible de dérécursiver
un algorithmerécursif.
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
106/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
107/232
107 / 232
Récursivité : Bilan un algorithme récursif peut être transformé
en algorithme itératif(ne le faire que si on voit que l'algorithme "patine" ou besoin
impérieux)un programme itératif n'est pas toujours plus efficace qu'unprogramme récursifla récursivité
est centraleen informatique dite théorique pour distinguer les problèmes (problèmescalculables) qu'une machine peut résoudre en temps finien programmation pour traiter de manière simple de nombreuxproblèmes sur les arbres binaires (recherche, tri etc.)
Un algorithme itératif n’est pas forcément plus rapide qu’unalgorithme récursifCertains algorithmes sont mieux traités par des algorithmesitératifs
D’autres sont mieux traités par des algorithmes récursifs
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
108/232
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
109/232
109 / 232
Pause-réflexion sur cette partie
Avez-vous des questions ?
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
110/232
Travaux Dirigés (TD)
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
111/232
111 / 232
TD 2 : Complexité algorithmique Exercice
1Enoncé
: Écrire
une fonction en langage algorithmique qui prend en paramètre un entier i et calcule la valeuru(i ) définie par récurrence par :
Évaluer la complexité
de l’algorithme proposéExercice 2
Enoncé
:
soit la fonction
a) Écrire une fonction en langage algorithmique qui prend en paramètre un entier x et calcule f(x) .b) Écrire une fonction en langage algorithmique qui prend en paramètre un entier n et calcule la somme :
On arrêtera la somme lorsque la valeur f calculée est nulle.c) Écrire une fonction en langage algorithmique qui prend en paramètre un entier n et calcule la somme :
Dans cette somme, les divisions sont des divisions euclidiennes. On arrêtera la somme lorsque la valeur fcalculée est nulle.d) Écrire une fonction en langage algorithmique qui prend en paramètre un entier n et calcule la somme :
Dans cette somme, les divisions sont des divisions euclidiennes. On arrêtera la somme lorsque la valeur fcalculée est nulle.
0 1
1 1
1; 2
3 pour 1 j j j
u u
u u u j
1 2 3 4nS f n f n f n f n f n
2 2 2 22 3 4 5n n n n nT f n f f f f
2 4 8 16
nn n n nU f n f f f f
2
3 1 si 1
0 sinon
x x x f x
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
112/232
Structures de données séquentielles(ou linéaires)
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
113/232
113 / 232
Structures de données linéaires
Voici les parties que nousallons aborder
Les listes
Les piles.
Les files.
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
114/232
114 / 232
Les listes : Présentation Définition
Une liste est une structure de données linéaire correspondant à
une
suite d’éléments pour laquelle les opérations élémentaires ne sont paslimitées à
l’ajout et au retrait d'éléments.Les éléments ne sont pas indexés dans la liste, mais pour chaque élément(sauf le dernier) on sait où
se trouve l’élément suivant
Spécificités et contraintes d'utilisationOn ne peut accéder à
un élément de la liste qu’en passant par le premierélément et en parcourant tous les éléments de la liste jusqu’à
ce qu’onatteigne l’élément recherché.La notion de liste se distingue des autres structures linéaires par le faitque ce n'est ni un indice, ni un pointeur unique qui permet d'accéder auxdonnées, mais autant de pointeurs que de données, voire le double.Le concept fondamental qui permet d'utiliser les listes de cette
façonest un concept de chaînage des données, concept de gestion dynamique
très courant en informatique.
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
115/232
115 / 232
Les listes simplement chaînées Spécificités
Chaque
case mémoire
est
composée
de deux
champs. Le premier, à
gauche, reçoit
la donnée
(appelé
"clé") et le second, à
droite, correspondau pointeur
vers
la prochaine
case mémoire. Le pointeur
peut
être
NULLsi
la case mémoire
n'existe
pas (fin de la chaîne).Rôle d’une liste simplement chaînée
Le chaînage simple est une structure simple à
accès séquentiel et orienté(à
cause de la gestion des "pointeurs vers…" ).La capacité
mémoire est réduite au minimum. La grande flexibilité
obtenue à
l'aide des pointeurs permet d'intervenir sur la liste aisément.En revanche, la recherche nécessite un balayage de tous les éléments dela liste à
partir du premier, ce qui représente un processus relativementlong lorsque la liste l'est aussi.
L I S T E
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
116/232
116 / 232
Les listes doublement chaînées Spécificités
Chaque
case mémoire
est
composée
de trois
champs. Le champ central
reçoit
la donnée
(appelé
"clé"). Le premier, à
gauche, correspond à
unpointeur
vers
la case mémoire
précédente
et le troisième, à
droite
reçoitle pointeur
vers
la prochaine
case mémoire. Le pointeur
peut
être
NULLsi
la case mémoire
n'existe
pas (début ou
fin de la chaîne).Rôle d’une liste doublement chaînée
Malgré
un besoin, en capacité
mémoire, supérieur à
un chaînage simple,(deux fois plus de pointeurs), la recherche, (comme les déplacementssont possibles dans les deux sens), est donc plus rapide.Dans le cas d'une rupture de lien, la chaîne peut être éventuellementreconstituée, alors que pour un chaînage simple, la réparation est plus
difficile.On obtient ainsi, au détriment d'une optimisation de la mémoire, uneoptimisation de la gestion du contenu de la liste et une sécurité
accrue.
L I S T E
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
117/232
117 / 232
Les listes : Opérations élémentaires Trois opérations élémentaires ont la possibilité
de
modifier la structure de la liste : l’ajout, l'insertion et leretrait :AJOUTER : opération d’ajout en queue de liste le nouvel élémentINSERER : opération d'insertion à
la position courante et décalel'ancien élément pointé
comme élément suivantRETIRER : opération de retrait de l'élément courant
D'autres
opérations
évoluées
permettent
d'effectuer
des opérations
sur
la liste.
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
118/232
118 / 232
Les listes : Primitives associées Déclaration :LISTE: nom_liste : TYPE_ELEMENT_DE_LA_LISTE
Fonctions élémentaires : AJOUTER(nom_liste,element) //ajout en queue
INSERER(nom_liste,element) //insertion courante
element
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
119/232
119 / 232
Les listes : Exemple (1/2) Gestion d'une course (quinté) avec une liste
L’utilisation d’une liste est parfaitement adaptée dans le
traitement d'informations sujettes à
modification, mise en ordre,suppression, …
AJOUTER (l_quinte,"1")AJOUTER (l_quinte,"4")AJOUTER (l_quinte,"5")AJOUTER (l_quinte,"7")
AJOUTER (l_quinte,"10")AJOUTER (l_quinte,"15")AJOUTER (l_quinte,"23")AJOUTER (l_quinte,"25")
1
4
7
23 25
5
10
15
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
120/232
120 / 232
Les listes : Exemple (1/2) Gestion d'une course (quinté) avec une liste
Les chevaux arrivés au-delà
de la 5ème place sont retirés de laliste, …
RECHERCHER(l_quinte,"10")
RETIRER(l_quinte)RECHERCHER(l_quinte,"4")RETIRER(l_quinte)
RECHERCHER(l_quinte,"25")RETIRER(l_quinte)
1
4
7
23 25
5
10
15
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
121/232
121 / 232
Les listes : Exemple (1/2) Gestion d'une course (quinté) avec une liste
Les chevaux sont arrivés dans l'ordre suivant, un
algorithme prend en chargela réorganisation de la liste,en mémoire, cela n'a d'incidenceque sur le second champs
"pointeur vers …".premier : ("23")second : ("1")
troisième : ("7")quatrième : ("15")cinquième : ("5")
1
7
23
5
15
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
122/232
122 / 232
Les listes : Exemple (1/2) Gestion d'une course (quinté) avec une liste
Les chevaux sont arrivés dans l'ordre suivant, un
algorithme prend en chargela réorganisation de la liste,en mémoire, cela n'a d'incidenceque sur le second champs
"pointeur vers …".premier : ("23")second : ("1")
troisième : ("7")quatrième : ("15")cinquième : ("5")APPLICATION
1
7
23
5
15
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
123/232
123 / 232
Les listes : Exemple (2/2) Gestion d'une course (quinté) avec une liste doublement
chaînée, implémentée à l'aide de tableaux :Liste des chevaux : "1", "4", "5", "7", "10", "15", "23", "25".Retrait des chevaux arrivés au-delà
de la 5ème place.L'ordre d'arrivée est le suivant : "23", "1", "7", "15", "5".
suivant [1..8]
chevaux [1..8]
precedent [1..8]
4
1
7
4
/
5
6
6
7
1
10
3
15
4
1
23
/
25
Algorithmique et Structure de données Dr. Bienvenu FASSINUT-MOMBOT
-
8/16/2019 COURSAlgorithmique Et Structure de Donnees USTM
124/232
124 / 232
Les listes : Mise en œuvre Réaliser la structure de données LISTE consiste à
1.
définir le type de données (que l’on nomme ici ELEMENT) quipeut être soit•
un objet (stockage direct)•