SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel :

Dimension: px
Commencer à balayer dès la page:

Download "SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com"

Transcription

1 Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : SUPPORT DE COURS Matière : Algorithmiques et Structures de Données 1 Niveau : 2 ème Année Licence en Informatique

2 ALGORITHMIQUES ET STRUCTURES DE DONNEES 1 Programme : 1- Rappel sur les structures de données simples : tableaux, listes chaînées. 2- Structures de données séquentielles : piles, files, listes. 3- Structures de données en table : hachage. 4- Structures de données hiérarchiques : arbres. 5- Arbres binaires de recherche. 6- Arbres AVL. 7- Arbres bicolores. 8- B-arbres. 9- Les notations asymptotiques et la complexité d un algorithme. 10- Preuve d exactitude d un algorithme 11- L algorithme de tri par arbre (heapsort). Ouvrages : 1- «Arbres, tables, algorithmes», Jacques Guyot, édition Chihab. 2- «Introduction à l algorithmique», Thomas Corman, édition Dunod. 3- «Introduction to Algorithms», Cormen, Mc Graw Hill edition. 4- «Apprendre à programmer en Turbo C», Claude Delannoy, édition Chihab. -1-

3 Rappels sur les Tableaux et les Listes Chaînées Dans la plupart des ordinateurs, la mémoire principale est formée d une suite de cellules de même taille, repérable à l aide d une adresse. Pour représenter les structures de données en mémoire principale, on a essentiellement deux modes de stockage : le stockage par tableau (stockage contigu), et le stockage par pointeur ou liste chaînée (stockage dispersé). I- Les Tableaux : L élément représentatif des structures statiques homogènes est le tableau que l on trouve dans la majorité des langages évolués de programmation. L allocation de l espace mémoire d un tableau est souvent statique. I-1 Les Tableaux Monodimensionnels : Le tableau monodimensionnel est la représentation informatique d un vecteur de l espace. Il est constitué d un ensemble d élément accessible à l aide d un indice. Cet accès direct est garanti en cas de lecture ou écriture. #include <stdio.h> #include <conio.h> /* Variables Globales*/ int A[100] ; int I, NombreMax ; void main() { /* Effacer l écran*/ clrscr(); /* Lecture de la taille du tableau*/ printf( Donner la taille du tableau : ); scanf( %d,&nombremax); /* Lecture des éléments du tableau*/ printf( Donner les éléments du tableau : \n ); for(i = 0 ; I <= NombreMax-1 ; I++) scanf( %d,&a[i]); -2-

4 /* Affichage des éléments du tableau*/ printf( Voici le contenu du tableau : \n ); for(i = 0 ; I <= NombreMax-1 ; I++) printf( %d\n, A[I]); } /* Pause avant quitter*/ getchar(); getchar(); I-2 Les Tableaux Multidimensionnels : Un élément de tableau multidimensionnel est repéré à l aide de plusieurs indices au lieu d un seul. Néanmoins, la représentation physique dans la mémoire principale est presque la même. Mémoire Mémoire A[1] A[1][1] A[2] A[3] A[1][2] A[2][1] A[4] A[2][2] Représentation physique d un tableau monodimensionnel Représentation physique d un tableau multidimensionnel Alors quelque soit la dimension d un tableau multidimensionnel, sa représentation physique est toujours linéaire

5 Elément Adresse + (I-1) * TailleElement +(I-1) * TaillePremiereDimension +(J-1) * TailleElement II- Les Listes Chaînées : Lorsque le besoin de conserver la mémoire s élève, il sera nécessaire d implémenter les structures de données en utilisant les pointeurs ou les listes chaînées, où les données sont organisées séquentiellement. Le principe de base de leur représentation est de suivre les évolutions de la structure, en lui attribuant de la place en mémoire quand elle grandit, et en la récupérant quand elle diminue. Ceci est réalisé par un principe d allocation et libération dynamique d espace mémoire. Le TAS (HEAP) est la plage d espace mémoire réservée juste pour l allocation dynamique. Mémoire Espace réservé pour les variables, tableaux, environnement des procédures, (statiques) TAS Espace réservé pour les listes chaînées, environnement des procédures, (dynamique) Dans les langages modernes, on dispose de deux procédures standard d acquisition et de libération d espace mémoire : RESERVE et LIBERE. La procédure RESERVE La procédure LIBERE Langage Pascal new() dispose() Langage C malloc() free() -4-

6 II-1 Les Listes Simplement Chaînées (Unidirectionnelles) : Une liste simplement chaînée est composée d'éléments distincts liés par un simple pointeur. Chaque élément d'une liste simplement chaînée est formé de deux parties: - Un champ (ou plusieurs champs) contenant la donnée (ou l information). - Un pointeur vers l'élément suivant de la liste. - L ensemble {champ, pointeur} est appelé le maillon. La liste est caractérisée par sa tête (l adresse du premier maillon). Aussi, le dernier maillon a la valeur NULL (Nil en Pascal) pour son pointeur. La queue (l adresse du dernier élément) est très utile pour accélérer l opération d insertion. Champ Pointeur Tête Maillon Queue NULL #include <stdio.h> #include <conio.h> /* Definition de Type*/ typedef struct S_Element { int info ; struct S_Element* suivant ; } Type_Element ; /* Variables Globales*/ Type_Element* tete ; Type_Element* element ; void main() { /* Effacer l écran*/ clrscr(); /* Créer la liste {1, 2, 3}*/ /* 1 */ tete = malloc (sizeof (Type_Element)) ; tete -> info = 1 ; /* 2 */ element = tete ; element -> suivant = malloc (sizeof (Type_Element)) ; element = element -> suivant ; element -> info = 2 ; /* 3 */ -5-

7 element -> suivant = malloc (sizeof (Type_Element)) ; element = element -> suivant ; element -> info = 3 ; element -> suivant = NULL; /* Affichage des éléments de la liste*/ printf( Voici le contenu de la liste : \n ); element = tete; while (element!= NULL) { printf( %d\n, element -> info); element = element -> suivant; } } /* Pause avant quitter*/ getchar(); getchar(); II-2 Les Listes Doublement Chaînées (Bidirectionnelles) : Les listes doublement chaînées sont constituées d'éléments comportant trois champs: - Un champ contenant la donnée. - Un pointeur vers l'élément suivant de la liste. - Un pointeur vers l'élément précédent de la liste. Les listes doublement chaînées peuvent donc être parcourues dans les deux sens. La liste est caractérisée par sa tête, aussi que par sa queue. Champ Tête Précèdent Suivant II-3 Les Listes Circulaires : Une liste circulaire peut être simplement ou doublement chaînée. Sa particularité est de ne pas comporter de queue (NULL ne figure pas). Le dernier élément de la liste pointe vers le premier. Un élément possède donc toujours un suivant. Champ Pointeur Tête -6-

8 Les Piles, les Files, et les Listes I. Les Piles : Les piles sont des structures de données, où l'ajout et le retrait d'un élément se fait toujours au sommet (en tête de liste). Le plus souvent, les piles sont implantées sous forme de liste chaînée. Néanmoins, une pile peut être implémentée à partir d'un tableau. Une pile suit la règle LIFO (Last In, First Out): dernier entré, premier sorti. Sommet Sommet Sommet Sommet Sommet Pile Vide Empiler(5) Empiler(7) Empiler(12) Dépiler() Empiler(3) Terminologie particulière: - l'extrémité où s'effectue l'ajout et le retrait s'appelle sommet. - ajouter un élément à une pile se dit empiler (ou push). - le fait de retirer un élément d'une pile et de récupérer son information s'appelle dépiler (ou pop). Exemple d Utilisation des Piles: Un programme A appelle une procédure B, qui appelle lui-même une procédure C qui appelle une fonction D. La pile du programme va évoluer comme suit: 1. lancement de A pile vide. 2. appel de B par A l'état de A est empilé. 3. appel de C par B l'état de B est empilé sur A. 4. appel de D par C l'état de C est empilé sur B. 5. Fin de D dépilage de l'état de C à poursuite de C. 6. Fin de C dépilage de l'état de B à poursuite de B. La Mémoire Etat de C Etat de B Etat de A -7-

