You are on page 1of 6

Algorithmique et

Optimisation Discrte

Algorithmique et Optimisation Discrte


Introduction l'analyse de dpendances: paralllisme et
localit mmoire

! Problme fil rouge: dans un ensemble fini,

! Objectif du cours :

trouver une solution qui optimise une


fonction objective
! Mthode gnrale:

Maitrise programmation itrative et rcursive


n Impact en cot (-> temps, nergie):
n

w Nombre doprations
w Espace mmoire requis

Explorer lespace des solutions possibles,


n En retenant les meilleurs candidats
n Et retourner la fin une solution optimale
n

! Mthodes: prog dynamique, branch&bound


n

efficacit ? (temps, nergie, )

w Dpendances et paralllisme (dataflow)


w Localit mmoire et dfauts de cache

Remarque: comprendre ces impacts est un prrequis


la conception dalgorithmes performants ou optimiss

Notation de Landau
(pour des fonctions positives croissantes)

!
!
!

f=O(g) : C >0 n
f(n) < C.g(n)
f= (g) : C >0 n
f(n) > C.g(n)
f= (g) :
f=O(g) et f= (g)

CHAP 1
Programmation des formules
rcursives
Redondance et Mmosation

Formulations rcursives

Exemple: suite de Fibonacci


fibo(n) = fibo(n-1) + fibo(n-2)

! Une dfinition dun objet est rcursive si elle fait


appel la dfinition dun objet du mme type.

! Intressant pour loptimisation discrte:


n
n

! Programmation rcursive nave


normment de
calculs redondants!
n > 2n/2 !!!
n

numration rcursive des solutions envisager


Exemple

! Gloire et dboires!
n
n

fibo(n-2)

fibo(n-3)

fibo(n-3) fibo(n-4)

arbre dappels

Exemple: Fibonacci

! Principe gnral :
Au lieu de reprsenter un arbre dappel, on
reprsente un graphe dappels, en
confondant les sommets de mme
tiquette
n Redondances bien visibles!
n Techniques de marquage ou
dexcution selon un ordre topologique

fibo(n-1)

fibo(n-2)

Algorithmes de bonne qualit (ex. D&C)


Ou compltement inefficaces si programmation nave

limination des calculs redondants

fibo(n)

Ide: au lieu de reprsenter un arbre


dappel, on reprsente un graphe
dappels, en confondant les sommets de
mme tiquette
n Redondances bien visibles!
n Graphe dappels sur Fibonacci?
n

fibo(n)

fibo(n-1)

fibo(n-2)

fibo(n-3)

fibo(2)

fibo(1)

Rsolution en vitant les redondances ?

fibo(0)

Exemple: Fibonacci
! Mmosation:

Algorithme rcursif avec marquage


integer fibo (n: integer) is
Si (tab[n] = -1) Alors -- pas encore calcul
tab[n] := fibo(n-1) + fibo(n-2)
Retourner tab[n]

Inconvnient? O(n) en mmoire!

Exemple: Fibonacci

Exemple: Fibonacci
! Recherche dun ordre topologique
G = (S,A)
n ordre total tel que: (u,v) A a v<u
n Dfini un ordre dexcution des tches :
arc (u,v) v doit tre fini pour excuter u
n

! Principe de lalgorithme?
n

cours graphes: trouver un ordre de


traitement des sommets (tri topologique
des tches accomplir)

Exemple: Fibonacci
integer fibo (n: integer) is

! Ordre topologique
n

Il faut valuer les sommets dans lordre


de n croissant: fibo(0), fibo(1), fibo(2),
En fait un sommet ne dpend toujours que de ses
deux prdcesseurs => pas ncessaire de stocker
toutes les valeurs!
Il suffit de garder deux rsultats auxiliaires
fibo(k-1) et fibo(k-2)

! Algorithme?

k_1, k_2, i : integer


k_1 := 0

On retrouve
lalgorithme itratif
classique!

k_2 := 1
Pour i de 2 n faire

aux := k_2
k_2 := k_1 + k_2 -- contient fib(i)
k_1 := aux
Retouner k_2

-- contient fib(i-1)

En fait ce
raisonnement amne
dun problme rcursif
une criture
itrative!

Exemple: Fibonacci - Bilan

Mmosation: bilan
!
!

Dtection des calculs redondants via le


graphe dappel de la procdure rcursive
Pour les liminer
1.
2.

