1 ALGORITHMES ET COMPLEXITÉ

publicité
NFP136 - ALGORITHMES
« GLOUTONS »
PLAN
•
•
•
•
Problèmes d'optimisation
Algorithmes gloutons
Arbre couvrant minimal
Choix d'activités
1
PROBLEMES D’OPTIMISATION
2
un problème
une solution


plusieurs solutions
une valeur
problème d'optimisation :
recherche d'une « meilleure » solution
= de valeur optimale (min ou max)
algorithme de résolution :
• reconnaissance d'une solution
• évaluation d'une solution
• sélection d'une des meilleures solutions
3
problèmes d'optimisation
 faciles
 difficiles
--------------------------------------------------------------EXEMPLES
3
B
1) Plus court chemin
3
E
5
2
C
A
6
2
D
4
1
4
F
G
4
problème facile (algorithme de Dijkstra, ou
parcours en largeur si longueurs=1) : ici,
valeur min=9 (ABECG)
4
2) Voyageur de commerce (TSP)
Recherche d'un plus court cycle
hamiltonien dans un graphe complet :
problème difficile ==> Ici, 3 solutions optimales
B
4
2
(ACBDEA, ACEBDA, et
2 1
A
D 5
2
AEBDCA, de valeur 12)
3
1
E
Nombre de solutions possibles : 24
(Dans le cas général=(n-1)!)
3
C
4
5
Problèmes « faciles »
==> algorithme de complexité
polynomiale (cf cours « Complexité »)
==> conception d'un tel algorithme ?
6
Problèmes « difficiles » : tous les
algorithmes exacts connus sont de
complexité non polynomiale (problèmes
dits NP-complets ou NP-difficiles) ==> ?
– problèmes de petite taille
 énumération possible
– problèmes de grande taille
 énumération impossible
