Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Exercices d'algèbre de données : Arbres binaires AVL et listes circulaires, Exams of Data Structures and Algorithms

Ce document contient des exercices relatifs à l'algèbre de données, plus précisément sur les arbres binaires AVL et les listes circulaires. Les exercices comprennent l'écriture de fonctions récursives et itératives pour insérer des valeurs dans un arbre AVL, supprimer le maximum, et éclater une liste circulaire. Il est demandé d'utiliser les structures de données et les modèles définis dans les questions précédentes.

Typology: Exams

2016/2017

Uploaded on 01/13/2024

malak-ghimouz
malak-ghimouz 🇹🇷

2 documents

1 / 9

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
L2 Informatique Algorithmique et Structures de Données 2016-2017
Examen (
1h30mn)
Documents et Téléphones portables Interdits
Exercice 1
Exercice 1Exercice 1
Exercice 1
(8 points):
(8 points):(8 points):
(8 points):
Soient les arbres binaires suivants :
Arbre 1
Arbre 1Arbre 1
Arbre 1
Arbre 2
Arbre 2Arbre 2
Arbre 2
Arbre 3
Arbre 3Arbre 3
Arbre 3
Représentation « Dynamique » « Statique standard » « Statique séquentielle »
TYPE Tnoeud1= STRUCTURE
Info, Bal: entier
Père,
Père, Père,
Père, FG, FD
: *Tnoeud1
FIN
R : *Tnoeud1
TYPE Tnoeud2= STRUCTURE
vide: booléen
Père, FG, Bal, Info, FD : entier
FIN
R : Tableau [MAX] de Tnoeud2
TYPE Tnoeud3= STRUCTURE
vide: booléen ;
Bal, Info: entier ;
FIN
R = Tableau [MAX] de Tnoeud3
Vide
Père
FG
Bal
Info
FD
F
3
2
2
12
5
V
F
0
7
-
1
7
6
F
-
1
0
1
17
4
F
3
11
1
32
8
F
0
-
1
0
16
-
1
F
2
-
1
-
1
10
13
F
2
-
1
0
2
-
1
F
4
-
1
0
37
-
1
V
V
F
4
-
1
-
1
22
12
F
11
-
1
0
27
-
1
F
6
-
1
0
8
-
1
V
……
….
….
….
Vide
Bal
Info
V
F
0
12
F
-
1
7
F
0
22
F
0
2
F
1
10
F
1
17
F
0
32
V
V
F
0
8
V
F
0
16
V
F
0
27
F
0
37
V
…..
1. Dessiner l’arbre 2 et l’arbre 3 sous forme graphique (comme l’arbre 1)
Indication :
- La racine ne possède pas un père (Nil ou -1)
- Dans la représentation statique séquentielle :
La case d’indice 0 est toujours vide
La case d'indice 1 est toujours réservée au nœud racine de l'arbre,
La case d'indice 2 est toujours réservée au FG de la racine,
La case d'indice 3 est toujours réservée au FD de la racine,
En général, le FG de la case i se trouve toujours à l'indice 2i et le FD de la case i se trouve toujours à
l'indice 2i+1, alors que le père de la case i il est toujours positionné à la case i div 2.
2. Préciser le type de chaque arbre (ABR, AVL ou quelconque).
Rappel :
- Un arbre AVL est un ABR équilibré dont tous les uds possèdent une balance (Bal) entre -1 et 1 où Bal =
Profondeur(FG(R) ) – Profondeur(FD(R))
pf3
pf4
pf5
pf8
pf9

Partial preview of the text

Download Exercices d'algèbre de données : Arbres binaires AVL et listes circulaires and more Exams Data Structures and Algorithms in PDF only on Docsity!

L2 Informatique Algorithmique et Structures de Données 2016-

Examen (1h30mn)

Documents et Téléphones portables Interdits

Exercice 1Exercice 1Exercice 1Exercice 1 (8 points):(8 points):(8 points):(8 points): Soient les arbres binaires suivants :

Arbre 1Arbre 1Arbre 1Arbre 1 Arbre 2Arbre 2Arbre 2Arbre 2 Arbre 3Arbre 3Arbre 3Arbre 3 Représentation « Dynamique » « Statique standard » « Statique séquentielle » TYPE Tnoeud1= STRUCTURE Info, Bal: entier Père,Père,Père,Père, FG, FD : *Tnoeud FIN R : *Tnoeud

