Devoir 3

publicité
INF7341 — Structures de données
Hiver 2017
Devoir 3
(à remettre au plus tard le 10 avril, à 16h00)
(dans la chute du département d’informatique, située au PK-4150)
Le devoir doit être rédigé individuellement et à l’ordinateur. Vous devez justifier chacune de vos réponses. La démarche ainsi que l’utilisation correcte de la notation mathématique
seront évaluées. Tout retard entraı̂nera une pénalité de 20% par jour (incluant les jours de
la fin de semaine).
Question
1
2
Total
Sur
80
20
100
Note
1. (80 points) En 1972, Tarjan a proposé un algorithme permettant de calculer les composantes fortement connexes d’un graphe orienté en temps linéaire, en une seule passe du
graphe (voir l’entrée Wikipedia sur le sujet). Dans cette question, nous nous intéressons
à modifier l’implémentation de son algorithme pour qu’il retourne l’ensemble des composantes fortement connexes sous forme d’ensembles disjoints plutôt que de simplement
afficher le contenu des composantes, comme c’est typiquement présenté.
(a) (20 points) Donnez le pseudocode de l’algorithme de Tarjan pour que celui-ci retourne des ensembles disjoints des sommets appartenant à chacune des composantes
fortement connexes d’un graphe orienté quelconque G.
(b) En utilisant votre langage de programmation préféré parmi C, C++, Java et Python,
implémentez votre algorithme. Contraintes : Vous n’avez pas le droit d’utiliser de
bibliothèques de graphes ou d’ensembles disjoints. De plus, la structure de données
d’ensembles disjoints doit être implémentée telle que vue classe, c’est-à-dire que
la fusion doit se faire par rang et le calcul d’un représentant par compression de
chemin. La répartition des points se fera comme suit :
i. (20 points) Structure d’ensembles disjoints;
ii. (20 points) Structure de graphe orienté;
iii. (20 points) Algorithme de Tarjan.
Proposez votre propre implémentation à partir du pseudocode, sans recopier une autre
implémentation que vous pourriez trouver en ligne. Dans tous les cas, soyez bien prudents
de citer toutes vos sources si vous vous basez fortement sur une d’entre elles.
2. (20 points) Soit F une file binomiale. Pour chacun des deux énoncés suivants, indiquez
s’il est vrai ou faux. Appuyez votre réponse à l’aide d’une courte démonstration.
(a) (10 points) Si F est initialement vide et qu’on y insère n éléments quelconques,
alors le coût total des insertions est O(n).
1/2
INF7341 — Structures de données
Hiver 2017
(b) (10 points) Si F contient n éléments et qu’on effectue m extractions du minimum,
où m ≤ n, alors le coût total des extractions est O(m).
2/2
Téléchargement