CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.

Slides:



Advertisements
Présentations similaires
Programmation dynamique
Advertisements

1 UE Intro Opti L3 INFO UPSud Programmation linéaire en variables entières (ou mixtes) : résolution approchée par heuristique
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Courbes d'Interpolation Interpolation de Lagrange, et Interpolation B-spline.
Chapitre 4 la représentation des nombres. Chapitre 4 : La représentation des nombres 1 - Introduction 1.1 – Notion de mot 2 - La représentation des entiers.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
Tableaux en C Mardi 2/05.
SITUATION DE REFERENCE
Outils de Recherche Opérationnelle en Génie MTH 8414A
Cours d’Econométrie de la Finance (Stat des choix de portf. IV 1-2)
Suites ordonnées ou mettre de l’ordre
Outils de Recherche Opérationnelle en Génie MTH 8414
Les tables de multiplication au ce1 « Une construction réfléchie des tables favorise-t-elle leur mémorisation et leurs transferts ? » DOUARCHE Vaéa.
Analyse, Classification,Indexation des Données ACID
Les Instructions Itératives (Les Boucles)
Pierre Joli Cours de Mathématique Pierre Joli
6. Analyse postoptimale.
Coloration de graphe, backtracking, branch and bound
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Techniques de décomposition
Algorithmique Avancée et Complexité Chap2:Complexité et Optimalité
Représentation de l’information en binaire:
7.1 Transformation linéaire
Université Abou Bakr Belkaid Faculté des Sciences Département d’informatique Algorithmique Avancée et Complexité Chap5: Les méthodes de résolution exactes.
Algorithmique Avancée et Complexité Chap3:Diviser pour Régner
Techniques d’Optimisation Chapitre 2: Problème de flôt
Information, Calcul, Communication
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Techniques d’Optimisation Chapitre 3: Programmation en 0-1 (bivalente)
Plans d’experiences : plans de melanges
Programmation linéaire et Recherche opérationnelle Licence d’Econométrie Professeur Michel de Rougemont
Routage S 3 - Questionnaire N°1
Information, Calcul, Communication
Université Abou Bakr Belkaid Faculté des Sciences Département d’informatique Algorithmique Avancée et Complexité Chap7: Les méthodes de résolution exactes.
Programmation Impérative II
Fonctions Logiques & Algèbre de BOOLE
C1 – Interpolation et approximation
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Plan Introduction Parcours de Graphe Optimisation et Graphes
Les tableaux.
La méthode du simplexe. 1) Algorithme du simplexe  Cet algorithme permet de déterminer la solution optimale, si elle existe, d’un problème de programmation.
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Type Concret – Type Abstrait
Dérivation et intégration
Calcul Scientifique Initiation à SCILB
ACP Analyse en Composantes Principales
Calculs des incertitudes Lundi 30 Avril 2018 Master de Management de la Qualité, de la Sécurité et de l’Environnement.
OPTIMISATION 1ère année ingénieurs
Arbres de décision.
2.4 La loi de vitesse d’une réaction chimique
Les réseaux logiques programmables
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
2. Méthode du simplexe et son analyse.
Position, dispersion, forme
Chapitre 1 Formulation d’un programme linéaire (PL) Georges Abboudeh BUST 347.
Information, Calcul, Communication
CSI 3505 Algorithmes Voraces
RABAH M ed Ali 2018/2019
Flowchart Itération Cours 04.
Chapitre 2 : Représentation de l’information dans la machine Introduction Représentation des nombres négatifs –Signe / valeur absolue –Complément à 1 –Complément.
Encadré par : M. Mohammad EL GHABZOURI Elaboré par : - AZEGAMOUT Mohamed - ABOULKACEM abdelouahed - GOUN Ayoub EXPOSÉ Sous le thème : SER 2018 Parallélisme.
CSI 3505 / Automne 2005: Conception et Analyse des Algorithmes I.
Encadrée par: - Mr. Abdallah ALAOUI AMINI Réalisée par : -ERAOUI Oumaima -DEKKAR Amal - ES-SAHLY Samira -Houari Mohammed PROGRAMMATION MULTIOBJECTIFS.
Introduction  La PLNE regroupe l’ensemble des techniques permettant de résoudre des programmes linéaires dont les solutions doivent être entières.  Formellement,
Boulain Joris, Handouz Yassine, Regnier Fabien, Giraud Antoine
Type Tableau Partie 1 : Vecteurs
Outils de Recherche Opérationnelle en Génie MTH 8414
La programmation dynamique
Transcription de la présentation:

CSI 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) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique le calcul du coefficient binomial: n - 1 k - 1 n - 1 k + Si 0 < k < n n k = 1 Sinon 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique C(n-1,k-1) + C(n-1,k) si 0<k<n 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) ) } 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Calcul de C(5,2) Répétition C(5,2) C(4,2) C(4,1) C(3,2) C(3,1) C(3,0) C(2,0) C(2,1) C(1,0) C(1,1) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Complexité: le nombre d’appels est le même que C(n, k)  n k 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Une autre idée: C(3,1) 7 C(3,2) 8 C(2,0) 4 C(2,1) 5 C(2,2) 6 C(1,0) 2 C(1,1) 3 C(0,0) 1 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Remplir le tableau ligne par ligne 1 2 3 4 6 5 C(6,3) 20 10 15 Taille du problème: n Opérations: nombre d’entrées dans la matrice 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Complexité (n-k-1) fois W(n) = 1+2+3+….+k+ (k+1) + (k+1) +….+ (k+1)  O(k n ) Cas pire, lorsque k est d’ordre O(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) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique La méthode Diviser pour régner: subdiviser le problème en sous-problèmes indépendants, résoudre récursivement et combiner 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique une méthode ascendante Idée: éviter de re-calculer la même chose plus qu’une 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 s’applique typiquement aux problèmes d’optimisation 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Il y a 4 étapes dans un algorithme de type Programmation dynamique. Caractériser la structure d’une 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 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Problème: Multiplication d’une chaîne de matrices. M = M1 M2 … Mn Important: nombre de colonnes de Mi = nombre de lignes de Mi+1, pour tout i, 0<i<n. La taille de la matrice Mi : di, di+1 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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)...) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Multiplication chaînée de matrices Un produit de deux matrice A(p,q) et B(q,r) nécessite p*q*r multiplications de scalaires et donne comme résultat une matrice C(p,r) Il en découle que le nombre d’opérations élémentaires nécessaire pour calculer M, dépend de la façon dont on a inséré les parenthèses 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique A = A1 A2 A3 A4 10x20 20x50 50x1 1x100 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 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Multiplication chaînée de matrices Le problème est de trouver la meilleur façon d’insé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 d’entre eux. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Idée 1: approche directe 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) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Pour un produit de n matrices il existe T(n) manière d’insérer des parenthèses, M = (M1 M2 … Mi) (Mi+1 Mi+2 … Mn) T(i) T(n-i) T(n) =  T(i) T(n-i) i=1 n-1 T(1) = 1 Donc trouver la meilleure façon d’insérer des parenthèses dans un produit de n matrices la méthode directe est très inefficace. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Complexité: (nombres de Catalan) T(n) = 1/n ( ) 2n -2 n-1 T(n)  (4n/n3/2) n 1 2 3 4 5 ... 10 ... 15 T(n) 1 1 2 5 14 ... 4862 ... 2674440 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Idée 2: Programmation dynamique 1) Caractériser la structure d'une solution optimale Principe d’optimalité: 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: S’il y avait une meilleure solution pour A1 x A2 x A3 alors on pourra l’utiliser pour obtenir une meilleure solution pour A1 x A2 x A3 x A4 . Contradiction avec l’optimalité de (A1 x (A2 x A3 )) x A4 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique 1) Caractériser la structure d'une solution optimale Si M = (M1 M2 … Mi) (Mi+1 Mi+2 … Mn) est une solution optimale pour le produit M1 M2 … Mn alors : (M1 M2 … Mi) est optimale pour le produit M1 … Mi ET (Mi+1 Mi+2 … Mn) est optimale pour le produit Mi+1 … Mn Pour 1  i  j  n,, m[i, j] dénote une solution optimale pour le produit Mi Mi+1 … Mj 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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 ) m[1 ,6] = ? ( (A1) (A2 A3 A4 A5 A6 ) ) m[1,1] + m[2,6] + d0 d1 d6 ( (A1 A2) (A3 A4 A5 A6 ) ) m[1,2] + m[3,6] + d0 d2 d6 ( (A1 A2 A3) (A4 A5 A6 ) ) m[1,3] + m[4,6] + d0 d3 d6 ( (A1 A2 A3 A4) (A5 A6 ) ) m[1,4] + m[5,6] + d0 d4 d6 ( (A1 (A2 A3 A4 A5) (A6 ) ) m[1,5] + m[6,6] + d0 d5 d6 m[1,6] = minimum de 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique 0 (i = j) m[i,j] = min { m[i,k] + m[k + 1, j] + di-1dkdj } (i < j) i<k<j m[i, k] = Coût optimal pour Ai x … x Ak m[k+1, j] = Coût optimal pour Ak+1 x … x Aj di-1dkdj = Coût pour (Ai x … x Ak) x (Ak+1 x … x Aj) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Utilisant une méthode récursive du haut vers le bas: } d j] 1, m[k K] m[i, { min ] j , i [ m k 1 - + = < £ Inacceptable: beaucoup de répétitions!! 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique du haut vers le bas: m[1,6] --> m[1,1], m[2,6], m[1,2], m[3,6], m[1,3], m[4,6],m[1,4], m[5,6], m[1,5], m[6,6] m[2,6] --> m[2,2], m[3,6], m[2,3], m[4,6],m[2,4], m[5,6], m[2,5], m[6,6] 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique On utilise l'approche ascendante (du bas vers le haut): la programmation dynamique Le nombre de sous problèmes? Combien de m[i,j] doit on calculer? O(n2) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Construire un tableau 2-dimentionelle (m[i; j]). 1 2 3 4 5 j i Remplir la table par étape: les m[i,j] ou j-i = 0 les m[i,j] ou j-i = 1 les m[i,j] ou j-i = 2 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Comment calculer m[1, 6]? } d j] 1, m[k k] m[i, { min ] j , i [ m k 1 - + = < £ 1 2 3 4 5 6 x m[1,6] Solution 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique A = A1 x A2 x A3 x A4 10x20 20x50 50x1 1x100 Étape 1: j-i = 1 m[1,2] = m[1,1] + m[2,2] + 1000 = 1000 m[2,3] = 20 x 50 = 1000 m[3,4] = 50 x 100 = 5000 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Étape 2: j-i = 2 m[1,1] + m[2,3] + 10 x 20 x 1 m[1,3] = min m[1,2] + m[3,3] + 10 x 50 x 1 k=1 = min {1200,10500} = 1200 m[2,2] + m[3,4] + 20 x 50 x 100 m[2,4] = min m[2,3] + m[4,4] + 20 x 1 x 100 k=3 = min {10500,3000} = 3000 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Étape 3: j-i = 3 case j-i = 3 m[1,1] + m[2,4] + 10 x 20 x 100 m[1,4] = min m[1,2] + m[3,4] + 10 x 50 x 100 m[1,3] + m[4,4] + 10 x 1 x 100 = min {23000,65000,2200} = 2200 k=3 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Comment construire une solution optimale? On a besoin de garder les valeurs de k représentant la coupure optimale pour m[i, j] 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique j- i =1: PosOpt[1, 2] = 1 PosOpt[2, 3] = 2 PosOpt[3, 4] = 3 j- i =2: PosOpt[1, 3] = 1 PosOpt[2, 4] = 3 j- i =3: PosOpt[1, 4] = 3 A1 x A2 x A3 x A4 A1 x A2 x A3 A4 A2 x A3 A1 A2 A3 PosOpt[1, 4] = 3 PosOpt[1, 3] = 1 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Matrix-Chain-Order( p, n ) { for i = 1 to n m[i,i] = 0 for len = 2 to n for i = 1 to n - len + 1 j = i + len - 1 m[i,j] = 8 for k = i to j-1 q = m[i,k] + m[k+1,j] + d[i-1]*d[k]*d[j] if q < m[i,j] then m[i,j] = q s[i,j] = k return s } 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Les plus courts chemins (Algorithme de Floyd) Le problème consiste à trouver les plus courts chemins entre chaque couple de sommets d’un graphe. A B C D E 100 20 5 50 10 30 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Les plus courts chemins (Algorithme de Floyd) A B C D E 100 20 5 50 10 30 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 d’un graphe. G = (V,E) : graphe connexe. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique C’est un problème d’optimisation et il vérifie le principe d’optimalité : 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. C A B Si C ----- B est plus court que C ----- B alors A ----- C ----- B est plus court que A-----C-----B 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Les plus courts chemins (Algorithme de Floyd) Soit L la matrice associée à un graphe G, on a donc L[i,j] représentant le coût de l’arc entre i et j. Si i=j on prendra L[i,j] = 0 et s’il n’y a pas d’arc entre les sommet i et j alors L[i,j] = . 1 2 3 4 1 0 5   2 50 0 15 5 3 30  0 15 4 15  5 0 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Le principe de l’algorithme 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 à l’ensemble {1,2,3,..k}. Après l’itération n, D contiendra les plus courts chemins entre chaque paire de sommets. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Phase k: L = D0 , D1 , …….Dn = D Cas 1. L’utilisation du sommet k n’ajoute 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}), n’utilise PAS le sommet k. Dk [i,j] = Dk-1[i,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. k i j Dk [i,j] = Dk-1[i,k]+ Dk-1[k,j]} 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique A l’étape k on calcule les nouvelle valeurs de D pour chaque paire de sommet de la façon suivante: Dk[i,j] = min ( Dk-1[i,j] , Dk-1[i,k] + Dk-1[k,j] ) 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Floyd(n, L[ ] [ ]) matrice D de taille n x n D = L for(k=1; k<=n; k++) for(i=1; i<=n; i++) for(j=1; j<=n; j++) D[i,j] = min {D[i,j], D[i,k]+D[k,j]} retourner D 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique B C D 30 15 5 50 Exemple: 0 5   50 0 15 5 30  0 15 15  5 0 D0=L 0 5   50 0 15 5 30 35 0 15 15 20 5 0 D1 0 5 20 10 50 0 15 5 30 35 0 15 15 20 5 0 D2 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Cont … 0 5 20 10 50 0 15 5 30 35 0 15 15 20 5 0 D2 A B C D 30 15 5 50 0 5 20 10 45 0 15 5 30 35 0 15 15 20 5 0 D3 0 5 15 10 20 0 10 5 30 35 0 15 15 20 5 0 D=D4 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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 D[i,k]+D[k,i] < D[i,j] alors D[i,j] = D[i,k]+D[k,i] P[i,j] = k 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Floyd2(n, L[ ] [ ], P[ ][ ]) matrice D de taille n x n matrice P de taille n x n D = L; P=0 for(k=1; k<=n; k++) for(i=1; i<=n; i++) for(j=1; j<=n; j++) if D[i,k]+D[k,j] < D[i,j] D[i,j] = D[i,k]+D[k,j] P[i, j] = k retourner D 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Exemple: 0 0 4 2 4 0 4 0 0 1 0 0 P 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Complexité? O(n3) Floyd2(n, L[ ] [ ], P[ ][ ]) matrice D de taille n x n matrice P de taille n x n D = L; P=0 for(k=1; k<=n; k++) for(i=1; i<=n; i++) for(j=1; j<=n; j++) if D[i,k]+D[k,j] < D[i,j] D[i,j] = D[i,k]+D[k,j] P[i, j] = k retourner D n n n Constante 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Problème du sac à dos: Objets a apporter dans un sac de Capacité 10: Poids 5 5 2 2 2 nourriture gaz first aid livre chat 10 5 5 10 3 Nourriture+gaz 10 15 livre+first aid+chat 6 18 nourriture+livre+first aid 9 25 Poids Des solutions admissibles: 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation 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. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Le problème est de trouver un sous ensemble d’objets 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 l’espace dans un disque, … 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Propriété récursive du problème. P[i,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: P[n,W] P[i,K] L'ensemble optimal qui donne P[i,K] n'utilise pas l'objet i Cas 2. L'ensemble optimal qui donne P[i,K] utilise l'objet i Cas 1. 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Cas 1 P[i,K] = P[i-1, K-wi] + gi (impossible si le poids de l’objet i, wi > K) Cas 2. P[i,K] = P[i-1,K] Base: Si i = 0 ou K = 0, alors P[i,K] = 0 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique max{gi+P[i-1,K-wi], P[i-1,K]) wi  K P[i,K] = P[i-1,K] wi > K Pour i>0, k>0. Exemple: Objets 1 2 3 4 5 gi 10 wi 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique k i 1 2 3 4 5 6 7 8 9 10 15 20 25 18 12/25/2018 Dr. Nejib Zaguia

CSI 3505 Programmation Dynamique Complexité 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 ! 12/25/2018 Dr. Nejib Zaguia