Marquage et stockage rsultats partiels


Calcul selon un ordre topologique
w
w
w

Amne un algorithme itratif


Rduit place mmoire
Par toujours meilleur que le cas prcdent!

Premire approche systmatique, deuxime


correspond une analyse plus fine

Exemple: combinatoire
p = p + p 1
C n C n1 C n1
0
n
C n = C n = 1

0< p<n

! Arrangements de p valeurs parmi n


! Exercice: crire un programme qui
calcule C(n,p) avec mmosation.
n

Donner le cot

! Algorithme rcursif initial effectue > 2n/2 ops


w Impossible de calculer fi(200)
w Lunivers observable aurait-il pu calculer ainsi fib(1000)?

! La mmosation rduit le nombre O(n) !!!


w Espace mmoire requis : n

! Analyse des dpendances dappel:


w 2 cases mmoire suffisent :
n

on retrouve lalgorithme itratif classique!

Question subsidiaire: comment calculer fib(n) en O(log n) ops sur


des entiers ? (une piste: dpendances algbriques)

Exercice la maison / Tram


(numration des arrangements possibles)

! n lments et une relation de compatibilit


n

Ex. Loup, Salade, Chvre, Hirondelle

! Chaque lment apporte un gain


! Question: Trouver un sous-ensemble de p
lments et apportant un gain maximal.

a/ Si tous les lments sont compatibles


n b/ Le boolen R(i,j) indique si i est compatible
avec j
n

Problme du sac dos binaire


Quelques problmes

! Soit un sac de volume V, et n articles


diffrents
n

Caractrisation rcursive de loptimum


i.e. la valeur de(s) solution(s) optimales(s)

Soit uk lutiit (bnfice) du kime article,


et vk son volume

! Quelle est lutilit maximale?


Variante: sac dos gnral: on dispose de
chaque objet volont

Problme du sac dos binaire


! Rcursion, donc indices rcurer
n
n
n

n = nombre dobjets restants examiner (1 n ninit)


V = volume libre dans le sac (0 V Vinit)
Df: UV,n = utilit maximale dun sac de volume V quon
peut remplir avec les objets 1 n

! Formule rcursive:

Compilation nave
double sacMax( int n, int V) {
|
| if (n==0) { res = 0; }
| else if (v[n] V) {
| max1 = u[n] + sacMax( V v[n], n-1) ;
| max2 = sacMax( V, n-1 ) ;
| if (max1 > max2) { res = max1 ; }
| else
{ res = max2 ; }
| }
| else { res= sacMax( V, n-1 ) ; }
|
| return res;
}

Mmosation
double sacMaxMemoisation( int n, int V) {
double memVal[,] ; // dclaration tableau temporaire
double sacMax( int n, int V) {
| if (memVal[n, V] -1) return memVal[n, V] ;
| if (n==0) { res = 0; }
| else if (v[n] V) {
| max1 = u[n] + sacMax( V v[n], n-1) ;
| max2 = sacMax( V, n-1 ) ;
| if (max1 > max2) { res = max1 ; }
| else
{ res = max2 ; }
| }
| else { res= sacMax( V, n-1 ) ; }
| memVal[n, V] = res ;
| return res;
}
// main
memVal = allocate_and_init(n , V , -1) ;
return sacMax(n, V) ;
}

Cageots de fraises

Analyse de cot
! Version nave : en pire cas, objets de volume 1
T(n,V)=T(n-1,V-1) + T(n-1,V) + O(1)
exponentiel [Fibo(m) en posant m=n+V ]

! Version avec mmosation (cas V > n)


T(n,V) = n . (V - n)

FIN COURS 1

! n cageots de fraises doivent tre distribus dans k


magasins
! Les bnfices que lon peut retirer de chaque
magasin dpendent du nombre de cageot de
fraises sont fournis
n

G(i,j) : gain espr si lon met i cageots en vente dans


le magasin j

! Quel est le gain maximal espr

Caractrisation rcursive du gain espr optimal

Ecrire un programme avec mmosation

Prochain cours : combien de cageots mettre dans chaque magasin?

! Ce qui a t vu
Des programmes rcursifs
n Elimination de calculs redondants par
tabulation (mmosation)
n Pour certains problmes doptimisation
discrte : le calcul de la valeur optimale
atteignable se caractrise naturellement de
manire rcursive
n

You might also like