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.

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. ...

Plus en détail