TYPE Tnoeud2= STRUCTURE vide: booléen Père, FG, Bal, Info, FD : entier FIN R : Tableau [MAX] de Tnoeud

TYPE Tnoeud3= STRUCTURE vide: booléen ; Bal, Info: entier ; FIN R = Tableau [MAX] de Tnoeud Vide Père FG Bal Info FD F 3 2 2 12 5 V F 0 7 - 1 7 6 F - 1 0 1 17 4 F 3 11 1 32 8 F 0 - 1 0 16 - 1 F 2 - 1 - 1 10 13 F 2 - 1 0 2 - 1 F 4 - 1 0 37 - 1 V V F 4 - 1 - 1 22 12 F 11 - 1 0 27 - 1 F 6 - 1 0 8 - 1 V …… …. …. … ….

Vide Bal Info V F 0 12 F - 1 7 F 0 22 F 0 2 F 1 10 F 1 17 F 0 32 V V F 0 8 V F 0 16 V F 0 27 F 0 37 V …..

  1. Dessiner l’arbre 2 et l’arbre 3 sous forme graphique (comme l’arbre 1) Indication :
  • La racine ne possède pas un père (Nil ou -1)
  • Dans la représentation statique séquentielle :
  • La case d’indice 0 est toujours vide
  • La case d'indice 1 est toujours réservée au nœud racine de l'arbre,
  • La case d'indice 2 est toujours réservée au FG de la racine,
  • La case d'indice 3 est toujours réservée au FD de la racine,
  • En général, le FG de la case i se trouve toujours à l'indice 2i et le FD de la case i se trouve toujours à l'indice 2i+1, alors que le père de la case i il est toujours positionné à la case i div 2.
  1. Préciser le type de chaque arbre (ABR, AVL ou quelconque). Rappel :
  • Un arbre AVL est un ABR équilibré dont tous les nœuds possèdent une balance (Bal) entre -1 et 1 où Bal = Profondeur(FG(R) ) – Profondeur(FD(R))
  1. Ecrire la fonction récursive « TypeAB(R : *Tnoeud1) : entier » qui permet de retourner le type de l’arbre (0 : quelconque, 1 : AVL ou x (x > 1) : ABR)
  2. Sans utiliser une pile, écrire la fonction itérative « insererAVL (R : *Tnoeud1) : *Tnoeud1 » qui permet d’insérer une valeur donnée dans l’arbre AVL « R » de type « Tnoeud1 ».
  3. Donner le résultat de la suppression du maximum de l’arbre AVL de la question 2 (répéter l’opération trois fois consécutives).
  4. Ecrire la fonction récursive « SupprimerMax (R : *Tnoeud1) : *Tnoeud1 » qui permet de supprimer le maximum de l’arbre AVL « R ». Remarques :
  • Pour l’écriture des algorithmes, vous devez utiliser les opérations du modèle d’AVL suivantes :
  • Procédure CreerNoeud (Var R : *Tnoeud1, x :entier)
  • Procedure LibererNoeud (Var R :*Tnoeud1)
  • Fonction Info (R :* Tnoeud1) : entier
  • Procédure Aff_info (Var R :* Tnoeud1, x :entier)
  • Fonction Bal (R :* Tnoeud1) : entier
  • Procédure Aff_Bal (Var R :* Tnoeud1, x :entier)
  • Fonction Pere (R :* Tnoeud1) : *Tnoeud
  • Procédure Aff_Pere (Var R :* Tnoeud1, P :* Tnoeud1)
  • Fonction FG (R :* Tnoeud1) : *Tnoeud
  • Procédure Aff_FG (Var R :* Tnoeud1, P :* Tnoeud1)
  • Fonction FD (R :* Tnoeud1) : *Tnoeud
  • Procédure Aff_FD (Var R :* Tnoeud1, P :* Tnoeud1)
  • Vous pouvez utiliser directement les fonctions suivantes :
  • « profondeur (R : *Tnoeud1) : entier » qui retourne la profondeur de l’arbre R
  • « reequiliber (R : *Tnoeud1) : *Tnoeud1 » qui permet de rééquilibrer l’arbre R.

Exercice 2Exercice 2Exercice 2Exercice 2 ((((9 99 9 points)points)points):points):::

I. Soit « sommet » une pile implémentée sous forme d’une LLC définie comme suit : TYPE type1= STRUCTURE // à compléter (Question III.2) FIN

