Professional Documents
Culture Documents
Optimisation Discrte
! Objectif du cours :
w Nombre doprations
w Espace mmoire requis
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
! 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)
fibo(n)
fibo(n)
fibo(n-1)
fibo(n-2)
fibo(n-3)
fibo(2)
fibo(1)
fibo(0)
Exemple: Fibonacci
! Mmosation:
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
Exemple: Fibonacci
integer fibo (n: integer) is
! Ordre topologique
n
! Algorithme?
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!
Mmosation: bilan
!
!
Exemple: combinatoire
p = p + p 1
C n C n1 C n1
0
n
C n = C n = 1
0< p<n
Donner le cot
! 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 ]
FIN COURS 1
! 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