32
(30! > 10 ), et donc ?
7
ALGORITHMES GLOUTONS
8
Choix glouton = fait une fois pour toute durant
l'algorithme, et jamais remis en cause ensuite
==> algorithme glouton = basé sur ce paradigme
(A chaque étape, on fait le choix le plus
« intéressant » à cet instant.)
Glouton ==> difficile d'atteindre et/ou garantir
l'optimalité (selon le problème/les données)...
MAIS
Glouton ==> facile à concevoir/implémenter et
rapide, en général !
9
EXEMPLE
un algorithme glouton pour le TSP :
- trier les arêtes par ordre des coûts croissants,
- sélectionner dans l'ordre les arêtes autorisées.
2
3
B
4
2 1
A
D
C
2
5
3
1
E
4
([A,E],[B,D],[A,B],
[A,D],[B,E],[A,C],
[E,D],[C,E],[C,D])
[A,B,D,C,E,A]
valeur 13
(opt=12
[ACEBDA])
10
EXEMPLE
un autre algorithme glouton pour le TSP :
- choisir un sommet de départ arbitraire,
- à chaque étape, choisir le plus « proche » voisin.
Sur le graphe précédent, en partant de A :
AEBDCA
Cycle hamiltonien de valeur 12 ==> optimal (ici) !
11
AUTRE EXEMPLE
Problème « du boulanger » :
Comment rendre la monnaie à un client avec un
nombre minimum de billets/pièces ?
Algorithme glouton : rendre la monnaie à l'aide
de la pièce/du billet de plus forte valeur, puis passer
au suivant si besoin, etc. Par exemple, si somme =
98 euros, alors le glouton renvoie 50+2*20+5+2+1
Dans notre système (500, 200, 100, 50, 20, 10, 5,
2, 1, 0.50, 0.20, 0.10, 0.05, 0.02, 0.01), la stratégie
gloutonne est TOUJOURS la meilleure !
Mais si 5, 4, 1 et non 5, 2, 1, alors la stratégie
12
gloutonne n'est PAS optimale pour 98 !
ARBRE COUVRANT
DE POIDS MINIMUM
13
LE PROBLÈME
relier des villes en réseau avec des liens
(routes) de longueur totale minimum
Graphe pondéré associé :
- sommets = objets (villes, PC, etc.)
- arête = lien possible
- poids d'une arête = longueur du lien
14
--------------------------------------------------------------
EXEMPLE
1
B
5
E
1
1
A
5
1
D
G
5
5
F
1
---------------------------------------------------------------
==> solution optimale
sans cycle et connexe
ARBRE
par tous les sommets
COUVRANT
de longueur totale min.
DE POIDS MIN.
15
ALGORITHME DE KRUSKAL
entrée : Graphe connexe G = (X,U,P)
à n sommets et m arêtes
sortie : A, un arbre couvrant de poid
minimum de G (==> n-1 arêtes)
16
procedure kruskal (entrée : graphe G, sortie : arbre A)
entier k=0; U'=; (U'=arêtes sélectionnées et k=|U'|)
début
i=1;
Trier les arêtes de G par ordre de poids croissants
tant que k < n-1 faire
Si la ième arête ai de U ne forme pas de cycle
avec les arêtes dans U' alors U':=U'+{ai}; k=k+1;
Finsi
i:=i+1;
fait
Retourner le graphe A=(X,U');
fin
17
-------------------------------------------------------------3
2
b
EXEMPLE
2
c
2
1
a
3
2
1
h
3
4
d
1
1
i
4
e
3
1
g
Liste triée :
1
f
ah de di ei hi fg ab bh ci cd bc ch ef gh ag ge
1 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4
x
x
x
-
x
x
x
-
x
-
-
-
x
STOP
-
n = 9  stop après n-1=8 arêtes sélectionnées
Poids(A) = (1+1+1+1+1+2+2+3) = 12
-------------------------------------------------------------- 18
BILAN :
• Algorithme glouton (toute arête sélectionnée
l'est une fois pour toute) MAIS OPTIMAL
• Implémentation de certaines parties à
préciser ==> cf ED
• Complexité = O(m log m) (comme le TRI),
si implémentation astucieuse
19
CHOIX D’ACTIVITES
20
LE PROBLÈME
A = {a1,a2,..,an}
==> n activités
ai  [di,fi] di début, fi fin de ai
ai et aj compatibles si di  fj ou dj  fi
Problème:
choisir le plus grand nombre d'activités
compatibles à effectuer
21
ALGORITHME CHOIX_ACTIVITÉ
choix glouton (maximise le temps restant après l'activité choisie)
Algorithme choix_activité (donnée A: liste initiale d'activités,
sortie A*: liste d'activités choisies)
début
trier et numéroter les ai dans l'ordre croissant des fi; f1  f2  … fn
A* = {a1};
j = 1;
j représente la dernière activité sélectionnée
pour i = 1 à n faire
si di ≥ fj alors
A* = A*U{ai};
j = i;
finsi
fait
fin
22
Complexité pire cas :
O(n log(n)) + O(n)
tri des fi
boucle
 O(n log(n))
-------------------------------------------------------------EXEMPLE
di = date de début de l'activité ai
fi = date de fin de l'activité ai
activités triées selon les fi
i
di
fi
1
1
4
2
3
5
3
0
6
4
5
7
5
3
8
6 7 8 9 10 11
5 6 8 8 2 12
9 10 11 12 13 14
23
1
2
1
3
1
4
1
4
5
1
4
6
1
4
7
1
4
8
1
4
8
9
1
4
8
10
1
4
8
11
1
0
1
2
4
3
4
5
6
8
7
8
11
9 10 11 12 13 14 temps
24
BILAN :
- De nouveau, algorithme glouton très efficace (en
O(n log(n))
- Algorithme très simple à implémenter (tableaux
pour stocker les di et fi)
- Algorithme également OPTIMAL : si la meilleure
solution ne commence pas par l'activité 1, on
peut remplacer sa première activité par la 1 sans
dégrader la solution, etc.
25
BILAN SUR LES ALGORITHMES GLOUTONS
Concept simple mais puissant et utile,
●
Potentiellement optimaux (selon la nature du
problème ou des données) : c'est toujours le cas
si le problème considéré est un matroïde !
●
Utilisés également pour les problèmes difficiles :
peuvent fournir rapidement des solutions,
parfois bonnes, ou au moins améliorables par
différents types de méthodes plus évoluées...
●
26
Téléchargement