TYPE maillon= STRUCTURE Val : type1; suiv : * maillon Fin

sommet : *maillon;

C’est une pile prioritaireprioritaireprioritaireprioritaire où l’élément le plus prioritaire est au sommet. La priorité est un entier positive donné par la « fonction prio (val : type1) : entier » ; ainsi :

  • L’élément le plus prioritaire est celui ayant le nombre le plus grand.
  • Si deux éléments ont la même priorité, on applique le principe LIFO (dernier arrivé, premier servi). Question I : Ecrire les opérations du modèle de ce type de pile. II. Soit F une file d’attente définie comme suit : const MAX = 100 ; TYPE type2 = STRUCTURE // à compléter (Question III.1) FIN

TYPE FA = STRUCTURE

Elts: Tableau [MAX] de type2; tete, NbElt : entier; FIN Les trois champs du type FA ont la signification suivante :

  • Elts : tableau devant contenir les éléments de la file ; la capacité de la file est définie par MAX.
  • tete : indice du premier élément de la file.
  • NbElts : nombre d’éléments dans la file. Question II : La file est gérée comme un tableau circulaire. Ecrire les opérations du modèle de cette file.

ExerciceExerciceExerciceExercice 3 33 3 ((((3 33 3 pointpointpoints + 2 points bonuspoints + 2 points bonuss + 2 points bonuss + 2 points bonus))))

I. Soit L une Liste linéaire Chaînée bidirectionnelle. type MaillonBD = Structure val : typeqq ; suiv, prec: * MaillonBD ; fin

type ListeBD= Structure Tête, Queue: * MaillonBD ; fin En utilisant les structure de données (MaillonBD et ListeBD) ci-dessus et le modèle défini en cours, écrire :

  1. La procédure itérative « InsererFin (Var L : ListeBD, Q : *MaillonBD) » qui permet d’insérer le maillon Q à la fin de la liste L.
  2. La procédure itérative Eclater (Var L, Li, Ls : ListeBD, x : entier) qui permet d’éclater la liste L en deux listes Li et Ls de telle sorte que Li contient tous les maillons de valeur inférieure à x et Ls contient tous les maillons de valeur supérieure ou égale à x. Par exemple, pour la liste L [20 202020 ⇔ 15 ⇔ 10 ⇔ 35 ⇔ 19 ⇔ 13 ⇔ 5 ⇔ 3 ⇔ 12 ⇔ 7 ⇔ 16 ⇔ 40 ⇔ 25 ⇔ 38] et x = 20 la procédure retourne la liste L vide, la liste Li [15⇔ 10 ⇔ 19 ⇔ 13 ⇔ 5 ⇔ 3 ⇔ 12 ⇔ 7 ⇔ 16] et la liste Ls [20 202020 ⇔ 35 ⇔ 40 ⇔ 25 ⇔ 38].
  3. La fonction itérative Concatener (Li, Ls : ListeBD) : ListeBD qui permet de retourner le résultat de concaténation de Li avec Ls.

II.II.II.II. Question Bonus (2 points)Question Bonus (2 points)Question Bonus (2 points)Question Bonus (2 points)

Le tri rapide consiste à choisir une valeur dans la liste appelée « pivot » (par exemple la première valeur de la liste) et de déplacer avant elle toutes celles qui lui sont inférieures et après elle toutes celles qui lui sont supérieures. Réitérer le procédé avec la tranche de la liste inférieure (Li) et la tranche de la liste supérieure (Ls) à ce pivot tant que les listes (Li ou Ls) ne sont pas vides. Par exemple : pour la liste L = [20 202020 ⇔ 15 ⇔ 10 ⇔ 35 ⇔ 19 ⇔ 13 ⇔ 5 ⇔ 3 ⇔ 12 ⇔ 7 ⇔ 16 ⇔ 40 ⇔ 25 ⇔ 38]. Si on choisit le pivot comme la première valeur de la liste, donc on aura : 15151515 ⇔⇔⇔⇔ 10 ⇔ 19 ⇔ 13 ⇔ 5 ⇔ 3 ⇔ 12 ⇔ 7 ⇔ 16 ⇔ 20 ⇔ 35353535 ⇔⇔⇔⇔ 40 ⇔ 25 ⇔ 38

Le tableau suivant résume le déroulement de ce principe de tri :