9 7. Fin de B dépilage de l'état de A à poursuite de A. procédure. L état d une procédure représente l espace mémoire utilisé par cette Représentation par une liste chaînée : Sommet Tête 4 ème élément 3 ème élément 2 ème élément 1 er élément Les Primitives (Fonctions/Procédures de base) : - Empiler() - Dépiler() - Vider() ou DépilerTout() - Vide() - Taille() II. Les Files : Une file ou queue est une structure de données où l'insertion d'un élément se fait à une extrémité appelée queue et le retrait d'un élément se fait à une autre extrémité appelée tête. Une file est le plus souvent représentée par une liste chaînée. Une file suit la règle FIFO (First In, First Out): premier entré, premier sorti. Application : Les files servent à traiter des données dans l'ordre où elles arrivent, comme dans une file d'attente à un guichet où le premier arrivé est le premier servi. -8-

10 Représentation par une liste chaînée : Une file doit être accessible à la fois par la tête pour retirer un élément et par la queue pour ajouter un nouvel élément. La tête et la queue d'une file correspondent à la tête et la queue de la liste chaînée qui l'implémente. Tête 1 er élément 2 ème élément 3 ème élément 4 ème élément Queue Les Primitives : - Enfiler() - Défiler() - Vider() ou DéfilerTout() - Vide() - Taille() II. Les Listes : Une liste est un ensemble d élément de même type. Les listes sont implémentées par des tableaux ou des listes chaînées, selon les besoins d implémentation. Les polynômes correspondent à une liste de données ; chaque élément est constitué de l ensemble d un coefficient et un degré. Exemple : Soit le polynôme P(x) = X 5 + 3X 2 + X + 7. Voici l implémentation de la liste polynomiale par une liste chaînée : Tête

11 III. Les Listes Non-Linéaires: Une liste non linéaire est une structure de donnée dynamique que l on l utilise beaucoup en informatique, surtout dans le domaine de l intelligence artificielle. Le langage LISP souvent utilise une base de donnée organisée sous forme des listes non linéaires. Spécification Fonctionnelle : - ( ) représente la liste vide. - A représente l atome (ou l élément) A - (A) représente la liste à un élément A. - (A B) représente la liste de deux éléments A et B - (A (B (C) D) (E)) est une liste composée de trois éléments : - l atome A - la liste à trois éléments (B (C) D) - et la liste à un élément (E) Remarque : 1- La liste non linéaire peut être composée d autres listes ou/et des atomes. 2- Si la liste est composée des atomes seulement, alors c est une liste linéaire. Représentation Physique : 1- Liste Vide : () Courant Suivant Tête 2- La Liste (A) Tête A Atome Liste -10-

12 3- La Liste (A B) Tête A B 4- La Liste (A (B)) Tête A B 5- La Liste (A (B C)) Tête A B C 6- La Liste (A (B C) D) Tête A D B C Dans les exemples précédents, on observe que le pointeur Suivant pointe toujours sur une liste. Par contre, le pointeur Courant pointe sur des listes et des atomes. Afin d enlever cette ambiguïté, un champ booléen est ajouté pour distinguer entre l atome et la liste : -11-

13 Tête V A F V V V D B C La structure en C : Typedef Struct S_Liste { Struct S_Liste* Suivant ; Struct S_Liste* Courant_Liste ; Char Courant_Atome ; Int Type_Courant ; /* 1 : Vrai, 0 : Faux*/ } Liste ; -12-

14 Structures de données en table : Hachage Les opérations fondamentales sur une base de données sont : l insertion, la recherche, et la suppression. On cherche souvent à trouver des structures de données et des méthodes d accès plus efficaces afin d améliorer le temps requis par ces opérations. Soit un tableau des noms triés en ordre alphabétique comme suit : Ali Bachir Celia Dalila Emad Farid George Hassan La recherche dichotomique binaire est faite sur plusieurs étapes, sauf si le nom cherché est au milieu. Généralement, si le tableau des données est de taille n, alors le pire des cas correspond à lg 2 (n) étapes de recherche pour accéder aux éléments situés aux extrémités. Solution : Créer une fonction h qui remplace directement chaque mot correspondant : h( Ali ) = 0 ; h( Bachir ) = 1 ; La fonction h est appelée une fonction de hachage (ou de dispersion). par son indice Définition : Une fonction de hachage h est une fonction d un ensemble de clés C dans un ensemble (d indices) {0, 1,, m-1}. Une bonne fonction de hachage doit être calculable très rapidement et doit distribuer uniformément les clés sur les indices de hachage. Exemple1 : h(mot) = Ord(premier caractère de MOT) Ord( A ) ; où Ord est la fonction de conversion d un caractère à son code ASCII. Exemple 2 : Si on désire de stocker les entiers 1, 3, 4, 6, 8, 11, on peut choisir la méthode de la division suivante : h(k) = k mod m, où mod est l opération du reste de division entière, et m = 6. Dans ce cas tous les éléments sont rangés dans un tableau de 6 éléments : h(6) = 0, h(1) = 1, h(8) = 2, h(3) = 3, h(4) = 4, h(11) = Avantages : - Accès directe (rapide). Inconvénients : - Impossible de stocker deux clés si elles ont la même valeur hachée ; h( Ali ) = h( Ahmed ) ; h(5) = h(11). On appelle cette situation une collision. La collision peut -13-

15 facilement être évitée si la fonction de hachage est bijective. Mais cette méthode conduit à une énorme perte de l espace mémoire si le nombre de clés à stocker est très inférieur au domaine des clés. Exemple : Stocker les entiers 2, 4, 10, 18, et 20 dans un tableau en utilisant la fonction de hachage bijective h(x) = (x/2) Pour remédier à ce problème, deux solutions ont été proposées : l adressage fermé, et l adressage ouvert. 1- L Adressage Fermé (avec Chaînage): Au lieu de sauvegarder les clés directement dans les cellules du tableau, en associe une liste chaînée pour chaque cellule, chacune contenant la classe des clés de même valeur hachée. Exemple : Insérer successivement les clés 10, 22, 31, 4, 15, 28, 17, 88, et 59 dans une table de hachage de taille m = 11 gérée en adresse fermé, en utilisant la fonction uniforme de hachage : h(k) = k mod m

16 Avantages : - Un nombre limité de données (têtes des listes) est sauvegardés dans la partie statique de la mémoire ; le reste est sauvegardé dans le tas. - Collision éliminée. Inconvénients : - Les clés ne sont pas distribuées uniformément. On peut donc avoir une grande accumulation de données dans des zones limitées!!! - L accès à un élément dans une liste chaînée est coûteux. 2- L Adressage Ouvert : 2-1 L Adressage Ouvert Simple: Dans ce mode d adressage, tous les éléments sont conservés dans la table de hachage. Chaque entrée de la table contient soit NULL, soit un élément. En supprimant les listes chaînées, on libère de la mémoire, ce qui permet d augmenter la taille de la table et limiter les collisions. Lorsqu on définie la fonction de hachage h, chaque clé k est associé à une permutation H(k) = {h(k, 0), h(k, 1),, h(k, m-1)} de {0, 1,, m-1}. Cette permutation est la suite des indices des cellules testées lors d une recherche. Alors, on examine (sonde) successivement les cellules de la table jusqu à en trouver une vide. Remarque : En adressage ouvert, la table peut se remplir complètement, dans ce cas, il ne sera plus possible d y insérer des éléments. Exemple : Même exemple précédent avec la fonction de hachage h(k, i) = (k + i) mod m h(22, 0) = h(88, 0) = 0, h(88, 1) = h(4, 0) = h(15, 0) = 4, h(15, 1) = h(28, 0) = h(17, 0) = 6, h(17, 1) = h(59, 0) = 4, h(59, 1) = 5, h(59, 2) = 6, h(59, 3) = 7, h(59, 4) = h(31, 0) = h(10, 0) =

