Université de Sherbrooke IFT 436 - Algorithmes et structures de données Devoir #3 Ces exercices sont à remettre le mardi 23 juillet après le cours. • Il est à noter que 5% de la note pourra être déduit pour la présentation du devoir. • Ces exercices doivent être faits en équipe d’au moins deux personnes (vous pouvez utiliser les mêmes groupes que le Devoir #1). Veuillez communiquer avec moi si vous n’avez pas de coéquipier. • Ce devoir compte pour 10% de la note finale. • Pour ce devoir et concernant la description des algorithmes, donner juste une description concise pour chaque étape (pas de pseudo-code). 1 Conception des algorithmes (40 pts) Exercice 1 (10 pts) Soit une matrice carrée contenant n × n nombres. Chaque ligne et chaque colonne est triée en ordre croissant, comme illustré dans l’exemple suivant (n = 3) : 1 2 30 16 21 31 17 22 33 – Décrivez un algorithme qui détermine si un nombre x est dans la matrice en O(n). – Donner en fonction de Θ l’ordre asymptotique exacte du temps d’exécution de votre algorithme ? Exercice 2 (10 pts) Élaborer un algorithme vorace optimale qui trouve le temps minimum requis afin de servir un groupe de n clients. Chaque client nécessite un certain temps t(i) ∈ N afin d’être servi. Vous pouvez servir les clients dans n’importe quel ordre. Il est à noter que lorsque vous servez un client, les autres attendent. Ainsi, le temps total d’attente pour un ordonnancement particulier de n clients est : n−1 X (n − i) × t(i) i=1 Expliquer de quelle manière cet algorithme exhibe la propriété du choix vorace . Quel est l’ordre asymptotique du temps d’exécution de votre algorithme ? 1 1.1 Le problème du sac à dos Exercice 3 ( 10 pts) – Trouvez la valeur de la solution optimale pour un sac de capacité 11, à l’aide de la programmation dynamique au problème du sac à dos suivant : Item Valeur Poids 1 1 1 2 6 2 3 18 5 4 22 6 5 28 7 – Donner les objets composant cette solution. Exercice 4 ( 10 pts) Supposant dans une variante du problème du sac à dos 0-1, l’ordre des articles quand ils sont triés par poids croissants, soit le même que lorsqu’ils sont triés par valeur décroissantes, comme illustré dans l’exemple suivant : Item Valeur Poids 1 28 1 2 22 2 3 18 5 4 6 6 5 1 7 Décriver un algorithme efficace pour trouver une solution optimale à cette variante du problème du sac à dos. 2 2 Tri (60 pts) Exercice 5 ( 10 pts) Soit S, un ensemble contenant n nombres réels et x un nombre réel. – Décrivez un algorithme qui détermine s’il y a deux éléments de S dont la somme est exactement x (Le temps d’exécution de l’algorithme doit être de l’ordre de O(n lg n)). – Supposons maintenant que l’ensemble S est trié. Décrivez un algorithme qui solutionne le même problème en temps O(n). 2.1 Tri par Tas Exercice 6 ( 10 pts) – En s’aidant de la figure, illustrer l’action du Tri Par Tas sur le tableau suivant h5, 13, 2, 25, 7, 17, 20, 8, 4i. – La séquence suivante est-elle un Tas-max h23, 17, 14, 6, 13, 10, 1, 5, 7, 12i ? Pourquoi ? Exercice 7 ( 10 pts) – Que faut-il changer à l’algorithme Entasser-Max afin que celui-ci devienne Entasser-Min(A, i), 3 un algorithme qui effectue la même manipulation mais sur une Tas-min 1 . Comparer le temps d’exécution de Entasser-Max à Entasser-Min. – Quel est le temps d’exécution l’algorithme du Tri par Tas sur un tableau de taille n dont tous les éléments sont déjà triés en ordre croissant ? 2.2 Tri-Rapide Exercice 8 ( 10 pts) – Comment devez-vous modifier l’algorithme du Tri Rapide pour qu’il tri en ordre décroissant ? – Quel est le temps d’exécution du Tri Rapide lorsque tous les éléments à trier ont la même valeur. Exercice 9 (10 pts) On suppose que les découpages (Partitionnements)à chaque niveau du tri rapide se font à 1 − α contre α, où α est une constante et 0 < α ≤ 1/2. Montrer que la profondeur minimale d’une feuille de l’arbre récursif est −lgn/lgα et la profondeur maximale est de −lgn/lg(1 − α) 2.3 Tri en temps linéaire Exercice 10 ( 10 pts) – Donnez une analyse détaillée du temps d’exécution du Tri-par base 1. La propriété d’un Tas-min est que pour chaque noeud i autre que la racine A[par(i)] ≤ T [i] 4