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