17 2-2 L Adressage Ouvert Double : On observe que dans le mode d adressage simple, la suite des essais (permutation) est toujours séquentielle selon l indice de la table. En fait, les valeurs h(k, i), h(k, i+1), h(k, i+2), consiste à une suite numérique non-aléatoire. Ce qui fait que la recherche dans une table de hachage est loin d être uniforme. En mode d adressage double, on ajoute une deuxième fonction d hachage afin d améliorer la distribution des permutations H(k). Exemple : Même exemple précédent avec la fonction de hachage h(k, i) =(k + ih 2 (k)) mod m, tel que h 2 (k) = k mod (m-1) h(22, 0) = 0 7- h(17, 0) = 6, h(17, 1) = 2 5- h(15, 0) = 4, h(15, 1) = 9, h(15, 2) = 3 4- h(4, 0) = 4 6- h(28, 0) = 6 9- h(59, 0) = 4, h(59, 1) = 2, h(59, 2) = 0, h(59, 3) = 9, h(59, 4) = h(88, 0) = 0, h(88, 1) = h(31, 0) = h(10, 0) = 10 - Avantages : Accès aléatoire aux cellules. - Inconvénients : Pas de garantie d insertion, même s il y a une case vide (exemple : on peut pas insérer la valeur 20 dans la table précédente). 2-3 L Adressage Ouvert Quadratique : L adressage double ne nous garantie aucune seuil maximale à propos du nombre d essais qu il faut balayer pour la recherche d une clé. Pour cela, l adressage quadratique a été proposé comme suit : h(k, i) = (k + i 2 ) mod m Dans ce mode, si m est un nombre premier, la suite d essais successifs balaie au plus la moitié du tableau. Ou bien, on à au moins un nombre d essais égale à la moitié des cellules existantes. Preuve : Supposons que les essais i et j (i < j et i,j {1, m-1}) correspondent à la même cellule du tableau. Nous avons alors h(k, i) = h(k, j). Donc on a h(k, j) - h(k, i) = 0. Ce qui fait que (k + j 2 ) - (k + i 2 ) = 0 mod m -16-

18 Alors j 2 - i 2 = 0 mod m, et donc (j+i)(j-i) = 0 mod m Comme m est un nombre premier, alors soit (j+i) = 0 mod m ou bien (j-i) = 0 mod m Si (j-i) = 0 mod m, alors j {i, i+m, i+2m, }. Contradiction puisque j i et j {1, m-1}. Il reste que (j+i) = 0 mod m, alors les seuls couples (i, j) possibles sont : - Si m est pair, alors m = 2n : (i, j) {(1, m-1), (2, m-2),, (n-1, n+1)} - Si m est impair, alors m = 2n+1 : (i, j) {(1, m-1), (2, m-2),, (n, n+1)} Dans les deux cas précédents, le nombre de possibilités est inférieur ou égale à n, ou m/2. Ca veut dire que, dans le pire des cas, après le n ème essai on tombe sûrement sur une cellule déjà visitée. Exemple : Même exemple précédent avec la fonction de hachage quadratique h(k, i) = (k + i 2 ) mod m h(22, 0) = h(88, 0) = 0, h(88, 1) = h(4, 0) = h(15, 0) = 4, h(15, 1) = h(28, 0) = h(17, 0) = 6, h(17, 1) = h(59, 0) = 4, h(59, 1) = 5, h(59, 2) = h(31, 0) = h(10, 0) =

19 Les Arbres L arbre est une structure de données fondamentale en informatique. Elle est utilisée pour représenter des données en hiérarchie. Le but d étudier les arbres est de savoir comment peut on améliorer la représentation et l accès aux différentes données. Les arbres sont utilisés dans des différents domaines, comme la compilation, les graphes, et l intelligence artificielle. Exemple 1 : Représentation Administratives des daïras et wilayas : Algérie Adrar Chlef. Alger. Rélizane Timimoun Reggane Aoulef. Exemple 2 : Représentation d une expression arithmétique : A (B + C * (D E)) * F A * + F B * C D E -18-

20 Exemple 3 : Arbre de décision d un tri de trois éléments a, b, et c : a>b a b a>c a c b>c b c c>b c b a>c a c (a, c, b) (a, b, c) (c, a, b) (b, a, c) (b, c, a) (c, b, a) 1. Définition : Un arbre binaire est composé d une racine (ou nœud) et de deux sous-arbres binaires (gauche et droit). Un arbre binaire peut aussi être vide. 2. Primitives : La structure arbre binaire doit assurer les primitives suivantes : - Insérer() - Supprimer() - Rechercher() - Taille() - Vide() 3. Représentation Physique : Un arbre binaire est facilement représenté par une liste chaînée. Néanmoins, la représentation tabulaire est souvent utilisée pour les arbres de tri. Exemple 4 : Tête

21 4. Parcours d un Arbre : On appelle parcours d un arbre binaire, toute méthode permettant l accès une seule fois aux nœuds de cette arbre. 4.1 Le Parcours en Pré-ordre (Prefix en anglais) : Dans ce mode, on inspecte d abord la racine, puis le sous-arbre gauche, et enfin le sous-arbre droit (RGD). Ce type de parcours est caractérisé par le balayage en profondeur : vertical de haut en bas. Exemple : (L arbre de l exemple 4) RGD : (5 (1) (4 (7) ())) (8 () (10 (12) ())) 4.2 Le Parcours en Post-ordre (Postfix en anglais) : Dans ce mode, on inspecte d abord le sous-arbre gauche, puis le sous-arbre droit, et enfin la racine (GDR). Ce type de parcours est caractérisé par le balayage en profondeur : vertical de bas en haut. Exemple : (L arbre de l exemple 4) GDR : ((1) ((7) () 4) 5) (() ((12) () 10) 8) Le Parcours en Ordre (Infix en anglais) : Dans ce mode, on inspecte d abord le sous-arbre gauche, puis la racine, et enfin le sous-arbre droit (GRD). Ce type de parcours est caractérisé par le balayage en largeur (horizontal). Exemple : (L arbre de l exemple 4) GRD : ((1) 5 ((7) 4 ())) 2 (() 8 ((12) 10 ())) -20-

22 Les Arbres Binaires de Recherche Un arbre binaire de recherche est un arbre ordonné horizontalement (de gauche à droite) ; i.e., la clé de tout nœud non feuille est supérieur à toutes celles de son sous-arbre gauche, et inférieure à toutes celles de son sous-arbre droit. Exemple : Parcours Pre-Ordre : 13 (9 (5 () (7)) (11 (10) (12))) (45 () (50 (48) (52))) Parcours Post-Ordre : ((() (7) 5) ((10) (12) 11) 9) (() ((48) (52) 50) 45) 13 Parcours en-ordre : ((() 5 (7)) 9 ((10) 11 (12))) 13 (() 45 ((48) 50 (52))) 1- Recherche d un élément : Puisque l arbre binaire de recherche est ordonné horizontalement, une simple recherche dichotomique est déclanché pour trouver une clé quelconque : 1- Tester si la clé de la racine de l arbre égale à la clé recherchée. 2- Sinon, chercher récursivement dans le sous-arbre gauche si la clé est inférieure à la racine, sinon dans le sous-arbre droit. Exemple : Chercher la clé 12 : Chercher la clé 51 : > > 9 51 > > > = 12 (clé trouvée) (clé non trouvée) 2- Insertion d un élément : Le principe de l insertion d un élément inexistant dans un arbre binaire de recherche (ABR) est basé sur la recherche de cet élément. Il est évident qu on va aboutir à une feuille (élément inexistant). Alors le nouvel élément est accroché à la dernière feuille ; i.e., à gauche si inférieur, à droite si supérieur. -21-

23 Exemple : Insertion de 3 et Suppression d un élément : L opération de suppression d un élément est effectuée selon 3 cas : - Si l élément est une feuille alors on le supprime simplement. - Si l élément a un seul descendant alors on le remplace par ce descendant. - Si l élément a deux descendants (ou bien deux sous-arbres), on le remplace, au choix, soit par l élément le plus à droite (le plus grand) de son sous-arbre gauche, soit par l élément le plus à gauche (le plus petit) de son sous-arbre droit. Exemple : Suppression de 16 et

24 4- Modification d un élément : Il n y pas de règle spécifique pour la modification. Une simple implémentation consiste à supprimer puis insérer la nouvelle valeur de l élément. 5- Stockage optimal d un arbre binaire de recherche: Pour améliorer l accès aux éléments de l arbre, on les stocke dans un tableau comme suit : si un élément est stocké à l indice i, alors ses fils gauche et droit sont respectivement en position 2*i et 2*i+1. Si un fils n existe pas, sa place est perdue (restera vide) (7 (4 (2) (6)) (9 (8) (10))) (18 () (24)) Dans le cas où l arbre binaire est complet, ce stockage est compact et optimal. Notons qu avec cette représentation, un simple parcours séquentiel du tableau correspond à un parcours de l arbre par niveau, appelé aussi parcours en largeur. -23-

25 Les Arbres AVL Lorsque plusieurs opérations d insertion et de suppression sont effectuées sur un arbre binaire de recherche, l arbre binaire risque de se dégénérer ; i.e., l arbre peut se déséquilibrer et se transformer à une liste linéaire : après la suppression de 4, 5, 7 et 11 : Ceci enlève tout intérêt de la structure arborescence car on est ramené à une recherche séquentielle!!! La solution de ce problème serait de réorganiser l arbre après chaque modification (insertion ou suppression) 1- Critère d équilibre parfait : Un arbre binaire est parfaitement équilibré si pour tout nœud, la différence entre le nombre de noeuds du sous-arbre gauche SAG et ce du sous-arbre droit SAD égale à 0 ou 1 (maximum 1). Le problème c est que ce critère est très coûteux à réaliser. 2- Arbres partiellement équilibrés : Un arbre partiellement équilibré est un arbre caractérisé par l équilibre de la hauteur des sous-arbres gauche et droit. -24-

26 Pour cela, on ajoute l information BALANCE pour chaque nœud, où sa valeur est inclue dans {-1, 0, 1}. typedef struct S_Noeud { int info ; struct S_Noeud* gauche ; struct S_Noeud* droit ; int balance; /* -1, 0, ou 1*/ } Noeud; Le facteur d équilibre BALANCE a le sens suivant : - Si BALANCE = -1, alors la hauteur du SAG est supérieure à celle du SAD. - Si BALANCE = 0, alors la hauteur du SAG égale à celle du SAD. - Si BALANCE = 1, alors la hauteur du SAG est inférieure à celle du SAD. 3- Les Arbres AVL : Ils sont des arbres BR à critère d équilibre, proposés par G.M. Andelson-Velski et E.M. Landis en Dans un arbre AVL, pour tous les nœuds, la différence entre les hauteurs des sous-arbres gauche et droit égale à 1 au maximum. 4- Insertion dans un arbre AVL : Dans tout ce qui suit, on va étudier la modification du SAG seulement. Lorsqu un nœud est inséré dans un arbre AVL, 4 cas majeurs se produisent : 1 er cas : Le SAG n a pas grandi. Dans ce cas, l équilibre est inchangé. Aucune action de rééquilibrage n est exigée. -25-

27 2 ème cas : Le SAG a grandi alors que le SAD était maximal (balance = 1). Dans ce cas, l équilibre est amélioré (balance = 0). Aucune action de rééquilibrage n est exigée. SAG SAD SAG SAD 3 ème cas : Le SAG a grandi alors que le SAG et le SAD avaient la même hauteur (balance = 0). Dans ce cas, le SAG atteint la hauteur maximale (balance = -1). Aucune action de rééquilibrage n est exigée. SAG SAD SAG SAD 4 ème cas : Le SAG a grandi alors qu il était déjà maximal (balance = -1). SAG SAD SAG SAD Dans ce cas, le critère d équilibre AVL n est plus respecté. Alors, il faut réorganiser l arbre selon ces deux cas : Cas gauche-gauche : c est le cas où le sous-arbre gauche du SAG a grandi : A B C A B C Dans ce cas, une simple rotation à droite des nœuds 1 et 2 est effectuée. La racine du SAG devient la racine de l arbre en question. -26-

28 Cas gauche-droite : c est le cas où le sous-arbre droit du SAG a grandi : A 2 B1 B2 C A B1 B2 C Dans ce cas, cet arbre est divisé lui même en sous-arbre gauche et droit, et sa racine devient la racine de l arbre en question. Remarque : Cette méthode est valable quelque soit la BALANCE entre B1 et B2 (-1, 0, ou 1). 4- Retrait dans un arbre AVL : Lorsqu un nœud est supprimé d un arbre AVL, 4 cas majeurs se produisent : 1 er cas : Le SAG n a pas diminué à cause du retrait (balance n a pas changé). Dans ce cas, l équilibre est inchangé. Aucune action de rééquilibrage n est exigée. 2 ème cas : Le SAG a diminué alors qu il était maximal (balance = -1). Dans ce cas, l équilibre est amélioré (balance = 0). Aucune action de rééquilibrage n est exigée. SAG SAD SAG SAD 3 ème cas : Le SAG a diminué alors qu il avait la même hauteur que le SAD (balance = 0). Dans ce cas, le SAG atteint la hauteur minimale (balance = 1). Aucune action de rééquilibrage n est exigée. SAG SAD SAG SAD -27-

29 4 ème cas : Le SAG a diminué alors qu il était minimal (balance = 1). SAG SAD SAG SAD Dans ce cas, le critère d équilibre AVL n est plus respecté. Alors, il faut réorganiser l arbre selon ces deux cas : Cas droite-droite : c est le cas où le sous-arbre doit du SAD à une hauteur supérieur ou égale à celle de son sous-arbre gauche: A B C A B C Dans ce cas, une simple rotation à gauche des nœuds 1 et 2 est effectuée. La racine du SAD devient la racine de l arbre en question. Cas droite-gauche : c est le cas où le sous-arbre gauche du SAD à une hauteur supérieur à celle de son sous-arbre gauche: A B1 B2 C A B1 B2 C Dans ce cas, cet arbre est divisé lui même en sous-arbre gauche et droit, et sa racine devient la racine de l arbre en question. Remarque : Cette méthode est valable quelque soit la BALANCE entre B1 et B2 (-1, 0, ou 1). -28-

