SIGLE DU COURS: IFT 2010 (A05) NOM DU PROFESSEUR: Neil Stewart TITRE DU COURS: Structures de Donn´ees EXAMEN INTRA
Date : Lundi, 17 octobre, 2005 Heure : 10:30-12:30
Lieu : G-415 Pavillon principal
DIRECTIVES P ´EDAGOGIQUES:
– Vous disposez de deux heures pour compl´eter cet examen.
– Documentation permise: une page 8” x 11”, recto-verso.
– Mettez toute de suite votre nom et code permanent dans la case (Figure 1).
– R´epondez sur l’examen. Il y a deux pages brouillons (page 5 et page 8).
– L’espace allou´e pour la r´eponse indique la longueur de la r´eponse cherch´ee.
– Il y a 9 questions, avec 100 points au total: 2 + 3 + 5 + 7 + 11 + 13 + 17 + 19 + 23 = 100.
PLAGIAT.Constitue un plagiat:
– faire ex´ecuter son travail par un autre
– utiliser, sans le mentionner, le travail d’autrui
– ´ECHANGER DES INFORMATIONS LORS D’UN EXAMEN – falsifier des documents
1. Question 1 (2 points)
Si une pile est implant´ee dans un tableau, le coˆut de d´epiler est de quel ordre? C’est-`a-dire le coˆut est Θ(. . .)?
2. Question 2 (3 points)
Expliquez bri`evement pourquoi un algorithme qui ne se sert pas d’une pile explicite, mais qui se sert d’appels r´ecursifs, n’est pas vraiment un algorithme “sans pile”.
3. Question 3 (5 points)
Vers la fin du dernier cours avant l’intra, nous discutions de l’id´ee ce chaˆınage externe pour rˆegler les collisions, dans la m´ethode d’adressage dispers´e (“hashing”). Un ´etudiant a sugg´er´e qu’on pourrait garder ces listes tri´ees, et j’ai r´epondu “oui, comme ¸ca le coˆut moyen serait deux fois moins cher (du moins dans le cas d’une recherche ´echou´ee . . . )”.
Pourquoi ai-je ajout´e les mots “dans le cas d’une recherche ´echou´ee”?
D´emontrez formellement que |n2−17n−3025|est O(n2).
5. Question 5 (11 points)
(a) Une arborescence binaire avecdniveaux, telle qu’il n’y a aucun noeud qui manque, a exactementn= 2d+1−1 noeuds. Supposons maintenant une arborescence ternaire pour laquelle chaque noeud interne a exactement trois enfants, plutˆot que deux.
Combien de noeuds au total dans l’arborescence?
(b) Et pour une arboresecence “k-ary” pour laquelle chaque noeud interne a exactement k enfants: combien de noeuds dans l’arborescence au total?
6. Question 6 (13 points)
Dans la m´ethode d’adressage dispers´e (“hashing”), le nombre d’´el´ements emmagasin´e a
´et´e not´eN, et le nombre de cases dans la table a ´et´e not´e M. Par cons´equence, si les collisions sont rˆegl´ees par chaˆınage externe, la longueur moyenne d’une liste est N/M. Nous allons voir, apr`es l’intra, qu’on s’arrange dans la pratique pour garder cette valeur petite, dans le but de raccourcir les recherches dans les listes de collision. Supposons que nous soyons dans un cas o`u l’adressage dispers´e est appropri´e (pas de “range query”, etc), et que nous gardons la valeur de N/M quelquepart entre 5 et 10.
Les arborescences AVL ont ´et´e introduites dans le but de faire des recherches plus vites qu’on peut faire avec les listes lin´eaires chaˆın´ees. Commentez donc bri`evement l’id´ee suivante. Plutˆot que de rˆegler les collisions avec des listes lin´eaires chaˆın´ees, utilisons plutˆot des arborescences AVL. Cela veut dire que nous allons mettre, dans chaque case de la table de hˆachage, une r´ef´erence (ou pointeur) vers la racine d’une arborescence AVL; cette arborescence remplacerait la liste lin´eaire chain´ee.
7. Question 7 (17 points)
Dans la preuve que E = I + 2n, o`u E est “External path-length”, et I est “Internal path-length”, nous nous sommes servis du fait qu’il doit exister, dans n’importe quelle arborescence binaire de recherche non-vide, un noeud interne avec deux noeuds d’´echec comme enfants. Donnez la preuve que cela est vraie. (Indice: une preuve rigoreuse n’est pas n´ecessairement une preuve longue.)
8. Question 8 (19 points)
Donnez le pseudo-code pour l’algorithme Siftdown, qui permet `a refaire un monceau qui ne satisfait plus la propri´et´e monceau parce que la clef `a la racine a ´et´e remplac´ee par une clef trop petite. (Je prends le cas de MaxHeap.) Notons que Drozdek appelle cet algorithme moveDown:
void moveDown(Object[ ] data, int first, int last){ . . .
(Je vous donne cela pour ´etablir le contexte un peu plus pr´ecis´ement: une syntaxe Java parfaite n’est pas exig´ee, je vous demande du pseudo-code. Si vous voulez, vous pouvez supprimer first en supposant que la racine se trouve dans la case 0. Cet algorithme est utilis´e par exemple dans heapDequeueet dansHeapSort.)
(a) Donnez un exemple deType Abstrait de Donn´ees (`a votre choix).
(b) Indiquez les deux composantes principales du Type Abstract de Donn´ees (utilisez votre exemple pour illustrer).
(c) Du point de vue de quelqu’un qui ´etudie les structures de donn´ees, c’est quoi qui d´efinit le probl`eme `a r´esoudre?
(d) Donnez deux m´ethodes possibles pour r´esoudre ce probl`eme, dans le cas de l’exemple que vous avez choisi.
Page brouillon: cette page ne sera pas prise en compte lors de la correction.