L3 Informatique Année 2016-2017
AMD5
TD no4 : révision sur les files de priorité et l’algorithme
de Dijkstra
Exercice 1 :
1. Dessiner tous les tas-max (priorité “>”) possibles avec les éléments suivants : 1,4,7,9.
2. Même question, en considérant un tas-min (priorité “<”).
Exercice 2 :
Soit le tas-max suivant :
1. Y entasser l’élément 11.
2. En supprimer l’élément maximal.
16
14
8
2 4
7
1
10
9 3
Exercice 3 :
Un tas peut être efficacement représenté en utilisant un tableau, car c’est un arbre complet
(sauf éventuellement pour le nœud le plus profond et le plus à droite qui peut n’avoir qu’un
fils gauche) calé à gauche. On remplit le tableau de gauche à droite avec les clefs des nœuds
de profondeur 0,1, . . ., hpris de gauche à droite.
42
24
14
3 12
11
6 1
18
16
7
9
42 24 18 14 11 16 9 3 12 6 1 7
1. Soit un tas représenté sous forme de tableau. Si iest la position d’un nœud ayant un
fils droit et un fils gauche, quels sont les indices de ses fils ? Inversement, soit il’indice
d’un nœud autre que la racine. Quel est l’indice de son père ?
2. Le tableau 23 17 14 6 13 10 1 5 7 12 représente-t-il un tas ?
3. Comment se traduit la propriété de l’ordre sur les clefs des tas dans le cas des tableaux ?
4. Montrer qu’avec cette représentation, si nest le nombre de clés et si les indices des
tableaux commencent à 0, alors les feuilles sont les nœuds indexés par bn
2c,bn
2c+
1, . . . , n 1.
1
L3 Informatique Année 2016-2017
Exercice 4 :
On considère une structure de données contenant des éléments de type Noeud ordonnés
dans un tas-max selon la priorité des noeuds. On considère alors que chaque nœud nde
type Noeud contient les champs suivants :
n.idx : Int // l’indice courant de n dans le tas
n.prio : Int // la priorite courante de n
Ensuite, on a un tas de type TAS_Noeud qui contient le champ suivant :
tas.array : Noeud[] // le tableau tas-max
Implémenter la procédure tas.updatePrio(n,p) qui augmente la priorité du nœud nen
lui affectant p(si p <= n.prio la procédure ne fait rien) tout en préservant l’invariant de
tas-max de tas.array.
Exercice 5 : algorithme de Dijkstra
Voici un graphe pondéré.
a
bc
d
ef
g
h
8
4
2
1
6
3
5
6
7
1
3
1
1. Exécuter l’algorithme de Dijkstra sur le graphe pondéré, à partir du sommet a.
2. Écrire la matrice Mcorrespondant au graphe (colonnes et lignes sont indexées par a,b,
. . ., h).
3. Écrire la matrice Ncorrespondant aux promenades de longueur 2et de poids minimal
entre chaque paire de sommets.
4. En fonction des coefficients Mi,j de M, que vaut un coefficient Ni0,j0de N?
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !