Démonstration 5 1. 2. 3.
Transcription
Démonstration 5 1. 2. 3.
IFT2125 – Introduction à l’algorithmique Automne 2014 Démonstration 5 Démonstrateur: Michael Blondin 1. Soient f, g : N → R≥0 . Montrez que O(f ) ⊂ O(g) ssi f ∈ O(g) et f 6∈ Ω(g). 2. À une certaine époque, l’unité monétaire du Portugal était constituée de pièces de 1, 2 12 , 5, 10, 20, 25 et 50 escudos. L’algorithme vorace suivant rend-il toujours la monnaie de façon optimale pour ce système monétaire ? def monnaie(p, m): t = [0] * len(p) x = m for i in reversed(xrange(len(p))): t[i] = int(x // p[i]) x = int(x % p[i]) return t Vous pouvez supposer qu’une infinité de pièces sont à votre disposition et que chaque montant est entier. 3. Considérez un système monétaire constitué de pièces de c1 , c2 , . . . , ck ∈ N>0 telles que c1 = 1 et ci ≥ 2ci−1 pour tout 1 < i ≤ k. L’algorithme vorace monnaie de la question précédente rend-il toujours la monnaie de façon optimale pour un tel système monétaire ? Vous pouvez supposer qu’une infinité de pièces sont à votre disposition et que chaque montant est entier. 1 4. Considérons le problème d’ordonnancement suivant. Nous avons un serveur qui doit traiter k clients au total et qui ne peut traiter qu’un client à la fois. Le temps requis pour traiter le client i est ti . Nous cherchons à minimiser le temps moyen d’attente des clients dans le système. Donnez un algorithme pour ce problème. 5. Quelle est la complexité de l’algorithme de Kruskal, qui permet de calculer l’arbre couvrant minimum d’un graphe ? 1 from ensembles_disjoints import * 2 3 4 5 6 7 8 9 10 # Entree: V un ensemble de sommets # E un ensemble d’aretes avec couts # Sortie: un arbre couvrant minimum T def kruskal(V, E): T = [] # arbre couvrant minimum D = init(len(V)) # initialise |V| ensemble disjoints # {1} {2} ... {|V|} poids = lambda (u, v, c) : c # retourne le poids d’une arete 11 12 13 14 for (u,v,c) in sorted(E, key = poids): i = find(D,u) # no. de l’ensemble disjoint qui contient u j = find(D,v) # no. de l’ensemble disjoint qui contient v 15 16 17 18 if i != j: merge(D,i,j) T.append((u,v)) # fusionne les ensembles disjoints i et j # ajoute l’arete (u,v) a T 19 20 return T 2 English version for Ph.D. students 1. Let f, g : N → R≥0 . Show that O(f ) ⊂ O(g) iff f ∈ O(g) and f 6∈ Ω(g). 2. At some point in history, the currency of Portugal was made of coins of 1, 2 21 , 5, 10, 20, 25 and 50 escudos. For this currency, is the following greedy algorithm always optimal for change making ? def monnaie(p, m): t = [0] * len(p) x = m for i in reversed(xrange(len(p))): t[i] = int(x // p[i]) x = int(x % p[i]) return t Suppose you have an unlimited supply of coins of each denomination and each amount is an integer. 3. Consider a currency made of coins of c1 , c2 , . . . , ck ∈ N>0 such that c1 = 1 et ci ≥ 2ci−1 for every 1 < i ≤ k. For such a currency, is the previous greedy algorithm monnaie always optimal for change making ? Suppose you have an unlimited supply of coins of each denomination and each amount is an integer. 4. Read Section 6.6.1 (Brassard & Bratley pp. 205–207) about minimizing time in systems with greedy scheduling. 3 5. What is the complexity of Kruskal’s algorithm, for minimum spanning trees, in the worst case ? 4
Documents pareils
Démonstration 5 0. 1. 2.
k clients au total et qui ne peut traiter qu’un client à la fois. Le temps requis pour traiter
le client i est ti . Nous cherchons à minimiser le temps moyen d’attente des clients dans le
système. ...