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