TD4. - Irif

publicité
L3 Informatique
Année 2016-2017
AMD5
TD no 4 : 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 :
16
Soit le tas-max suivant :
14
1. Y entasser l’élément 11.
10
8
2. En supprimer l’élément maximal.
2
7
4
9
3
1
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, . . ., h pris de gauche à droite.
42
24
18
14
3
42
24
18
11
12
14
16
6
1
11
16
9
7
9
3
12
6
1
7
1. Soit un tas représenté sous forme de tableau. Si i est la position d’un nœud ayant un
fils droit et un fils gauche, quels sont les indices de ses fils ? Inversement, soit i l’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 n est le nombre de clés et si les indices des
tableaux commencent à 0, alors les feuilles sont les nœuds indexés par b n2 c, b n2 c +
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 n de
type Noeud contient les champs suivants :
n.idx
n.prio
: Int
: Int
// l’indice courant de n dans le tas
// 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 n en
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é.
1
h
d
3
4
a
5
3
6
8
c
1
b
g
6
2
e
7
f
1
1. Exécuter l’algorithme de Dijkstra sur le graphe pondéré, à partir du sommet a.
2. Écrire la matrice M correspondant au graphe (colonnes et lignes sont indexées par a, b,
. . ., h).
3. Écrire la matrice N correspondant aux promenades de longueur 2 et de poids minimal
entre chaque paire de sommets.
4. En fonction des coefficients Mi,j de M , que vaut un coefficient Ni0 ,j 0 de N ?
2
Téléchargement