30 Les Arbres B et BB Définition 1: Un arbre B est un arbre N-aire (d ordre N) qui satisfait les conditions suivantes : 1- Critère d ordre : Ordonné horizontalement. 2- Critère d équilibre : Chaque noeud est constitué de N jusqu à 2N éléments, et que toutes les feuilles ont la même profondeur. 3- Seule la racine peut avoir moins de N élément. Exemple : Un arbre B d ordre Représentation physique : Un arbre B d ordre N peut être facilement représenté par une liste chaînée nonlinéaire : typedef struct S_NoeudB { struct S_Noeud* fils[2*n + 1] ; int info[2*n]; } NoeudB; Donc, fils[i] pointe sur la racine du sous-arbre dont ses éléments sont inclues entre info[i-1] et info[i]. Exemple d utilisation des arbres B : Si la mémoire est paginée (partagée en pages), il est utile de charger du disque juste les informations qu on a besoin momentanément. Dans ce cas, l arbre B nous aide à charger les pages dont les informations qu ils portent sont dans un intervalle désigné par une feuille (entre 13 et 18 pour le 2 ème noeud). Remarque : On cas d insertion ou de retrait, une réorganisation de l arbre B est nécessaire si une des trois conditions est non respectée. -29-

31 Définition 2: Un arbre BB (proposé par R. Bayer) est un arbre B d ordre 1. Alors, chaque nœud possède 1 ou 2 éléments. Implémentation : Un arbre BB peut être implémenté en deux manières : Représentation Père-Fils Représentation Père-Fils-Frère La représentation père-fils est plus proche de l implémentation physique. Par contre, la représentation père-fils-frère nous aide à réorganiser (logiquement) l arbre en cas d insertion ou de suppression. Remarque : - Un nœud peut avoir au plus soit deux fils soit un fils et un frère. - En cas de manque d un fils ou d un frère, un nœud est considéré d avoir une feuille de profondeur zéro. Représentation physique : Un arbre BB peut être facilement représenté par une liste chaînée non-linéaire : typedef struct S_NoeudBB { int info; struct S_Noeud* gauche; struct S_Noeud* droit; int TypeDroit; /*0 : Fils, 1: Frère*/ } NoeudBB; dans un arbre BB : Lorsqu un nouvel élément est inséré dans un arbre BB en lui déséquilibrant le niveau de ses feuilles, 2 cas se produisent pour chaque type d insertion (à gauche (SAG) ou à droite (SAD)): A- Insertion au SAD 1 er Cas : La racine a le SAD comme fils : -30-

C12. Les structures arborescentes. Août 2006

C12. Les structures arborescentes. Août 2006 Les structures arborescentes Août 2006 Objectifs du C12 Connaître le principe de la structure d arbre binaire Connaître les détails d implémentation de la structure d arbre binaire de recherche Les structures

Plus en détail

Structures de données non linéaires

Structures de données non linéaires Structures de données non linéaires I. Graphes Définition Un graphe (simple) orienté G est un couple (S, A), où : S est un ensemble dont les éléments sont appelés les sommets. A est un ensemble de couples

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

Structures de données, IMA S6

Structures de données, IMA S6 Structures de données, IMA S6 Arbres Binaires d après un cours de N. Devésa, Polytech Lille. Laure Gonnord http://laure.gonnord.org/pro/teaching/ Laure.Gonnord@polytech-lille.fr Université Lille 1 - Polytech

Plus en détail

Chapitre 3 Structures de données linéaires : listes, piles et files

Chapitre 3 Structures de données linéaires : listes, piles et files Chapitre 3 Structures de données linéaires : listes, piles et files 1. Introduction Le but de ce chapitre est de décrire des représentations des structures de données de base telles les listes en général

Plus en détail

TP 8 : Arbres binaires de recherche

TP 8 : Arbres binaires de recherche TP 8 : Arbres binaires de recherche Semaine du 17 Mars 2008 Exercice 1 Dénir une structure struct noeud_s permettant de coder un n ud d'un arbre binaire contenant une valeur entière. Ajouter des typedef

Plus en détail

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation : Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche Chapitre 1 Arbres binaires de recherche 1 Les arbre sont très utilisés en informatique, d une part parce que les informations sont souvent hiérarchisées, et peuvent être représentées naturellement sous

Plus en détail

Cours d Algorithmique et Complexité

Cours d Algorithmique et Complexité Cours d Algorithmique et Complexité Structures de données (2e suite) Catalin Dima Arbres binaires de recherche Propriété de base des arbres binaires de recherche Soit x un noeud de l arbre. Alors : 1.

Plus en détail

Algorithmique P2. HeapSort et files de priorité Ulg, 2009-2010 Renaud Dumont

Algorithmique P2. HeapSort et files de priorité Ulg, 2009-2010 Renaud Dumont Algorithmique P2 HeapSort et files de priorité Ulg, 2009-2010 Renaud Dumont Structure de tas - arbre Un tas est une structure de données qui Permet un nouveau type de tri (Tri par tas) Permet l'implémentation

Plus en détail

4.2 Les arbres binaires de recherche

4.2 Les arbres binaires de recherche 4.2 Les arbres binaires de recherche 4.2.1 Définition Les arbres binaires de recherche sont utilisés pour accélérer la recherche dans les arbres m-aires. Un arbre binaire de recherche est un arbre binaire

Plus en détail

Arbres ordonnés, binaires, tassés, FAP, tri par FAP, tas, tri par tas

Arbres ordonnés, binaires, tassés, FAP, tri par FAP, tas, tri par tas Arbres ordonnés, binaires, tassés, FAP, tri par FAP, tas, tri par tas 1. Arbres ordonnés 1.1. Arbres ordonnés (Arbres O) On considère des arbres dont les nœuds sont étiquetés sur un ensemble muni d'un

Plus en détail

Séance de TD 05 TD05. 1 Exercice 1. 1.1 Question 1 : dessins des ABR avec hauteurs différentes AG51

Séance de TD 05 TD05. 1 Exercice 1. 1.1 Question 1 : dessins des ABR avec hauteurs différentes AG51 Séance de TD 05 1 Exercice 1 1. Dessinez les arbres binaires de recherche de hauteur 2,3,4,5 et 6 pour le même ensemble de clés S = 1,4,5,10,16,17,21. 2. Donnez l algorithme de l opération ArbreRechercher(x,k)

Plus en détail

ARBRES BINAIRES DE RECHERCHE

ARBRES BINAIRES DE RECHERCHE ARBRES BINAIRES DE RECHERCHE Table de symboles Recherche : opération fondamentale données : éléments avec clés Type abstrait d une table de symboles (symbol table) ou dictionnaire Objets : ensembles d

Plus en détail

LES ARBRES BINAIRES DE RECHERCHE

LES ARBRES BINAIRES DE RECHERCHE 1 INTRODUCTION À L ALGORITHMIQUE - LES ARBRES BINAIRES DE RECHERCHE Chargée de cours: Transparents:http://www-npa.lip6.fr/~blin/Enseignements.html Email: lelia.blin@lip6.fr Arbres binaires de Recherche

Plus en détail

Travaux dirigés n o 6

Travaux dirigés n o 6 Travaux dirigés n o 6 Lycée Kléber MPSI, Option Info 2014/2015 Exercice 1 (Indexation d un arbre binaire) Ecrire une fonction Caml indexation : ( f, n) arbre_binaire -> (string,string) arbre_binaire qui

Plus en détail

C ellules. Gestion et récupération automatique de mémoire. Principes des lang. de progr. INE 11. Allocation dynamique de mémoire.

C ellules. Gestion et récupération automatique de mémoire. Principes des lang. de progr. INE 11. Allocation dynamique de mémoire. Principes des lang. de progr. INE 11 Michel Mauny ENSTA ParisTech Prénom.Nom@ensta.fr Michel Mauny (ENSTA ParisTech) INE 11 Prénom.Nom@ensta.fr 1 / 37 Gestion et récupération automatique de mémoire lanage

Plus en détail

Les arbres binaires de recherche

Les arbres binaires de recherche Institut Galilée Année 2010-2011 Algorithmique et arbres L2 TD 6 Les arbres binaires de recherche Type en C des arbres binaires (également utilisé pour les ABR) : typedef struct noeud_s { struct noeud_s

Plus en détail

Initiation aux algorithmes des arbres binaires

Initiation aux algorithmes des arbres binaires Initiation aux algorithmes des arbres binaires Plan I. Les arbres biniaires I. Définition II. Représentation graphique d un arbre III. Terminologie IV. Représentation en mémoire des arbres binaires V.

Plus en détail

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII ALGORITHMIQUE II NOTION DE COMPLEXITE 1 2 Comment choisir entre différents algorithmes pour résoudre un même problème? Plusieurs critères de choix : Exactitude Simplicité Efficacité (but de ce chapitre)

Plus en détail

9. Implantations des arbres binaires par un tableau: les monceaux (les tas) - heap en anglais.

9. Implantations des arbres binaires par un tableau: les monceaux (les tas) - heap en anglais. 9. Implantations des arbres binaires par un tableau: les monceaux (les tas) - heap en anglais. Définition : Un monceau (tas) est un arbre binaire complet dans lequel il existe un ordre entre un nœud et

Plus en détail

Algorithmique, Structures de données et langage C

Algorithmique, Structures de données et langage C UNIVERSITE PAUL SABATIER TOULOUSE III Algorithmique, Structures de données et langage C L3 IUP AISEM/ICM Janvier 2005 J.M. ENJALBERT Chapitre 1 Rappels et compléments de C 1.1 Structures Une structure

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

Arbres binaires de recherche (ABR) Binary Search Trees (BST)

Arbres binaires de recherche (ABR) Binary Search Trees (BST) LSVIII-BIM Algorithmie, 2015 Arbres binaires de recherche (ABR) Binary Search Trees (BST) I. Arbres binaires 1. Structure 2. Parcours II. Arbres binaires de recherche 1. Définition 2. Opérations sur les

Plus en détail

Partie 3. Gilles Lebrun (gilles.lebrun@unicaen.fr)

Partie 3. Gilles Lebrun (gilles.lebrun@unicaen.fr) Partie 3 Gilles Lebrun (gilles.lebrun@unicaen.fr) Les arbres binaires Définition : C est une structure arborescente ou hiérarchique ou récursive Chaque élément (nœud) constituant la structure de l arbre

Plus en détail

Marches, permutations et arbres binaires aléatoires

Marches, permutations et arbres binaires aléatoires Marches, permutations et arbres binaires aléatoires Épreuve pratique d algorithmique et de programmation Concours commun des Écoles Normales Supérieures Durée de l épreuve: 4 heures Cœfficient: 4 Juillet

Plus en détail

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004 Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)

Plus en détail

Arbres binaires. Chapitre 1. 1. Introduction. option informatique. 1.1 Définition formelle d un arbre binaire

Arbres binaires. Chapitre 1. 1. Introduction. option informatique. 1.1 Définition formelle d un arbre binaire Chapitre option informatique Arbres binaires. Introduction Dans son acceptation la plus générale, un arbre est un graphe acyclique orienté enraciné : tous les sommets, à l exception de la racine, ont un

Plus en détail

alg - Arbres binaires de recherche [br] Algorithmique

alg - Arbres binaires de recherche [br] Algorithmique alg - Arbres binaires de recherche [br] Algorithmique Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner Unisciel algoprog Version 25 avril 2015 Table des matières 1 Définition, Parcours, Représentation

Plus en détail

INF601 : Algorithme et Structure de données

INF601 : Algorithme et Structure de données Cours 2 : TDA Liste B. Jacob IC2/LIUM 15 février 2010 Plan 1 Définition du TDA Liste 2 Réalisation du TDA Liste 3 Type de stockage des éléments 4 Recherche d un élément Dans une liste non triée Dans une

Plus en détail

RECURSIVITE ARBRES BINAIRES

RECURSIVITE ARBRES BINAIRES RECURSIVITE ARBRES BINAIRES Insertion, Parcours pré, post et in ordre, Recherche, Suppression. Ch. PAUL Algorithmique Arbres binaires 1 ARBRE BINAIRE DEFINITION RECURSIVE Les arbres binaires sont des arbres

Plus en détail

Université Paris Diderot Paris 7. TD n 2. Arbres Binaire de Recherche

Université Paris Diderot Paris 7. TD n 2. Arbres Binaire de Recherche Université Paris Diderot Paris L Informatique Algorithmique Année 00-0, er semestre TD n Arbres Binaire de Recherche Le type de donné arbre" sera utilisé pour indiquer l ensemble de toutes les Arbres Binaires

Plus en détail

Langage C/C++ TD 3-4 : Création dynamique d objets. Hubert Godfroy. 27 novembre 2014

Langage C/C++ TD 3-4 : Création dynamique d objets. Hubert Godfroy. 27 novembre 2014 Langage C/C++ TD 3-4 : Création dynamique d objets Hubert Godfroy 7 novembre 014 1 Tableaux Question 1 : Écrire une fonction prenant un paramètre n et créant un tableau de taille n (contenant des entiers).

Plus en détail

Cours Algorithmique, 2ème partie AS IUT

Cours Algorithmique, 2ème partie AS IUT Cours Algorithmique, 2ème partie AS IUT Cours 2 : Arbres Binaires Anne Vilnat http://www.limsi.fr/individu/anne/coursalgo Plan 1 Représentations arborescentes 2 Définition d un arbre binaire récursive

Plus en détail

L2 - Algorithmique et structures de données (Année 2010/2011) Examen (2 heures)

L2 - Algorithmique et structures de données (Année 2010/2011) Examen (2 heures) L2 - lgorithmique et structures de données (nnée 2010/2011) Delacourt, Phan Luong, Poupet xamen (2 heures) Les documents (cours, TD, TP) sont autorisés. Les quatre exercices sont indépendants. À la fin

Plus en détail

Proposition d activité utilisant l application. Tripatouille. (http://www.malgouyres.fr/tripatouille/)

Proposition d activité utilisant l application. Tripatouille. (http://www.malgouyres.fr/tripatouille/) IREM Clermont-Ferrand Algorithmique au lycée Malika More malika.more@u-clermont1.fr 28 janvier 2011 Proposition d activité utilisant l application Tripatouille (http://www.malgouyres.fr/tripatouille/)

Plus en détail

Introduction à l Algorithmique

Introduction à l Algorithmique Introduction à l Algorithmique N. Jacon 1 Définition et exemples Un algorithme est une procédure de calcul qui prend en entier une valeur ou un ensemble de valeurs et qui donne en sortie une valeur ou

Plus en détail

Notes de cours d algorithmique L3

Notes de cours d algorithmique L3 UFR d Informatique Paris 7 Paris Diderot Année 2010 2011 Notes de cours d algorithmique L3 François Laroussinie Notes de cours d algorithmique L3 François Laroussinie francois.laroussinie@liafa.jussieu.fr

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche Chapitre 6 Arbres binaires de recherche 6.1 Introduction On a étudié le problème de la recherche dans une collection d éléments ordonnés entre eux : on a montré que Pour une liste contiguë, la recherche

Plus en détail

Arbres Binaire. PSI DAKHLA Prof Youssef El marzak. 1 Prof Youssef Elmarzak

Arbres Binaire. PSI DAKHLA Prof Youssef El marzak. 1 Prof Youssef Elmarzak Arbres Binaire PSI DAKHLA Prof Youssef El marzak 1 Prof Youssef Elmarzak 1.introduction: Les arbre sont très utilisées en informatique, d une part parce que les informations sont souvent hiérarchisées,

Plus en détail

Les arbres binaires de recherche équilibrés

Les arbres binaires de recherche équilibrés Les arbres binaires de recherche équilibrés Stéphane londu Table des matières 1 rbres binaires de recherche 1.1 Rappels.................................. 1. Rotations................................. rbres

Plus en détail

INF601 : Algorithme et Structure de données

INF601 : Algorithme et Structure de données Cours 2 : TDA Arbre Binaire B. Jacob IC2/LIUM 27 février 2010 Plan 1 Introuction 2 Primitives u TDA Arbin 3 Réalisations u TDA Arbin par cellules chaînées par cellules contiguës par curseurs (faux pointeurs)

Plus en détail

Chapitre 7. Récurrences

Chapitre 7. Récurrences Chapitre 7 Récurrences 333 Plan 1. Introduction 2. Applications 3. Classification des récurrences 4. Résolution de récurrences 5. Résumé et comparaisons Lectures conseillées : I MCS, chapitre 20. I Rosen,

Plus en détail

1 Recherche en table par balayage

1 Recherche en table par balayage 1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte Projet d informatique M1BI : Compression et décompression de texte Le but de ce projet est de coder un programme réalisant de la compression et décompression de texte. On se proposera de coder deux algorithmes

Plus en détail

Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP)

Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP) Rapport du Jury du Concours 2010 Épreuve Pratique d Algorithmique et de Programmation (EPAP) Loris Marchal, Guillaume Melquion, Frédéric Tronel 21 juin 2011 Remarques générales à propos de l épreuve Organisation