20202020 ⇔ 15 ⇔ 10 ⇔ 35 ⇔ 19 ⇔ 13 ⇔ 5 ⇔ 3 ⇔ 12 ⇔ 7 ⇔ 16 ⇔ 40 ⇔ 25 ⇔ 38 15151515 ⇔⇔⇔⇔ 10 ⇔ 19 ⇔ 13 ⇔ 5 ⇔ 3 ⇔ 12 ⇔ 7 ⇔ 16 ⇔ 20 ⇔ 35353535 ⇔⇔⇔⇔ 40 ⇔ 25 ⇔ 38 10101010 ⇔⇔⇔⇔ 13 ⇔ 5 ⇔ 3 ⇔ 12 ⇔ 7 ⇔ 15 ⇔ 19191919 ⇔⇔⇔⇔ 16 ⇔ 20 ⇔ 25252525 ⇔⇔⇔⇔ 35 ⇔ 40404040 ⇔⇔⇔⇔ 38 5555 ⇔⇔⇔⇔ 3 ⇔ 7 ⇔ 10 ⇔ 13131313 ⇔⇔⇔⇔ 12 ⇔ 15 ⇔ 16161616 ⇔⇔⇔⇔ 19 ⇔ 20 ⇔ 25 ⇔ 35 ⇔ 38383838 ⇔⇔⇔⇔ 40 3333 ⇔⇔⇔⇔ 5 ⇔ 7777 ⇔⇔⇔⇔ 10 ⇔ 12121212 ⇔⇔⇔⇔ 13 ⇔ 15 ⇔ 16 ⇔ 19 ⇔ 20 ⇔ 25 ⇔ 35 ⇔ 38 ⇔ 40 3 ⇔ 5 ⇔ 7 ⇔ 10 ⇔ 12 ⇔ 13 ⇔ 15 ⇔ 16 ⇔ 19 ⇔ 20 ⇔ 25 ⇔ 35 ⇔ 38 ⇔ 40

  1. Le principe de tri rapide correspond au paradigme « diviser pour régner », expliquer comment?
  2. En utilisant les procédures de la partie I, écrire la procédure récursive TriRapide (Var L : * ListeBD).

La liste « Li » à trier par le tri rapide La liste « Ls » à trier

pivotpivotpivotpivot

L2 Informatique Algorithmique et Structures de Données 2016-

Solution de lSolution de lSolution de lSolution de l’’’’ExamenExamenExamenExamen

Exercice 1Exercice 1Exercice 1Exercice 1 (8 points)(8 points)(8 points)(8 points)::: Soient les arbres binaires suivants ::

Arbre 1Arbre 1Arbre 1Arbre 1 (^) Arbre 2Arbre 2Arbre 2Arbre 2 Arbre 3Arbre 3Arbre 3Arbre 3 Représentation « Dynamique » « Statique standard » (0.5(0.5(0.5(0.5 point)point)point)point) « Statique séquentielle » (0.5(0.5(0.5(0.5 point)point)point)point)

