Title: CSI%203505%20/%20Automne%202005:%20Conception%20et%20Analyse%20des%20Algorithmes%20I.
1CSI 3505 / Automne 2005 Conception et Analyse
des Algorithmes I.
- Plan du Cours
- Introduction (Chapitre 1)
- Techniques de résolution Diviser pour régner
(Chapitre 2) - Techniques de résolution Programmation
dynamique(Chapitre 3) - Techniques de résolution Algorithmes
voraces(Chapitre 4) - Introduction a la théorie de Complexité du
calcul(Chapitre 9)
2CSI 3505Programmation Dynamique
- Principe général
- Souvent, pour résoudre un problème de taille n,
on s'aperçoit qu'il est composé de plusieurs sous
problèmes identiques. Si on résout chaque sous
exemplaire séparément sans tenir compte de cette
duplication on obtient un algorithme très
inefficace. Par contre, si on résout chaque sous
exemplaire différent une seule fois(en
sauvegardant les résultats) on obtient un
algorithme performant.
3CSI 3505Programmation Dynamique
- Idée de base
- Éviter de calculer deux fois la même chose,
normalement en utilisant un tableau de résultats
déjà calculés, remplie au fur et à mesure qu'on
résout les sous problèmes.
4CSI 3505Programmation Dynamique
- le calcul du coefficient binomial
n - 1 k - 1
n - 1 k
Si 0 lt k lt n
n k
1
Sinon
5CSI 3505Programmation Dynamique
- C(n-1,k-1) C(n-1,k) si 0ltkltn
- C(n,k)
- 1 si k 0 or k n
C(n,k) si k 0 or k n alors retourner
1 sinon retourner ( C(n-1,k-1) C(n-1,k) )
6CSI 3505Programmation Dynamique
7CSI 3505Programmation Dynamique
- Complexité le nombre dappels est le même que
C(n, k)
8CSI 3505Programmation Dynamique
9CSI 3505Programmation Dynamique
- Idée utiliser un tableau des résultats
intermédiaires
0 1 2 3 k-1 k 0 1 1 1 1 2 1 2 1 3 1 3 3 1 .
. C(n-1,k-1) C(n-1,k) n-1 n
C(n,k)
10CSI 3505Programmation Dynamique
- Remplir le tableau ligne par ligne
Taille du problème n Opérations nombre
dentrées dans la matrice
11CSI 3505Programmation Dynamique
(n-k-1) fois
W(n) 123.k (k1) (k1) . (k1) ? O(k
n )
W(n) ? O(n2)
En fait la matrice n'est pas nécessaire, il
suffit de mettre a jour de droite Ă gauche un
tableau de longueur k représentant la ligne
courante
Temps O(nk) Espace O(k)
12CSI 3505Programmation Dynamique
La méthode Diviser pour régner subdiviser
le problème en sous-problèmes indépendants,
résoudre récursivement et combiner
13CSI 3505Programmation Dynamique
- Programmation dynamique
- une méthode ascendante
- Idée
- Ă©viter de re-calculer la mĂŞme chose plus quune
fois, en utilisant une table des rĂ©sultats dĂ©jĂ
calculĂ©s, Cette table est remplie au fur et Ă
mesure qu'on résout les sous- problèmes.
Une technique qui sapplique typiquement aux
problèmes doptimisation
14CSI 3505Programmation Dynamique
- Il y a 4 Ă©tapes dans un algorithme de type
Programmation dynamique. - Caractériser la structure dune solution
optimale - DĂ©finir la valeur de la solution optimale
récursivement - Calculer la valeur de la solution optimale du
bas vers le haut - Construire une solution optimale Ă partir des
informations obtenues
15CSI 3505Programmation Dynamique
- Problème Multiplication dune chaîne de
matrices. - M M1 M2 Mn
- Important
- nombre de colonnes de Mi nombre de lignes de
Mi1, - pour tout i, 0ltiltn.
- La taille de la matrice Mi di, di1
16CSI 3505Programmation Dynamique
- Multiplication chaînée de matrices
- On veut calculer le produit de n matrices données
- M M1 M2 ... Mn
- Comme le produit matriciel est associatif, il y a
plusieurs façon de calculer ce produit - M (...(M1 M2 ) M3)... Mn)
- M (M1 M2 )(M3 M4) ... Mn)
- .........
- M (M1 (M2 ... (Mn-1 Mn)...)
17CSI 3505Programmation Dynamique
- Multiplication chaînée de matrices
- Un produit de deux matrice A(p,q) et B(q,r)
nécessite pqr multiplications de scalaires et
donne comme résultat une matrice C(p,r) - Il en découle que le nombre dopérations
élémentaires nécessaire pour calculer M, dépend
de la façon dont on a inséré les parenthèses
18CSI 3505Programmation Dynamique
Ordre 1 A1 x (A2 x (A3 x A4 )) Coût(A3 x A4 )
50 x 1 x 100 Coût(A2 x (A3 x A4 )) 20 x 50
x 100 Coût(A1 x (A2 x (A3 x A4 ))) 10 x 20 x
100 Coût total 125000
19CSI 3505Programmation Dynamique
- Ordre 2 (A1 x (A2 x A3)) x A4
- Coût(A2 x A3 ) 20 x 50 x 1
- Coût(A1 x (A2 x A3 )) 10 x 20 x 1
- Coût((A1 x (A2 x A3)) x A4 ) 10 x 1 x 100
- Coût total 2200
20CSI 3505Programmation Dynamique
- Multiplication chaînée de matrices
- Le problème est de trouver la meilleur façon
dinsérer les parenthèses pour calculer M, c-a-d
celle qui minimise le nombre de multiplications
élémentaires. - Une méthode directe pour résoudre ce problème est
de générer tous les cas possibles et choisir le
meilleur dentre eux.
21CSI 3505Programmation Dynamique
- Il y a 5 possibilités pour le produit A1 A2 A3 A4
- (A1 (A2(A3A4)))
- (A1 ((A2A3)A4))
- ((A1 A2)(A3A4))
- ((A1 (A2A3)A4))
- (((A1 A2)A3)A4)
22CSI 3505Programmation Dynamique
- Pour un produit de n matrices il existe T(n)
manière dinsérer des parenthèses,
M (M1 M2 Mi) (Mi1 Mi2 Mn)
- Donc trouver la meilleure façon dinsérer des
parenthèses - dans un produit de n matrices la méthode directe
est très inefficace.
23CSI 3505Programmation Dynamique
- Complexité (nombres de Catalan)
T(n) ?? (4n/n3/2)
n 1 2 3 4 5 ... 10 ... 15 T(n) 1 1 2 5 14
... 4862 ... 2674440
24CSI 3505Programmation Dynamique
- Idée 2 Programmation dynamique
- 1) Caractériser la structure d'une solution
optimale - Principe doptimalité
- Si (A1 x (A2 x A3 )) x A4 est une solution
optimale pour - A1 x A2 x A3 x A4 ,
- Alors (A1 x (A2 x A3 )) est une solution
optimale pour - A1 x A2 x A3
- Raison
- Sil y avait une meilleure solution pour A1 x A2
x A3 alors on pourra lutiliser pour obtenir une
meilleure solution pour A1 x A2 x A3 x A4 .
Contradiction avec loptimalité de (A1 x (A2 x A3
)) x A4
25CSI 3505Programmation Dynamique
1) Caractériser la structure d'une solution
optimale
Si M (M1 M2 Mi) (Mi1 Mi2 Mn) est une
solution optimale pour le produit M1 M2 Mn
alors (M1 M2 Mi) est optimale pour le
produit M1 Mi ET (Mi1 Mi2 Mn) est
optimale pour le produit Mi1 Mn
Pour 1 ? i ? j ? n,, mi, j dénote une solution
optimale pour le produit Mi Mi1 Mj
26CSI 3505Programmation Dynamique
- 2) Définir récursivement la valeur d'une solution
optimale en fonction des solutions optimales des
sous- problèmes.
(A1 A2 A3 A4 A5 A6 ) m1 ,6 ? ( (A1) (A2 A3
A4 A5 A6 ) ) m1,1 m2,6 d0 d1 d6 ( (A1
A2) (A3 A4 A5 A6 ) ) m1,2 m3,6 d0 d2
d6 ( (A1 A2 A3) (A4 A5 A6 ) ) m1,3 m4,6
d0 d3 d6 ( (A1 A2 A3 A4) (A5 A6 ) ) m1,4
m5,6 d0 d4 d6 ( (A1 (A2 A3 A4 A5) (A6 ) )
m1,5 m6,6 d0 d5 d6
27CSI 3505Programmation Dynamique
- 0 (i j)
- mi,j
- min mi,k mk 1, j di-1dkdj
(i lt j) - iltkltj
- mi, k Coût optimal pour Ai x x Ak
- mk1, j Coût optimal pour Ak1 x x Aj
- di-1dkdj Coût pour (Ai x x Ak) x (Ak1 x x
Aj)
28CSI 3505Programmation Dynamique
- Utilisant une méthode récursive
- du haut vers le bas
Inacceptable beaucoup de répétitions!!
29CSI 3505Programmation Dynamique
- m1,6 --gt m1,1, m2,6, m1,2, m3,6,
m1,3, m4,6,m1,4, m5,6, m1,5, m6,6 - m2,6 --gt m2,2, m3,6, m2,3, m4,6,m2,4,
m5,6, m2,5, m6,6
30CSI 3505Programmation Dynamique
- On utilise l'approche ascendante (du bas vers le
haut) la programmation dynamique - Le nombre de sous problèmes?
- Combien de mi,j doit on calculer?
- O(n2)
31CSI 3505Programmation Dynamique
- Construire un tableau 2-dimentionelle (mi j).
Remplir la table par Ă©tape les mi,j ou j-i
0 les mi,j ou j-i 1 les mi,j ou j-i
2
32CSI 3505Programmation Dynamique
33CSI 3505Programmation Dynamique
- A A1 x A2 x A3 x A4
- 10x20 20x50 50x1 1x100
- Étape 1 j-i 1
- m1,2 m1,1 m2,2 1000
- 1000
- m2,3 20 x 50 1000
- m3,4 50 x 100 5000
34CSI 3505Programmation Dynamique
m1,1 m2,3 10 x 20 x 1 m1,3
min m1,2 m3,3 10 x 50 x 1
min 1200,10500 1200
m2,2 m3,4 20 x 50 x 100 m2,4
min m2,3 m4,4 20 x 1 x 100
min 10500,3000 3000
35CSI 3505Programmation Dynamique
case j-i 3 m1,1 m2,4 10 x 20
x 100 m1,4 min m1,2 m3,4 10 x
50 x 100 m1,3 m4,4 10 x 1 x 100
min 23000,65000,2200 2200
36CSI 3505Programmation Dynamique
- Comment construire une solution optimale?
- On a besoin de garder les valeurs de k
représentant la coupure optimale pour mi, j
37CSI 3505Programmation Dynamique
- j- i 1 PosOpt1, 2 1
- PosOpt2, 3 2
- PosOpt3, 4 3
- j- i 2 PosOpt1, 3 1
- PosOpt2, 4 3
- j- i 3 PosOpt1, 4 3
38CSI 3505Programmation Dynamique
- Matrix-Chain-Order( p, n )
-
- for i 1 to n
- mi,i 0
- for len 2 to n
- for i 1 to n - len 1
- j i len - 1
- mi,j 8
- for k i to j-1
- q mi,k mk1,j di-1dkdj
- if q lt mi,j then
- mi,j q
- si,j k
- return s
39CSI 3505Programmation Dynamique
- Les plus courts chemins (Algorithme de Floyd)
- Le problème consiste à trouver les plus courts
chemins entre chaque couple de sommets dun
graphe.
40CSI 3505Programmation Dynamique
- Les plus courts chemins (Algorithme de Floyd)
A chaque arête est associée une longueur
non-négative
Un des sommets est la source.
Problème consiste à trouver les plus courts
chemins entre chaque couple de sommets dun
graphe.
G (V,E) graphe connexe.
41CSI 3505Programmation Dynamique
- Cest un problème doptimisation et il vérifie le
principe doptimalité - Si le plus court chemin entre A et B passe par un
sommet C, alors les sous-chemins A-C et C-B sont
aussi optimaux.
Si C ----- B est plus court que C ----- B
alors A ----- C ----- B est plus court que
A-----C-----B
42CSI 3505Programmation Dynamique
- Les plus courts chemins (Algorithme de Floyd)
- Soit L la matrice associée à un graphe G, on a
donc Li,j représentant le coût de larc entre i
et j. Si ij on prendra Li,j 0 et sil ny a
pas darc entre les sommet i et j alors Li,j
?.
43CSI 3505Programmation Dynamique
- Le principe de lalgorithme et de construire une
matrice D (initialisée à L) et qui contiendra
après chaque itération k, les plus courts chemins
entre chaque paire de sommets (i,j), ne passant
que par les sommets appartenant Ă lensemble
1,2,3,..k. - Après litération n, D contiendra les plus courts
chemins entre chaque paire de sommets.
44CSI 3505Programmation Dynamique
- A l'itération k, et pour chaque paire de sommets
(i,j), il faut de vérifier si l'on peut trouver
un chemin passant par le sommet k et qui soit
meilleur que le chemin actuel.
45CSI 3505Programmation Dynamique
- Phase k
- L D0 , D1 , .Dn D
Cas 1. Lutilisation du sommet k najoute rien au
chemins plus courts déjà trouvés avec les
sommets 1, 2, , k-1. Au moins un des plus
court chemins (qui pourrait utiliser les sommets
1,2,k), nutilise PAS le sommet k.
Dk i,j Dk-1i,j
Cas 2. Tous les plus court chemins (qui
pourraient utiliser les sommets 1,2,k),
UTILISENT le sommet k comme nœud intermédiaire.
Dk i,j Dk-1i,k Dk-1k,j
46CSI 3505Programmation Dynamique
- A létape k on calcule les nouvelle valeurs de D
pour chaque paire de sommet de la façon suivante - Dki,j min ( Dk-1i,j , Dk-1i,k
Dk-1k,j )
47CSI 3505Programmation Dynamique
- Floyd(n, L )
- matrice D de taille n x n
- D L
- for(k1 kltn k)
- for(i1 iltn i)
- for(j1 jltn j)
- Di,j min Di,j, Di,kDk,j
- retourner D
-
48CSI 3505Programmation Dynamique
49CSI 3505Programmation Dynamique
50CSI 3505Programmation Dynamique
- Comment construire une solution optimale (plus
court chemin)? - On a besoin de garder les sommets par oĂą le plus
court chemin passe - Deuxième matrice P initialisée à 0.
si Di,kDk,i lt Di,j alors
Di,j Di,kDk,i Pi,j k
51CSI 3505Programmation Dynamique
- Floyd2(n, L , P )
- matrice D de taille n x n
- matrice P de taille n x n
- D L P0
- for(k1 kltn k)
- for(i1 iltn i)
- for(j1 jltn j)
- if Di,kDk,j lt Di,j
- Di,j Di,kDk,j
- Pi, j k
- retourner D
52CSI 3505Programmation Dynamique
53CSI 3505Programmation Dynamique
O(n3)
- Floyd2(n, L , P )
- matrice D de taille n x n
- matrice P de taille n x n
- D L P0
- for(k1 kltn k)
- for(i1 iltn i)
- for(j1 jltn j)
- if Di,kDk,j lt Di,j
- Di,j Di,kDk,j
- Pi, j k
- retourner D
n
n
n
Constante
54CSI 3505Programmation Dynamique
- Problème du sac à dos
- Objets a apporter dans un sac de Capacité 10
Des solutions admissibles
55CSI 3505Programmation Dynamique
- S ensemble de n objets 1, 2, , n
- wi poids de l'objet i
- gi gain de l'objet i
- W poids maximum que le sac peut supporter
- wi, gi,W entiers positifs
Problème Déterminer un sous-ensemble A de S qui
peut ĂŞtre mis dans le sac et qui maximise les
gains.
56CSI 3505Programmation Dynamique
- Le problème est de trouver un sous ensemble
dobjets A, qui maximise - ? (gi objet i est dans A)
- Avec la condition que
- ? (wi objet i est dans A) ? W
Applications de ce problème scheduling
(ordonnancement), allocation de lespace dans un
disque,
57CSI 3505Programmation Dynamique
- Propriété récursive du problème.
- Pi,K gains maximum si
- le choix est parmi les objets 1, , i, et
- le poids maximale ne doit pas dépasser K.
Le problème est de calculer Pn,W
Pi,K
58CSI 3505Programmation Dynamique
- Cas 1
- Pi,K Pi-1, K-wi gi
- (impossible si le poids de lobjet i, wi gt K)
- Cas 2.
- Pi,K Pi-1,K
- Base
- Si i 0 ou K 0, alors Pi,K 0
59CSI 3505Programmation Dynamique
- maxgiPi-1,K-wi, Pi-1,K) wi ? K
- Pi,K
- Pi-1,K wi gt K
- Pour igt0, kgt0.
Exemple
Objets 1 2 3 4 5
gi 10 5 5 10 3
wi 5 5 2 2 2
60CSI 3505Programmation Dynamique
k i 0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 10 10 10 10 10 10
2 0 0 0 0 0 10 10 10 10 10 15
3 0 0 5 5 5 10 10 15 15 15 15
4 0 0 10 10 15 15 15 20 20 25 25
5 0 0 10 10 15 15 18 20 20 25 25
61CSI 3505Programmation Dynamique
Taille du problème n Opérations nombre
d'entrées dans la table Cas pire
?(n W)
Dépend de W, la capacité maximale du sac !