Plus en détail

Architecture des Systèmes d Information Architecture des Systèmes d Information

Architecture des Systèmes d Information Architecture des Systèmes d Information Plan... Tableaux et tris I3 - Algorithmique et programmation 1 Rappels Nicol Delestre 2 Tableaux à n dimensions 3 Initiation aux tris Tableaux - v2.0.1 1 / 27 Tableaux - v2.0.1 2 / 27 Rappels : tableau

Plus en détail

Programmation générique des arbres binaires de recherche AVL et applications

Programmation générique des arbres binaires de recherche AVL et applications Introduction Programmation générique des arbres binaires de recherche AVL et applications Ce TP porte sur l étude d une structure de données appelée arbres binaires de recherche qui sert généralement à

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Arbres binaires Version prof Version prof

Arbres binaires Version prof Version prof Arbres binaires Version prof Version prof types /* déclaration du type t_element */ t_arbrebinaire = t_noeudbinaire t_noeudbinaire = enregistrement t_element cle t_arbrebinaire fg, fd n enregistrement

Plus en détail

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation Complexité Objectifs des calculs de complexité : - pouvoir prévoir le temps d'exécution d'un algorithme - pouvoir comparer deux algorithmes réalisant le même traitement Exemples : - si on lance le calcul

Plus en détail

Structure fonctionnelle d un SGBD

Structure fonctionnelle d un SGBD Fichiers et Disques Structure fonctionnelle d un SGBD Requetes Optimiseur de requetes Operateurs relationnels Methodes d acces Gestion de tampon Gestion de disque BD 1 Fichiers et Disques Lecture : Transfert

Plus en détail

Algorithmique et Structures de données Feuille 5 : Arbres binaires

Algorithmique et Structures de données Feuille 5 : Arbres binaires Université Bordeaux Algorithmique et Structures de données Feuille : Arbres binaires On considère le type abstrait arbrebinaire d objet défini en cours. Pour rappel voir annexe A. LicenceInformatique0-0

Plus en détail

Listes de personnes et calculatrice polonaise inverse en Java

Listes de personnes et calculatrice polonaise inverse en Java Listes de personnes et calculatrice polonaise inverse en Java Université Paris Sud Motivation Le but de cet exercice est de manipuler les listes chaînées et les piles et de voir leur application en analyse

Plus en détail

Algorithmique P2. La complexité Ulg, 2009-2010 R.Dumont

Algorithmique P2. La complexité Ulg, 2009-2010 R.Dumont Algorithmique P2 La complexité Ulg, 2009-2010 R.Dumont Sources supplémentaires Ouvrages Data Structures in Java, T. Standish, 1998 Data Structures and Algorithms in Java (4th ed), Michael T. Goodrich &

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée. ANALYSE 5 points Exercice 1 : Léonie souhaite acheter un lecteur MP3. Le prix affiché (49 ) dépasse largement la somme dont elle dispose. Elle décide donc d économiser régulièrement. Elle a relevé qu elle

Plus en détail

Compression de Données - Algorithme de Huffman Document de Conception

Compression de Données - Algorithme de Huffman Document de Conception ROLLET Samuel SALLE Jennifer Compression de Données - Algorithme de Huffman Document de Conception Projet d'algorithmique et Structure des Données 1 SOMMAIRE 1. Domaine d application....4 1.1 Objectifs

Plus en détail

Quelques Algorithmes simples

Quelques Algorithmes simples Quelques Algorithmes simples Irène Guessarian ig@liafa.jussieu.fr 10 janvier 2012 Je remercie Patrick Cegielski de son aide efficace pour la programmation Java ; la section sur le codage de Huffman a été

Plus en détail

Chapitre 5 : Flot maximal dans un graphe