Quelconque (0.25 point)(0.25 point)(0.25 point)(0.25 point) Quelconque (0.25 point)(0.25 point)(0.25 point)(0.25 point) AVL (0.25 point)(0.25 point)(0.25 point)(0.25 point)

  1. Fonction TypeAB(R : *Tnoeud1) : entier (2 points)(2 points)(2 points)(2 points) Si (R = Nil) alors retourner (1) Sinon Si FG(R) = FD (R) = Nil alors retourner (1) Sinon Si (info(R) >= info( FG(R)) ou (info(R) < info( FD(R)) alors retourner (0) Sinon Si |bal(R)| > 1 alors retourner (2) Sinon retourner (TypeAB(FG(R)) * TypeAB(FD(R)))
  2. Fonction insererAVL (R : *Tnoeud1) : *Tnoeud1 (2 points)(2 points)(2 points)(2 points) P  CreerNoeud(x) Si R = Nil alors Aff_pere (P, Nil) Sinon Inserer faux TQ (non inserer) faire DTQ Si (info (R) > x) alors Si (FG (R) = Nil) alors Aff_FG(R, P) ; Aff_pere(P, R); Inserer vrai Sinon R  FG (R) Sinon Si FD(R) = Nil alors

Sinon Q Sommet TQ (suivant (Q) ≠ Nil) et (Prio(valeur(Q)) > Prio (X)) faire Q  suivant (Q) Aff_suiv (P, suivant(Q)) ; Aff_suiv (Q, P)

Depiler(Sommet, X) (^) (0.5 point)(0.5 point)(0.5 point)(0.5 point)

Si NON Pilevide(Sommet) X ← Valeur(Sommet) ; Q ← Sommet ; Sommet ←Suivant(Sommet) Liberer(Q) Fsi

II. Ecrire les opérations du modèle de file circulaire (en utilisant le nombre des éléments du tableau nbELt pour calculer l’indice de la dernière case (indice queue)). (2 points)(2 points)(2 points)(2 points) Modèle Implémentation Initfile(F) F.Tête ←Max; F.NbElt ← 0 Filevide(F) Retourner (F.NbElt = 0) Filepleine(F) Retourner (F.NbElt = Max -1 ) Enfiler(F,X) (0.75 point)(0.75 point)(0.75 point)(0.75 point)

SI (NON Filepleine( F)) Queue ← (F.Tete + F.NbElt + 1) Mod Max F.elements[Queue] ← X F.NbElt ++ Defiler(F,X) (0.75 point)(0.75 point)(0.75 point)(0.75 point)

SI (NON Filevide(F)) F.Tete ← (F.Tete + 1)Mod Max X ← F.elements[F.Tete]

III.

III.III.III.III.1.1.1.1. (0.25 point)(0.25 point)(0.25 point)(0.25 point) III.2. a (0.5 point)(0.5 point)(0.5 point)(0.5 point) III.2.b (0.25 point)(0.25 point)(0.25 point)(0.25 point) Type type 2 = structure Titre : chaîne de caractères Auteur : chaîne de caractères Fin

Type type 1 = structure Categorie : chaîne de caractères File : FA Fin

Fonction prio (val : type 1) : entier Retourner (val.File.NbElt)

III. 3. A. Procedure Nbre_Total_Livres (Sommet : * Maillon, Var Cpt : entier) (1 point)(1 point)(1 point)(1 point) Var P : * Maillon ; x : type 1 Debut CpCpCpCptttt  0000 TQ non Pilevide (Sommet) faire DTQ Depiler (Sommet, x) ; CptCptCptCpt Cpt + Prio(x)Cpt + Prio(x)Cpt + Prio(x)Cpt + Prio(x) ; Empiler (P,x) FTQ TQ non Pilevide (P) faire

((((0.5 point0.5 point0.5 point0.5 point))))

DTQ Depiler (P, x) ; Empiler (Sommet, x) FTQ Fin III. 3. B. Procedure Ajouter_Livre (Sommet : * Maillon, cat : chaîne de caractère, livre : type2) (1(1(1( point)point)point)point) Var P : * Maillon ; x : type 1 Debut TQ non Pilevide (Sommet) faire DTQ Depiler (Sommet, x) SiSiSiSi ((((x.x.x.x.categorie =categorie =categorie =categorie = catcatcatcat))) alors)alorsalorsalors enfiler (xenfiler (xenfiler (xenfiler (x....File, livre)File, livre)File, livre)File, livre) Empiler (P,x) FTQ TQ non Pilevide (P) faire DTQ Depiler (P, x) ; Empiler (Sommet, x) FTQ Fin III. 3. C. Procedure Afficher_Livres (Sommet : * Maillon, cat : chaîne de caractère) (1(1.(1(1...5 55 5 point)point)point)point) Var P : * Maillon ; x : type 1 ; F : FA, y : type 2 Debut TQ non Pilevide (Sommet) faire DTQ Depiler (Sommet, x) SiSiSiSi ((((x.x.x.x.categorie =categorie =categorie =categorie = catcatcatcat))) alors)alorsalorsalors DSIDSIDSIDSI TQ non Filevide (x.TQ non Filevide (x.File) faireTQ non Filevide (x.TQ non Filevide (x.File) faireFile) faireFile) faire DTQDTQDTQDTQ DDDefilerDefilerefilerefiler (x.File, y)(x.File, y)(x.File, y)(x.File, y) ;;; Ecrire (y;Ecrire (yEcrire (y)Ecrire (y)) ;);;; Enfiler (F, y)Enfiler (F, y)Enfiler (F, y)Enfiler (F, y) FTQFTQFTQFTQ x.Filex.Filex.Filex.File FFFF FSIFSIFSIFSI Empiler (P,x) FTQ TQ non Pilevide (P) faire DTQ Depiler (P, x) ; Empiler (Sommet, x) FTQ Fin