Top Banner
Ecole Supérieure d’Economie Numérique Complexité Algorithmique: Algorithme Glouton et Programmation Dynamique Dr.Chiheb-Eddine Ben N’Cir [email protected] [email protected] 2016 - 2017
24

Complexité Algorithmique: Algorithme Glouton et ...

Jun 16, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Complexité Algorithmique: Algorithme Glouton et ...

Ecole Supérieure d’Economie Numérique

Complexité Algorithmique: Algorithme Glouton etProgrammation Dynamique

Dr.Chiheb-Eddine Ben N’Cir

[email protected]@isg.rnu.tn

2016 − 2017

Page 2: Complexité Algorithmique: Algorithme Glouton et ...

Outline

Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 2 / 1

Page 3: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

Algorithme Glouton: Principe

Construire au fur et à mesure une solution en faisant les choix qui paraissentoptimaux localement

Dans certains cas, cela donnera finalement la meilleure solution: on parlerad’algorithmes gloutons exacts.

Dans d’autres, non, on parlera d’heuristiques gloutonnes.

3Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 3 / 1

Page 4: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

Problème

On dispose des pièces de monnaie correspondant aux valeurs {a0, a1, ..., an−1}avec 1 = a0 < a2 < ... < an−1.

Pour chaque valeur le nombre de pièces est non borné. Etant donnée unequantité c entière, on veut trouver une façon de "rendre" la somme c avec unnombre de pièces minimum.

4Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 4 / 1

Page 5: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

Solution 1

5Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 5 / 1

Page 6: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

Solution 2

6Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 6 / 1

Page 7: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

Gestion des films

Un cinéma possède s salles de cinéma. Chaque semaine, le cinéma propose uneliste de films à voir. Chaque film correspond à une date de début et une date de fin(intervalle de temps précis) qui sera diffusé dans la salle si. Les films n’ont pas tous lamême durée.

Un amateur de film (libre toute la journée) veut voir le maximum de films pendant cettejournée (il peut voir un même film plusieurs fois). Ecrire un algorithme qui permet derésoudre le problème en utilisant le principe Glouton.

7Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 7 / 1

Page 8: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

Modélisation du Problème

A = {a1, a2, .., an} =⇒ Tableau de n Films qui seront diffusés pendant une journéechaque film ai est caractérisé par di, fi et numSi avec:di date début du film ai,fi date fin du film ai,numSi numéro de la salle qui diffuse le film ai

Film ai et aj sont compatibles si dj >= fi ou di >= fj

Problème: le plus grand nombre de filmschoisir le plus grand nombre de films compatibles à voir

8Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 8 / 1

Page 9: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

public Film choixFilm(Film [] A){Film [] M; // M contient les films à voir pour maximiser le nombrede film à regardertrier(A); // trier le tableau de film selon la date de fin fiM[0]=A[0];int nbfilm=1;int i=1;While(i<A.length) {

if A[i].d < M[nbfilm-1].f{

M[nbfilm]=A[i];nbfilm++;

}i++

}return M;}

9Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 9 / 1

Page 10: Complexité Algorithmique: Algorithme Glouton et ...

Algorithme Glouton

Cadre générale d’un algorithme glouton

Pour mettre au point un algorithme glouton, il faut donc:

Trouver un critère objectif

Trouver un critère de sélection qui parait optimal: souvent facile

L’implémenter: en général facile et efficace!

10Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 10 / 1

Page 11: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Programmation Dynamique: Principe

La programmation dynamique est une adaptation de la méthode diviser etrégner.

Introduit par Bellman, dans les années 50, pour résoudre des problèmesd’optimisation.

Programmation veut dire planification et ordonnancement

11Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 11 / 1

Page 12: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Programmation Dynamique vs divisier et régner

La résolution d’un sous problème peut dépondre de la résolution d’autres sousproblèmes

La méthode diviser et régner est récursive, les calculs se font de haut en bas.

La programmation dynamique est une méthode dont les calculs se font de basen haut

12Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 12 / 1

Page 13: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Etapes de la Prog. Dynamique

obtention de l’équation récursive liant la solution d’un problème à celle desousproblèmes.

initialisation de la table: cette étape est donnée par les conditions initiales del’équation obtenue à l’étape 1.

remplissage de la table cette étape consiste à résoudre les sous-problèmes detaille de plus en plus grandes, en se servant bien entendu de l’équation obtenueà l’étape 1.

Quand utiliser le principe de programmation dynamique ?il n’y pas de règle pour affirmer que la programmation dynamique peut ou ne peut êtreutilisée pour résoudre tel ou tel problème.

13Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 13 / 1

Page 14: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Etapes de la Prog. Dynamique

obtention de l’équation récursive liant la solution d’un problème à celle desousproblèmes.

initialisation de la table: cette étape est donnée par les conditions initiales del’équation obtenue à l’étape 1.

remplissage de la table cette étape consiste à résoudre les sous-problèmes detaille de plus en plus grandes, en se servant bien entendu de l’équation obtenueà l’étape 1.

Quand utiliser le principe de programmation dynamique ?il n’y pas de règle pour affirmer que la programmation dynamique peut ou ne peut êtreutilisée pour résoudre tel ou tel problème.

13Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 13 / 1

Page 15: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Programmation Dynamique: Suite de Fibonacci

Le problème de Fibonacci consiste à calculer les n premiers nombres deFibonacci donnés par la formule suivante :

F (0) = 1, F (1) = 1 et F (n) = F (n− 1) + F (n− 2)

Exempe pour n = 4

14Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 14 / 1

Page 16: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Suite de Fibonacci: Solution récursive

public int Fibo(int n){if (n <= 1)return 1 ;else return(Fibo(n-1)+Fibo(n-2))}

La solution proposée est récursive

Complexité: O(2n)

15Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 15 / 1

Page 17: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Suite de Fibonacci: Solution récursive

public int Fibo(int n){if (n <= 1)return 1 ;else return(Fibo(n-1)+Fibo(n-2))}

La solution proposée est récursive

Complexité: O(2n)

15Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 15 / 1

Page 18: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Suite de Fibonacci: Solution avec Prog. Dynamique

public int Fib(int n){int [] F=new int[n]; F[1] =1 ; F[2] =1 ;For (i=2 ; i<n ; i++)F[i] = F[i-1] + F[i-2];return (F[i]);}

La solution proposée est itérative

Complexité: O(n)

16Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 16 / 1

Page 19: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Suite de Fibonacci: Solution avec Prog. Dynamique

public int Fib(int n){int [] F=new int[n]; F[1] =1 ; F[2] =1 ;For (i=2 ; i<n ; i++)F[i] = F[i-1] + F[i-2];return (F[i]);}

La solution proposée est itérative

Complexité: O(n)

16Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 16 / 1

Page 20: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Nombre de Combinaisons Possibles

Ecrire un algorithme qui permet de Déterminer le nombre de combinaisons possiblesde k éléments parmi n sachant que Cn

k peut être calculé par:

Cnk = Cn−1

k−1 + Cn−1k

Cn0 = 1

Cnn = 1

17Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 17 / 1

Page 21: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Solution recursive

int function Combinaison(int n,k) {if (k = = 0) || (k = = n)return 1;else return(Combinaison(n-1,k-1) + Combinaison(n-1,k));}

Complexité de la solution: exponontielle O(2n)

18Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 18 / 1

Page 22: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Solution recursive: Plusieurs répétitions

19Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 19 / 1

Page 23: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Solution avec Prog. Dynamique

Idée: Pour éviter de calculer plusieurs fois un nombre, on calcule tous les nombres depetites tailles, ensuite, de tailles de plus en plus grandes avant d’arriver au nombredésiré.

int function Combinaison(int n, int k) {int B[][]= new int[n][k];for(int i=0 ; i<=n ; i++)

for (int j=0; j<=min(i,k); j++)if (i==0) ||(j==i)B[i][j] = 1;else B[i][j] = B[i-1][j-1] + B[i-1][j];

return (B[n][k]);}

Complexité de la solution: O(nk)

20Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 20 / 1

Page 24: Complexité Algorithmique: Algorithme Glouton et ...

Programmation dynamique

Exercice

1 Ecrire une fonction itérative puissanceIterative(a, n) qui permet de calculer an.(en utilisant seulement les opérateurs simples (+,−, ∗, /)

2 Ecrire une fonction récursive puissanceRecursive(a, n) qui permet de calculeran.

3 Comparer la complexité asymptotique de chacune des fonctions proposées.Quelle est la fonction la plus performante en terme de complexité de calcul.

4 Supposant qu’on peut écrire la fonction puissance de la manière suivante :an = a

n2 .a

n2 si n est pair sinon an = a

n2 .a

n2 .a

an2 = a

n4 .a

n4

...........a1 = aa0 = 1 Proposer une fonction puissanceDdynamique(a, n) en utilisant le principede la programmation dynamique.

5 Quelle est la complexité asymptotique de cette nouvelle fonction.

21Chiheb-Eddine Ben N’Cir (ESEN) Complexité Algorithmique: 2016 21 / 1