Chapitre 5 : Flot maximal dans un graphe Graphes et RO TELECOM Nancy A Chapitre 5 : Flot maximal dans un graphe J.-F. Scheid 1 Plan du chapitre I. Définitions 1 Graphe Graphe valué 3 Représentation d un graphe (matrice d incidence, matrice d

Plus en détail

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 1 de 46 Algorithmique Trouver et Trier Florent Hivert Mél : Florent.Hivert@lri.fr Page personnelle : http://www.lri.fr/ hivert 2 de 46 Algorithmes et structures de données La plupart des bons algorithmes

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

Les arbres binaires. Terminologie avancée (1) TAD arbre binaire. Terminologie avancée (2) Terminologie avancée (3)

Les arbres binaires. Terminologie avancée (1) TAD arbre binaire. Terminologie avancée (2) Terminologie avancée (3) Les arbres Structures les plus importantes et les plus utilisées en informatique Liste = cas dégénéré d arbre Eemples: Arbres généalogiques Arbres de classification Arbres d epression / - Traduction de

Plus en détail

ÉPREUVE COMMUNE DE TIPE 2008 - Partie D

ÉPREUVE COMMUNE DE TIPE 2008 - Partie D ÉPREUVE COMMUNE DE TIPE 2008 - Partie D TITRE : Les Fonctions de Hachage Temps de préparation :.. 2 h 15 minutes Temps de présentation devant le jury :.10 minutes Entretien avec le jury :..10 minutes GUIDE

Plus en détail

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Les types énumérés On peut aussi définir des types qui ont un nombre fini de valeurs (ex: jours de la semaine, couleurs primaires, etc.)

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

14. Stockage des données. OlivierCuré [ocure@univ-mlv.fr]

14. Stockage des données. OlivierCuré [ocure@univ-mlv.fr] 14. Stockage des données 416 Hiérarchie des stockages Mémoire cache est plus rapide et plus onéreuse que... RAM est plus rapide et plus onéreuse que... Disque dur est plus rapide et plus onéreux que...

Plus en détail

Optimisation de code

Optimisation de code Optimisation de code Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Optimisation de code 1 / 77 But L optimisation cherche à améliorer

Plus en détail

Arbres binaires de recherche

Arbres binaires de recherche 1 arbre des comparaisons 2 recherche dichotomique l'arbre est recalculé à chaque recherche 2 5 3 4 7 9 1 6 1 2 3 4 5 6 7 9 10 conserver la structure d'arbre au lieu de la reconstruire arbre binaire de

Plus en détail

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

CCP PSI - 2010 Mathématiques 1 : un corrigé

CCP PSI - 2010 Mathématiques 1 : un corrigé CCP PSI - 00 Mathématiques : un corrigé Première partie. Définition d une structure euclidienne sur R n [X]... B est clairement symétrique et linéaire par rapport à sa seconde variable. De plus B(P, P

Plus en détail

Algorithmique I. Augustin.Lux@imag.fr Roger.Mohr@imag.fr Maud.Marchal@imag.fr. Algorithmique I 20-09-06 p.1/??

Algorithmique I. Augustin.Lux@imag.fr Roger.Mohr@imag.fr Maud.Marchal@imag.fr. Algorithmique I 20-09-06 p.1/?? Algorithmique I Augustin.Lux@imag.fr Roger.Mohr@imag.fr Maud.Marchal@imag.fr Télécom 2006/07 Algorithmique I 20-09-06 p.1/?? Organisation en Algorithmique 2 séances par semaine pendant 8 semaines. Enseignement

Plus en détail

Arbres binaires en représentation chaînée

Arbres binaires en représentation chaînée Arbres binaires en représentation chaînée Construction Libération Opérations diverses 17/01/06 Bac2 - JMD - ArbrBin.ppt 1 Arbre n-aire Arbre binaire a b c d e f arbre n-aire e b a c f d arbre binaire 17/01/06

Plus en détail

Algorithmique et Programmation

Algorithmique et Programmation École Supérieure d Ingénieurs de Poitiers Gea Algorithmique et Programmation Laurent Signac ii Algorithmique et programmation Gea Table des matières Avant Propos v Structures de données Notion de pointeur..............................................

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

La fonction exponentielle

La fonction exponentielle DERNIÈRE IMPRESSION LE 2 novembre 204 à :07 La fonction exponentielle Table des matières La fonction exponentielle 2. Définition et théorèmes.......................... 2.2 Approche graphique de la fonction

Plus en détail

Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21

Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21 Exercices «Programmation récursive» Deuxième saison UPMC Cycle L Revision: 1.21 Anne Brygoo, Maryse Pelletier, Christian Queinnec, Michèle Soria Université Paris 6 Pierre et Marie Curie septembre 2005

Plus en détail

Intégration et probabilités TD1 Espaces mesurés Corrigé

Intégration et probabilités TD1 Espaces mesurés Corrigé Intégration et probabilités TD1 Espaces mesurés Corrigé 2012-2013 1 Petites questions 1 Est-ce que l ensemble des ouverts de R est une tribu? Réponse : Non, car le complémentaire de ], 0[ n est pas ouvert.

Plus en détail

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Leçon 11 PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Dans cette leçon, nous retrouvons le problème d ordonnancement déjà vu mais en ajoutant la prise en compte de contraintes portant sur les ressources.

Plus en détail

TP 4 -Arbres Binaires -

TP 4 -Arbres Binaires - L3 Informatique Programmation fonctionnelle OCaml Année 2013/2014 TP 4 -Arbres Binaires - Un arbre binaire est une structure de données qui peut se représenter sous la forme d une hiérarchie dont chaque

Plus en détail

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list =

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun> 94 Programmation en OCaml 5.4.8. Concaténation de deux listes Définissons maintenant la fonction concat qui met bout à bout deux listes. Ainsi, si l1 et l2 sont deux listes quelconques, concat l1 l2 constitue

Plus en détail

Les algorithmes de base du graphisme

Les algorithmes de base du graphisme Les algorithmes de base du graphisme Table des matières 1 Traçage 2 1.1 Segments de droites......................... 2 1.1.1 Algorithmes simples.................... 3 1.1.2 Algorithmes de Bresenham (1965).............

Plus en détail

Mini-Projet : Tournoi de Dames

Mini-Projet : Tournoi de Dames Mini-Projet : Tournoi de Dames L objectif du projet est de programmer un jeu de dames de façon à ce que votre programme puisse jouer une partie de dames avec les programmes des autres étudiants. 1 Organisation

Plus en détail

Gestion de la mémoire

Gestion de la mémoire Gestion de la mémoire ENSIIE : Programmation avancée 1/20 Langages et mémoire Différence principale entre langages de haut niveau : OCaml, Java, C# langages de bas niveau : C, C++ : Gestion de la mémoire

Plus en détail

V- Manipulations de nombres en binaire

V- Manipulations de nombres en binaire 1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,

Plus en détail

Mathématiques assistées par ordinateur

Mathématiques assistées par ordinateur Mathématiques assistées par ordinateur Chapitre 4 : Racines des polynômes réels et complexes Michael Eisermann Mat249, DLST L2S4, Année 2008-2009 www-fourier.ujf-grenoble.fr/ eiserm/cours # mao Document

Plus en détail

Initiation. àl algorithmique et à la programmation. en C

Initiation. àl algorithmique et à la programmation. en C Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,

Plus en détail

Algorithmique & Programmation (INF431) Contrôle classant CC2. 25 juin 2014

Algorithmique & Programmation (INF431) Contrôle classant CC2. 25 juin 2014 Algorithmique & Programmation (INF431) Contrôle classant CC2 25 juin 2014 Les parties I, II et III sont indépendantes les unes des autres. Elles peuvent être traitées dans l ordre de votre choix. Elles

Plus en détail

Optimisation de requêtes. I3009 Licence d informatique 2015/2016. Traitement des requêtes

Optimisation de requêtes. I3009 Licence d informatique 2015/2016. Traitement des requêtes Optimisation de requêtes I3009 Licence d informatique 2015/2016 Cours 5 - Optimisation de requêtes Stéphane.Gançarski Stephane.Gancarski@lip6.fr Traitement et exécution de requêtes Implémentation des opérateurs

Plus en détail

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2. Eo7 Calculs de déterminants Fiche corrigée par Arnaud Bodin Eercice Calculer les déterminants des matrices suivantes : Correction Vidéo ( ) 0 6 7 3 4 5 8 4 5 6 0 3 4 5 5 6 7 0 3 5 4 3 0 3 0 0 3 0 0 0 3

Plus en détail

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses 6. Hachage Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses PLAN Définition Fonctions de Hachage Méthodes de résolution de collisions Estimation

Plus en détail

2.1. Les fonctions. Les fonctions se définissent de la manière suivante : NomDeLaFonction(param1, param2,...)= { \\ Code de la fonction

2.1. Les fonctions. Les fonctions se définissent de la manière suivante : NomDeLaFonction(param1, param2,...)= { \\ Code de la fonction TP1, prise en main de Pari/GP et arithmétique Le programme que nous allons utiliser pour les TP se nomme PARI/GP dont le point fort est la théorie des nombres (au sens large). Il est donc tout à fait adapter

Plus en détail

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Groupe symétrique. Chapitre II. 1 Définitions et généralités Chapitre II Groupe symétrique 1 Définitions et généralités Définition. Soient n et X l ensemble 1,..., n. On appelle permutation de X toute application bijective f : X X. On note S n l ensemble des permutations

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

Algorithmique avancée en Python TDs

Algorithmique avancée en Python TDs Algorithmique avancée en Python TDs Denis Robilliard sept. 2014 1 TD 1 Révisions 1. Ecrire un programme qui saisit un entier, et détermine puis affiche si l entier est pair où impair. 2. Ecrire un programme

Plus en détail

Résolution d équations non linéaires

Résolution d équations non linéaires Analyse Numérique Résolution d équations non linéaires Said EL HAJJI et Touria GHEMIRES Université Mohammed V - Agdal. Faculté des Sciences Département de Mathématiques. Laboratoire de Mathématiques, Informatique

Plus en détail

Département Informatique Programmation objet. Cours n 8. Structures de données partie 3 Arbres binaires de calcul

Département Informatique Programmation objet. Cours n 8. Structures de données partie 3 Arbres binaires de calcul Programmation objet Cours n 8 Structures de données partie 3 Arbres binaires de calcul 1 Arbre binaire de calcul Nous avons vu l'utilisation des arbres binaires en tant que structure de données optimisée

Plus en détail