Академический Документы
Профессиональный Документы
Культура Документы
ALGORITHME
Dfinition nom masculin (d'Al Khrezmi, mdecin arabe). Suite de raisonnements ou d'oprations qui fournit la solution de certains problmes. Objectifs Un algorithme sert transmettre un savoir faire. Il dcrit les tapes suivre pour raliser un travail. Il permet d'expliciter clairement les ides de solution d'un problme indpendamment d'un langage de programmation. L'utilisateur d'un algorithme n'aura qu' suivre toutes les instructions, dans l'ordre pour arriver au rsultat que doit donner l'algorithme.
ALGORITHME
Le "langage algorithmique" que nous utilisons est un compromis entre un langage naturel et un langage de programmation.
Nous prsentons les algorithmes comme une suite d'instructions dans l'ordre des traitements. Ils sont toujours accompagns d'un lexique qui indique, pour chaque variable, son type et son rle. Nous manipulerons les types couramment rencontrs dans les langages de programmation : entier, rel, boolen, caractre, chane, tableau et type composite.
FORMALISME
Il doit donc suivre des rgles. Il est compos d'une entte et d'un corps.
L'entte comprend : - Nom : le nom de l'algorithme - Rle : ce que fait l'algorithme - Donnes : les donnes fournies l'algorithme - Rsultat : ce que l'on obtient la fin du traitement - Principe : le principe utilis dans l'algorithme Le corps : - il est dlimit par les mots cls dbut et fin. - il se termine par un lexique, dcrivant les variables utilises
FORMALISME
Par convention, tous les identifiants de variables seront nots en minuscule et auront un nom mnmonique
Il en va de mme pour les fonctions, dont l'identifiant doit tre le plus explicite sur son rle. Ce dernier peut tre une contraction de plusieurs mots, par consquent pour rendre la lecture plus facile, la premire lettre de chaque mot est mis en majuscule (exemple : CalculerAireRectangle).
FORMALISME
Exemple d'algorithme : Nom : AddDeuxEntiers. Rle : additionner deux entier et mmoriser le rsultat Donnes : les valeurs additionner. Rsultat : la somme des deux valeurs. Principe : Additionner deux entiers a et b et mettre le rsultat dans c.
dbut ca+b fin Lexique : a : entier b : entier c : entier
LES VARIABLES
Une variable est une entit qui contient une information, elle possde :
un nom, on parle didentifiant une valeur un type qui caractrise lensemble des valeurs que peut prendre la variable
LES VARIABLES
Type de variable
LES VARIABLES
A un type donn, correspond un ensemble d'oprations dfinies pour ce type. Une variable est l'association d'un nom avec un type, permettant de mmoriser une valeur de ce type.
Un oprateur est un symbole dopration qui permet dagir sur des variables ou de faire des calculs Une oprande est une entit (variable, constante ou expression) utilise par un oprateur Une expression est une combinaison doprateur(s) et doprande(s), elle est value durant lexcution de lalgorithme, et possde une valeur (son interprtation) et un type
10
LES OPRATEURS
Un oprateur est associ un type de donne et ne peut tre utilis quavec des variables, des constantes, ou des expressions de ce type
Par exemple loprateur + ne peut tre utilis quavec les types arithmtiques (naturel, entier et rel) ou (exclusif) le type chane de caractres
11
LES OPRATEURS
On ne peut pas additionner un entier et un caractre Toutefois exceptionnellement dans certains cas on accepte dutiliser un oprateur avec deux oprandes de types diffrents, cest par exemple le cas avec les types arithmtiques (2 + 3.5)
12
Pour les boolens nous avons les oprateurs non, et, ou, Exclusif
Non
Et
13
Ou
Ou exclusif
14
Rappels sur la logique boolenne... Valeurs possibles : Vrai ou Faux Associativit des oprateurs et et ou a et (b et c) = (a et b) et c Commutativit des oprateurs et et ou a et b = b et a a ou b = b ou a
15
Distributivit des oprateurs et et ou a ou (b et c) = (a ou b) et (a ou c) a et (b ou c) = (a et b) ou (a et c) Involution (homographie rciproque) (homos semblable et graphein crire) non non a = a Loi de Morgan non (a ou b) = non a et non b non (a et b) = non a ou non b
16
Avec en plus pour les entiers div et mod, qui permettent respectivement de calculer une division entire et le reste de cette division,
17
Loprateur dgalit : Cest loprateur que lon retrouve chez tous les types simples qui permet de savoir si les deux oprandes sont gales Il est reprsent par le caractre = Le rsultat d'une expression contenant cet oprateur est un boolen On a aussi loprateur dingalit : Et pour les types possdant un ordre les oprateurs de comparaison <, , >,
18
Tout comme en arithmtique les oprateurs ont des priorits Par exemple * et / sont prioritaires sur + et Pour les boolens, la priorit des oprateurs est non, et, ouExclusif et ou Pour clarifier les choses (ou pour dans certains cas supprimer toutes ambiguts) on peut utiliser des parenthses
19
MANIPULATION DE VARIABLES
On ne peut faire que deux choses avec une variable : 1. Obtenir son contenu Cela seffectue simplement en nommant la variable 2. Affecter un (nouveau) contenu Cela seffectue en utilisant loprateur daffectation reprsenter par le symbole
20
MANIPULATION DE VARIABLES
Par exemple lexpression c a + b se comprend de la faon suivante : On prend la valeur contenue dans la variable a On prend la valeur contenue dans la variable b On additionne ces deux valeurs On met ce rsultat dans la variable c
21
Il peut afficher un rsultat (du texte ou le contenu dune variable) demander lutilisateur de saisir une information afin de la stocker dans une variable
22
Instruction d'criture L'instruction de restitution de rsultats sur le priphrique de sortie (en gnral l'cran) est :
crire(liste d'expressions) Cette instruction ralise simplement l'affichage des valeurs des expressions dcrites dans la liste. Ces instructions peuvent tre simplement des variables ayant des valeurs ou mme des nombres ou des commentaires crits sous forme de chanes de caractres.
23
Instructions de lecture L'instruction de prise de donnes sur le priphrique d'entre (en gnral le clavier) est : variable <- lire() L'excution de cette instruction consiste affecter une valeur la variable en prenant cette valeur sur le priphrique d'entre. Avant l'excution de cette instruction, la variable avait ou n'avait pas de valeur. Aprs, elle a la valeur prise sur le priphrique d'entre.
24
Exemple On dsire crire un algorithme qui lit sur l'entre standard une valeur reprsentant une somme d'argent et qui calcule et affiche le nombre de billets de 100 Euros, 50 Euros et 10 Euros, et de pices de 2 Euros et 1 Euro qu'elle reprsente. Nom : DcompSomme. Rle : Dcomposition d'une somme Donnes : la somme dcompose. Rsultat : les nombres de billets et de pices.
Principe : on commence par lire sur l'entre standard l'entier qui reprsente la somme d'argent et affecte la valeur une variable somme. Pour obtenir la dcomposition en nombre de billets et de pices de la somme d'argent, on procde par divisions successives en conservant chaque fois le reste.
25
26
Lexique - somme : entier, la somme d'argent dcomposer - billet100 : entier, le nombre de billets de 100 Euros - billet50 : entier, le nombre de billets de 50 Euros - billet10 : entier, le nombre de billets de 10 Euros - piece2 : entier, le nombre de pices de 2 Euros - piece1 : entier, le nombre de pices de 1 Euro - reste100 : entier, reste de la division entire de somme par 100 - reste50 : entier, reste de la division entire de reste100 par 50 - reste10 : entier, reste de la division entire de reste50 par 10 - reste2 : entier, reste de la division entire de reste10 par 2
27
INSTRUCTION CONDITIONNELLE
Linstruction si alors sinon permet de conditionner lexcution dun algorithme la valeur dune expression boolenne. Syntaxe : si expression boolenne alors suite dinstructions excutes si lexpression est sinon suite dinstructions excutes si lexpression est fausse finsi
vrai
28
INSTRUCTION CONDITIONNELLE
La deuxime partie de linstruction est optionnelle, on peut avoir la syntaxe suivante : si expression boolenne alors suite dinstructions excutes si lexpression est vrai finsi
29
INSTRUCTION CONDITIONNELLE
Exemple Nom : ValeurAbs Rle : Calcule la valeur absolue dun entier Donnes : La valeur calculer Rsultat : La valeur Absolue Principe : Si valeur < 0, on la multiplie par -1 dbut si valeur 0 alors valeurabsolue valeur sinon valeurabsolue valeur * -1 finsi fin
30
L'INSTRUCTION CAS
Lorsque lon doit comparer une mme variable avec plusieurs valeurs, comme par exemple : si a=1 alors faire une chose sinon si a=2 alors faire une autre chose sinon si a=4 alors faire une autre chose sinon ... finsi finsi finsi
On peut remplacer cette suite de si par linstruction cas
31
L'INSTRUCTION CAS
Sa syntaxe est : cas o v vaut v1 : action1 v2 : action2 ... vn : actionn autre : action autre fincas
v1,. . . ,vn sont des constantes de type scalaire (entier, naturel, enumr, ou caractre) action i est excute si v = vi (on quitte ensuite linstruction cas) action autre est excute si quelque soit i, v vi
32
LES ITRATIONS
Il arrive souvent dans un algorithme qu'une mme action soit rpte plusieurs fois, avec ventuellement quelques variantes. Il est alors fastidieux d'crire un algorithme qui contient de nombreuses fois la mme instruction. De plus, ce nombre peut dpendre du droulement de l'algorithme. Il est alors impossible de savoir l'avance combien de fois la mme instruction doit tre dcrite. Pour grer ces cas, on fait appel des instructions en boucle qui ont pour effet de rpter plusieurs fois une mme instruction. Deux formes existent : la premire, si le nombre de rptitions est connu avant l'excution de l'instruction de rptition, la seconde s'il n'est pas connu. L'excution de la liste des instructions se nomme itration.
33
RPTITIONS INCONDITIONNELLES
Il est frquent que le nombre de rptitions soit connu l'avance, et que l'on ait besoin d'utiliser le numro de l'itration afin d'effectuer des calculs ou des tests. Le mcanisme permettant cela est la boucle Pour.
34
RPTITIONS INCONDITIONNELLES
La variable dont on donne le nom va prendre successivement toutes les valeurs entires entre valeur initiale et valeur finale. Pour chaque valeur prise par la variable, la liste des instructions est excute. La valeur utilise pour numrer les itrations est appele valeur d'itration, indice d'itration ou compteur. L'incrmentation par 1 de la variable est implicite.
35
RPTITIONS INCONDITIONNELLES
Pour variable dcroissante de valeur initiale valeur finale faire liste d'instructions fpour La variable d'itration est dcrmente de 1 aprs chaque itration.
36
L'utilisation d'une "boucle pour" ncessite de connatre l'avance le nombre d'itrations dsir, c'est--dire la valeur finale du compteur. Dans beaucoup de cas, on souhaite rpter une instruction tant qu'une certaine condition est remplie, alors qu'il est priori impossible de savoir l'avance au bout de combien d'itrations cette condition cessera d'tre satisfaite. Dans ce cas, on a deux possibilits : - la boucle Tant que - la boucle Rpter jusqu'
Syntaxe de la boucle Tant que : tant que condition faire liste d'instructions ftant
37
Cette instruction a une condition de poursuite dont la valeur est de type boolen et une liste d'instructions qui est rpte si la valeur de la condition de poursuite est vraie : la liste d'instructions est rpte autant de fois que la condition de poursuite a la valeur vraie. Le droulement pas pas de cette instruction quivaut : si condition alors liste d'instructions si condition alors liste d'instructions si condition alors liste d'instructions ...
38
Etant donn que la condition est value avant l'excution des instructions rpter, il est possible que celles-ci ne soient jamais excutes. Il faut que la liste des instructions ait une incidence sur la condition afin qu'elle puisse tre value faux et que la boucle se termine.
Il faut toujours s'assurer que la condition devient fausse au bout d'un temps fini. Exemple Un utilisateur peut construire des rectangles de taille quelconque, condition que les largeurs qu'il saisit soient suprieures 1 pixel.
39
40
La squence d'instructions est excute au moins une fois et jusqu' ce que l'expression soit vraie. Ds que la condition est vrai, la rptitivit s'arrte.
41
42
Diffrences entre les boucles Tant que et Rpter jusqu' : - la squence d'instructions est excuter au moins une fois dans la boucle Rpter jusqu', alors qu'elle peut ne pas tre excuter dans le cas du Tant que.
- la squence d'instructions est excuter si la condition est vrai pour le Tant que et si la condition est fausse pour le Rpter jusqu'. - Dans les deux cas, la squence d'instructions doit ncessairement faire voluer la condition, faute de quoi on obtient une boucle infinie.
43
LES TABLEAUX
Lorsque les donnes sont nombreuses et de mme type, afin d'viter de multiplier le nombre des variables, on les regroupe dans un tableau Le type d'un tableau prcise le type (commun) de tous les lments. Syntaxe : tableau type_des_lments[borne_inf ... borne_sup] En gnral, nous choisirons toujours la valeur 0 pour la borne infrieure dans le but de faciliter la traduction de l'algorithme vers les autres langages (C, Java, ...). Pour un tableau de 10 entiers, on aura : tab : tableau entier[0..9]
44
LES TABLEAUX
Ce tableau est de longueur 10, car il contient 10 emplacements. Chacun des dix nombres du tableau est repr par son rang, appel indice
Pour accder un lment du tableau, il suffit de prciser entre crochets l'indice de la case contenant cet lment. Pour accder au 5me lment (22), on crit : Tab[4]
45
LES TABLEAUX
Les instructions de lecture, criture et affectation s'appliquent aux tableaux comme aux variables. x Tab[0] La variable x prend la valeur du premier lment du tableau, c'est dire : 45
Tab[6] 43
Cette instruction a modifie le contenu du tableau
46
LES TABLEAUX
Parcours complet d'un tableau La plupart des algorithmes bass sur les tableaux utilisent des itrations permettant de faire un parcours complet ou partiel des diffrents lments du tableau. De tels algorithmes tablissent le rsultat recherch par rcurrence en fonction des lments successivement rencontrs.
Les rptitions inconditionnelles sont le moyen le plus simple de parcourir compltement un tableau.
47
LES TABLEAUX
Dans l'exemple suivant, le programme initialise un un tous les lments d'un tableau de n lments : InitTableau dbut pour i de 0 n-1 faire tab[i] 0 fpour fin
Lexique : - i : entier, indice d'itration - n : entier, taille du tableau - tab : tableau entier[0..n-1]
48
LES TABLEAUX
1
2
23
43
36
21
51
55
11
67
38
83
54
41
25
69
Ce tableau a 3 lignes et 7 colonnes. Les lments du tableau sont reprs par leur numro de ligne et leur numro de colonne.
Tab[1, 4] = 38
49
LES TABLEAUX
50
La mthodologie de base de linformatique est : 1. Abstraire Retarder le plus longtemps possible linstant du codage 2. Dcomposer "...diviser chacune des difficults que jexaminerai en autant de parties quil se pourrait et quil serait requis pour les mieux rsoudre." Descartes 3. Combiner Rsoudre le problme par combinaison dabstractions
51
Par exemple, rsoudre le problme suivant : Ecrire un programme qui affiche en ordre croissant les notes dune promotion suivies de la note la plus faible, de la note la plus leve et de la moyenne, revient rsoudre les problmes suivants : - Remplir un tableau de naturels avec des notes saisies par lutilisateur - Afficher un tableau de naturels - Trier un tableau de naturel en ordre croissant - Trouver le plus petit naturel dun tableau - Trouver le plus grand naturel dun tableau - Calculer la moyenne dun tableau de naturels
52
Donc crire un programme qui rsout un problme revient toujours crire des sous-programmes qui rsolvent des sous parties du problme initial. En algorithmique il existe deux types de sousprogrammes : - Les fonctions - Les procdures
53
Une fonction rcursive est une fonction qui pour fournir un rsultat, sappelle elle-mme un certain nombre de fois. Exemple : la formule de calcul de la factorielle dun nombre n scrit :
n!=1x2x3xxn Ce qui peut se programmer avec une boucle Pour.
54
Pour programmer cela, il faut une fonction Facto, charge de calculer la factorielle. Cette fonction effectue la multiplication du nombre pass en argument par la factorielle du nombre prcdent. Et cette factorielle du nombre prcdent va bien entendu tre elle-mme calcule par la fonction Fact.
55
Pour terminer, il nous manque la condition d'arrt de ces auto-appels de la fonction Facto. Dans le cas d'un calcul de factorielle, on sarrte quand on arrive au nombre 1, pour lequel la factorielle est par dfinition 1.
Fonction Facto (n : Entier) Dbut Si n = 1 alors Renvoyer 1 Sinon Renvoyer Facto(n - 1) * n Finsi Fin
56
Le processus rcursif remplace en quelque sorte la boucle, cest--dire un processus itratif. Il est noter que l'on traite le problme lenvers : on part du nombre, et on remonte rebours jusqu 1, pour pouvoir calculer la factorielle.
Cet effet de rebours est caractristique de la programmation rcursive.
57
Pour conclure sur la rcursivit, trois remarques fondamentales. - la programmation rcursive, pour traiter certains problmes, peut tre trs conomique, elle permet de faire les choses correctement, en trs peu de lignes de programmation. - en revanche, elle est trs dispendieuse de ressources machine. Car il faut crer autant de variable temporaires que de " tours " de fonction en attente. - toute fonction rcursives peut galement tre formule en termes itratifs ! Donc, si elles facilitent la vie du programmeur, elle ne sont pas indispensable.
58
Les algorithmes de tri, sont utiliss principalement pour les tableaux et les listes, ils peuvent aller du plus simple au plus compliquer.
Le tri bulle Cest un des algorithmes le plus connu. Bien quil soit rarement efficace en terme de temps de calcul, il est nanmoins correcte. Le principe consiste balayer tout le tableau, en comparant les lments adjacents et en les changeant sils ne sont pas dans le bon ordre.
59
Il peut par contre tre intressant quand le tableau initial est pr-tri, les lments ntant pas disposs trop loin de leur position finale, par exemple lors dun classement alphabtique, o les lments sont dj tris par leur premire lettre.
60
Le tri par insertion Plutt que de dplacer les lments dune position, on peut prendre un lment aprs lautre dans lordre initial, et le placer correctement dans les lments prcdents dj tris, comme on le fait lorsque lon classe ses carte jouer aprs la donne.
Le tri par insertion peut tre intressant pour des tableaux ayant dj t tris, mais o lon doit rajouter quelques nouveaux lments.
61
Le tri par slection Le but est dsormais de dplacer chaque lment sa position dfinitive. On recherche llment le plus petit. Il faut donc le placer en premier, or cette position est dj occupe, on change donc les deux lments. Il ne reste plus qu rpter lopration N fois. Chaque change met un lment en position dfinitive, lautre par contre est mal plac. Cependant, aucun change nest inutile, car un lment qui a t bien plac, ne sera plus test par la suite.
62
Le tri shell Cest une amlioration du tri par insertion, au lieu deffectuer une rotation de tous les lments entre la position initiale et finale dun lment, on peut faire des rotation par pas de P, ce qui rendra le fichier presque tri. Chaque lment sera moins de P positions de sa position exacte. On rpte ce tri pour P diminuant jusqu 1.
Une suite possible pour P est de finir par 1, les pas prcdents tant de 4, 13, 40, 121, 364, 1093.
63
Les puissances successives de 2 ne traiteraient que les positions paires, sauf au dernier passage. Lintrt de ce tri, est quil cr rapidement un fichier presque tri, en appliquant un dernier par insertion, celuici sera beaucoup plus rapide.
64
Le tri rapide (Quick Sort) Ce tri est rcursif. On cherche trier une partie du tableau, dlimite par les indices gauche et droite. On choisit une valeur de ce sous tableau que lon appelle pivot (une valeur mdiane serait idale, mais sa recherche ralentit plus le tri que de prendre une valeur alatoire).
Puis on cherche la position dfinitive de ce pivot, cest-dire que lon effectue des dplacements de valeurs de telle sorte que tous les lments avant le pivot soient plus petit que lui et que tous ceux placs aprs lui soient suprieurs, mais sans chercher les classer, pour acclrer le processus.
65
Le tri par cration Lorsquil est ncessaire de disposer simultanment du tableau initial et du tableau tri, on peut recopier le tableau initial puis effectuer un tri sur la copie ou adapter un des algorithmes prcdents.
66
Les autres tris Suivant les donnes trier, il peut tre plus efficace de construire un algorithme de tri spcifique. Par exemple si un tableau contient un grand nombre de valeurs similaires, on peut utiliser un algorithme simple, consistant rechercher llment le plus petit, compter le nombre de ces lments, les mettre dans un tableau destination, et rpter lopration jusqu la fin du fichier. Cest le tri par comptage. Le tri par fusion utilise un algorithme de fusion de deux tableaux tris en un seul plus grand, appel rcursivement sur les deux moitis du tableau, jusqu une taille de tableau de 1.
67
La recherche squentielle A partir dun tableau tri, on parcours ce tableau lment par lment jusqu trouver le bon lment. La recherche dichotomique La recherche dichotomique recherche un lment dans un tableau tri et retourne lindice dune occurrence de cet lment. On compare llment cherch celui qui se trouve au milieu du tableau. Si llment cherch est plus petit, on continu la recherche dans la premire moiti du tableau, sinon dans la seconde moiti. On recommence ce processus sur la moiti. On sarrte lorsque lon a trouv llment, ou lorsque lintervalle de recherche est nul.
68
Jusqu'ici, on a tudi des structures de donnes statiques, c'est--dire qui ont un nombre fixe d'informations, utilises pour la reprsentation de donnes dont la taille est connue l'avance et n'volue pas dans le temps.
Dans la pratique, il arrive souvent que l'on ait besoin de reprsenter des objets dont on ne connat pas priori la taille, ou dont la taille est variable selon les cas ou au cours du temps.
On utilise dans ce cas des structures de donnes dynamiques qui peuvent voluer pour s'adapter la reprsentation des ces objets.
69
Exemple : On doit lire dans un fichier une suite de nombres sur lesquels on doit effectuer un traitement ultrieur. On ne connat pas la quantit de nombres lire et on ne veut pas les compter avant.
La premire solution consiste utiliser un tableau surdimensionner, au risque qu'il soit trop petit ou rellement trop grand, ce qui induit une occupation mmoire inutile.
L'autre solution consiste utiliser une structure dynamique qui s'agrandit au fur et mesure de la lecture des nombres.
70
Le principe de base est de suivre les volution de la structure en lui attribuant de la place en mmoire quand elle grandit et en la rcuprant quand elle diminue Ceci est ralis par un mcanisme d'allocation et de libration dynamique d'espace mmoire qui utilise une zone mmoire particulire appele TAS (HEAP) dans laquelle on rserve des emplacements quand c'est ncessaire, Que l'on libre quand on en a plus besoin. On dispose de deux procdures standard d'acquisition et de libration de l'espace mmoire :RESERVE et LIBERE
71
LES POINTEURS
435
72
Quand une variable pointeur ne pointe sur rien, elle doit contenir la valeur NULL.
STRUCTURE AUTORFRENTIELLE
Une structure autorfrentielle (ou structure rcursive) correspond une structure dont au moins un des champs contient un pointeur vers une structure de mme type.
De cette manire, on cre des lments (appels nud ou lien) contenant des donnes, mais contrairement un tableau, celleci peuvent tre parpilles en mmoire et relies entre-elles par des liens logiques (des pointeurs). Un ou plusieurs champs dans chaque structure contient l'adresse d'une ou de plusieurs structures de mme type.
73
STRUCTURE AUTORFRENTIELLE
Si une structure contient des donnes et un pointeur vers la structure suivante, on parle de liste chane. Lorsque la structure contient des donnes, un pointeur vers la structure suivante et un pointeur vers la structure prcdente, on parle de liste chane double. Lorsque la structure contient des donnes, un pointeur vers une premire structure suivante et un pointeur vers une seconde, on parle d'arbre binaire.
74
Une liste chane est une structure de donnes dans laquelle les lments sont rangs linairement. Chaque lment est li son successeur, il est donc impossible d'accder directement un lment quelconque de la liste
12 25 4 7 /
Bien videment, cette linarit est purement virtuelle. A la diffrence du tableau, les lments n'ont aucune raison d'tre contigus ni ordonns en mmoire.
25 12 7 / 4
75
La faon dont on met en uvre ces structures dpend des langages, mme si la faon dont cela est reprsent ici ressemble fortement celle du langage C. Une mthode simple pour se reprsenter une liste, consiste se dire - qu'une liste L est soit vide, soit elle est constitue - d'une tte T (qui est donc la valeur du premier lment de la liste) et - d'une queue Q (qui est le reste de la liste).
76
En terme de pointeurs et de structures, une liste peut se reprsenter grce au type suivant :
77
78
Une liste doublement chane est une liste chane, ceci prs que l'on peut accder son prdcesseur.
/ 12
25
Bien sr, cette linarit est purement virtuelle. Tout comme pour les listes chanes simples, les lments n'ont aucune raison d'tre contigus ni ordonns en mmoire.
25
12
79
80
81
LES LISTES
Elles ont l'avantage d'tre rellement dynamiques, c'est dire que l'on peut loisir les rallonger ou les raccourcir, avec pour seule limite la mmoire disponible.
De plus, l'insertion d'un composant au milieu d'une liste ne ncessite que la modification des liens avec l'lment prcdent et le suivant. Le temps ncessaire pour l'opration sera donc indpendant de la longueur de la liste.
82
Ce sont des structures de donnes ordonnes, mais qui ne permettent l'accs qu' une seule donne. Les piles (LIFO : Last In First Out) correspondent une pile d'assiettes : on prend toujours l'lment suprieur, le dernier emplil.
Les files (FIFO : First In First Out) correspondent aux files d'attente : on prend toujours le premier lment, donc le plus ancien. Elles sont trs souvent utiles, elles servent mmoriser des vnements en attente de traitement.
83
Il n'y a pas de structures spcifiques prvues dans les langages de programmation, il faut donc les crer de toute pice. Pour les piles, on utilisera : - un tableau unidimensionnel en cas de piles de hauteur maximale prvisible (la hauteur de la pile est mmorise dans une variable entire). - une liste en cas de longueur trs variable. Attention au surcot de mmoire, d aux liens (pointeurs), il faudra en crer autant que d'lments empiler.
84
Pour les files : - l'utilisation d'un tableau ncessite de mmoriser deux variables, la position du premier lment et celle du dernier. La suppression du premier lment ne se fait pas par dcalage des suivants, mais en incrmentant la variable indiquant le premier. La gestion est alors un peu plus complexe que pour les piles.
- l'utilisation d'une liste pour les files est aussi simple que pour une pile.
85
Pour les piles - l'empilage - le dpilage Pour les files - l'enfilage - le dfilage Dans les deux cas on prvoira galement une fonction d'initialisation et une fonction indiquant si la pile ou la file est vide. Seules ces deux fonctions dpendent de la mthode de mise en uvre (tableau ou liste).
86
87
88
LES ARBRES
Les listes sont des structures dynamiques unidimensionnelles. Les arbres sont leur gnralisation multidimensionnelle. Une liste est un arbre dont chaque lment a un et un seul fils. Chaque composante d'un arbre contient une valeur et des liens vers ses fils. Dfinition : Un arbre est form dun lment de type arbre appel racine et dun nombre fini darbres appels sous-arbres. Un lment quelconque peut avoir plusieurs successeurs, mais un seul prdcesseur. Seul le premier lment na pas de prdcesseur.
89
LES ARBRES
Terminologie
-
Les lments
-
Un sommet ou nud est un lment quelconque dun arbre. La racine est lunique sommet nayant pas de prdcesseur. Une feuille ou nud terminal est un lment nayant pas de successeur. Le prdcesseur unique dun nud est appel le pre. Les successeurs dun nud sont appels les fils. Les nuds qui ont le mme pre sont appels frres. Le frre plac le plus gauche est lan.
Les chemins
-
Un arc est un chemin reliant deux nuds Une branche est un chemin reliant la racine une feuille.
90
LES ARBRES
Horizontale
-
Un arbre est dit n-aires, lorsque le nombre maximum de fils dun mme nud est n. Un niveau est dfini par un ensemble de nuds disposs gale distance de la racine. Le niveau dun arbre n-aire est qualifi de satur si tous ses nuds ont exactement n fils. Le prdcesseur unique dun nud est appel le pre. Un arbre n-aire est complet au sens strict, si tout niveau commenc est satur.
91
LES ARBRES
-
Verticale
-
La hauteur dun arbre binaire est le nombre de nuds qui constituent la plus longue branche de la racine une feuille. Un arbre constitu de seulement une racine a une hauteur de 1. Sil est constitu dune racine et dune feuille sa hauteur est de 2.
92
LES ARBRES
1
racine
33
35
nud
feuille
93
LES ARBRES
8
pre
33
35
frres
65
66
62
63
fils
94
LES ARBRES
Comme pour le premier d'une liste, l'adresse de la racine est ncessaire et suffisante pour accder l'intgralit d'un arbre. Une liste est un arbre unaire.
95
LES ARBRES
De nombreux algorithmes ont t dvelopps pour les arbres binaires. Comme les listes les arbres sont compltement dynamiques, mais les liens (pointeurs) sont galement gourmands en mmoire.
L'accs au donnes reste squentiel, mais il est nanmoins rapide.
Le parcours des arbres, c'est--dire le passage par tous les nuds et feuilles se fait en gnral de manire rcursive.
92
LES ARBRES
Parcours dun arbre binaire 1
10
97
LES ARBRES
Mthodologie Plusieurs mthodes permettent daccder tous les nuds dun arbre binaire.
Son parcours complet peut-tre dcrit rcursivement par les actions : - traiter la racine - parcourir le sous-arbre gauche - parcourir le sous-arbre droit Il y a six squencements possibles pour ces actions. Les trois parcours suivant sont les plus classiques.
98
LES ARBRES
Parcours prfix Ce parcours est galement appel parcours en prordre ou descendant gauche droite.
Il traite dabord les nuds de la branche la plus gauche en descendant. - traiter la racine - parcourir le sous-arbre gauche - parcourir le sous-arbre droit
99
LES ARBRES
procedure prefixe(entree p : pointeur) Debut si p <> NULL alors afficher(p val) prefixe(p g) prefixe(p d) sinon afficher(f) fin si Fin
Premier appel : prefixe(racine) Rsultat : 1 2 4 7 f f 8 f f 5 f 9 f f 3 f 6 f 10 f f
100
LES ARBRES
Parcours postfix Ce parcours est galement appel parcours en postordre ou ascendant gauche droite ou en ordre terminal.
Il traite en dernier les nuds de la branche la plus droite en remontant. - parcourir le sous-arbre gauche - parcourir le sous-arbre droit - traiter la racine
101
LES ARBRES
procedure postfixe(entree p : pointeur) Debut si p <> NULL alors postfixe(p g) postfixe(p d) afficher(p val) sinon afficher(f) fin si Fin
Rsultat : f f 7 f f 8 4 f f f 9 5 2 f f f f 10 6 3 1
102
LES ARBRES
Parcours infix Ce parcours est galement appel parcours symtrique, projectif ou hirarchique canonique.
103
LES ARBRES
procedure infixe(entree p : pointeur) Debut si p <> NULL alors infixe(p g) afficher(p val) infixe(p d) sinon afficher(f) fin si Fin
Rsultat : f 7 f 4 f 8 f 2 f 5 f 9 f 1 f 3 f 6 f 10 f
104
LES ARBRES
L'expression 2*5+2*(cos((5*3.14)/180)) peut se reprsenter de la faon suivante
+ *
2 5 2
*
COS /
*
5
180
105
3.14
LES GRAPHES
106
LES GRAPHES
On utilisera les graphes pondrs par exemple pour : - grer des itinraires routiers (quelle est la route la plus courte pour aller d'un nud un autre). - grer des fluides (nuds relis par des tuyauteries de diamtre diffrents). - simuler un trafic routier. - simuler un circuit lectrique. - prvoir un ordonnancement Un graphe est dit orient lorsque les liens sont unidirectionnels.
107
LES GRAPHES
On peut reprsenter un graphe de manire dynamique, comme les arbres. Une autre solution consiste numroter les N sommets et d'utiliser une matrice carre NxN, avec en ligne i et en colonne j un 0 si les nuds i et j ne sont pas relis, le poids de la liaison sinon.
Un problme important est le parcours d'un graphe : il faut viter les boucles infinies, c'est--dire retourner sur un nud dj visit et repartir dans la mme direction. Pour cela, on utilise des indicateurs de passage (Boolen) ou une mthode jeton.
108
BONNE CHANCE