Title: Cours d
1Cours dAlgorithmique
- Programmation dynamique
- Problème du sac à dos.
- Négociant en sardines au port de Marseille.
- Problème de la plus longue sous-chaîne commune.
- Problème du plus court chemin.
2Cours dAlgorithmique
- Programmation dynamique
- Problème du sac à dos.
- Négociant en sardines au port de Marseille.
- Problème de la plus longue sous-chaîne commune.
- Problème du plus court chemin.
Bonne année 2006 ! ! !
3Cours dAlgorithmique
- Programmation dynamique
- Problème du sac à dos.
- Négociant en sardines au port de Marseille.
- Problème de la plus longue sous-chaîne commune.
- Problème du plus court chemin.
Bonne année 2006 ! ! !
Bonne année ! ! !
4Cours dAlgorithmique
Bonne année !
- Programmation dynamique
- Problème du sac à dos.
- Négociant en sardines au port de Marseille.
- Problème de la plus longue sous-chaîne commune.
- Problème du plus court chemin.
Bonne année 2006 ! ! !
Bonne année ! ! !
5Cours dAlgorithmique
Bonne année !
- Programmation dynamique
- Problème du sac à dos.
- Négociant en sardines au port de Marseille.
- Problème de la plus longue sous-chaîne commune.
- Problème du plus court chemin.
Bonne année 2006 ! ! !
Bonne année ! ! !
Bonne année ! ! !
6Cours dAlgorithmique
Bonne année !
Bonne année ...
- Programmation dynamique
- Problème du sac à dos.
- Négociant en sardines au port de Marseille.
- Problème de la plus longue sous-chaîne commune.
- Problème du plus court chemin.
Bonne année 2006 ! ! !
Bonne année ! ! !
Bonne année ! ! !
7Cours dAlgorithmique
Bonne année !
Bonne année ...
Bonne année ! ! !
- Programmation dynamique
- Problème du sac à dos.
- Négociant en sardines au port de Marseille.
- Problème de la plus longue sous-chaîne commune.
- Problème du plus court chemin.
Bonne année 2006 ! ! !
Bonne année ! ! !
Bonne année ! ! !
8Les grandes lignes du cours
- Trier et chercher, recherche textuelle
- Listes et arbres
- Le back-track
- Arbres équilibrés
- Récursivité et induction sur la structure
- Divide and conquer
- Minimax, alpha-beta
- Dérécursion
- NP-complétude
- Logique de Hoare
- Programmation dynamique
- Complexité et calculabilité
9Dynamic Programming------------------------------
-----------------------------------
En français Programmation dynamique
! Abréviation classique DP Notion introduite
par Richard Bellman en 1957.
Principe Nous explicitons le TEMPS qui sera
linéaire, bi-dimensionnel,
10Dynamic Programming------------------------------
-----------------------------------
- Introduction à la problématique.
-
- Considérons à nouveau la fonction Fibonacci
11Dynamic Programming------------------------------
-----------------------------------
- Introduction à la problématique.
-
- Considérons à nouveau la fonction Fibonacci
- Le programme récursif est exponentiel en temps !
- Cest dû aux
- répétitions
- de calculs !
4
3
2
2
0
1
0
1
12Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
13Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
Nous utilisons au temps t ce que nous
avons pu calculer aux temps t 1 et t
2 .
14Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
- Respectons le temps
0
1
2
3
4
5
6
t
fib
1
0
15Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
- Respectons le temps
0
1
2
3
4
5
6
t
fib
1
1
0
16Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
- Respectons le temps
0
1
2
3
4
5
6
t
fib
1
1
2
0
17Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
- Respectons le temps
0
1
2
3
4
5
6
t
fib
1
1
2
3
0
18Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
- Respectons le temps
0
1
2
3
4
5
6
t
fib
1
1
2
3
5
0
19Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
- Respectons le temps
0
1
2
3
4
5
6
t
fib
1
1
2
3
5
8
0
20Dynamic Programming------------------------------
-----------------------------------
- Principe de la programmation dynamique
- Dites à quel moment vous ferez quel calcul ?
-
- Respectons le temps
- Complexité en temps linéaire !
0
1
2
3
4
5
6
t
fib
1
1
2
3
5
8
0
21Dynamic Programming------------------------------
-----------------------------------
- Quelle fonction de temps ?
- Cest quoi ?
22Dynamic Programming------------------------------
-----------------------------------
- Quelle fonction de temps ?
- Cest quoi ?
- Une fonction qui dit, en termes de létat du
problème, à quel moment il va être résolu ! - Exemples fib ( t ) au temps t ,
- prog( x , y ) au temps 2
x y -5 .
23Dynamic Programming------------------------------
-----------------------------------
- Quelle fonction de temps ?
- Cest quoi ?
- Une fonction qui dit, en termes de létat du
problème, à quel moment il va être résolu ! - Exemples fib ( t ) au temps t ,
- prog( x , y ) au temps 2
x y -5 . - Nimporte laquelle pour peu que
- nous ne répétions pas les calculs
-
- Ce nest pas interdit, mais fortement
déconseillé ! -
- et que la fonction soit compatible avec les
dépendances.
24Dynamic Programming------------------------------
-----------------------------------
- Dépendances entre problèmes
- On parle aussi de flot de données ou de
contrôle. - Le calcul B dépend du calcul A sil faut
que - A soit calculé avant B !
25Dynamic Programming------------------------------
-----------------------------------
- Dépendances entre problèmes
- On parle aussi de flot de données ou de
contrôle. - Le calcul B dépend du calcul A sil faut
que - A soit calculé avant B !
- Soit, parce que A a besoin de données
produites par B --- flot de données !
26Dynamic Programming------------------------------
-----------------------------------
- Dépendances entre problèmes
- On parle aussi de flot de données ou de
contrôle. - Le calcul B dépend du calcul A sil faut
que - A soit calculé avant B !
- Soit, parce que A a besoin de données
produites par B --- flot de données ! - Soit, parce quil faut respecter un ordre (par
exemple - imprimer A avant B ).
-
27Dynamic Programming------------------------------
-----------------------------------
- Dépendances entre problèmes
- On parle aussi de flot de données ou de
contrôle. - Le calcul B dépend du calcul A sil faut
que - A soit calculé avant B !
- Soit, parce que A a besoin de données
produites par B --- flot de données ! - Soit, parce quil faut respecter un ordre (par
exemple - imprimer A avant B ).
-
- Soit, parce que A conditionne B ( si A
alors B ) --- flot de contrôle !
28Dynamic Programming------------------------------
-----------------------------------
- Dépendances entre problèmes
- On parle aussi de flot de données ou de
contrôle. - Le calcul B dépend du calcul A sil faut
que - A soit calculé avant B !
- Soit, parce que A a besoin de données
produites par B --- flot de données ! - Soit, parce quil faut respecter un ordre (par
exemple - imprimer A avant B ).
-
- Soit, parce que A conditionne B ( si A
alors B ) --- flot de contrôle !
Le respect des dépendances est obligatoire !
29Dynamic Programming------------------------------
-----------------------------------
- En fait, les dépendances comportent une notion de
temporalité sous la forme de - AVANT --- APRES
- DABORD --- ENSUITE
30Dynamic Programming------------------------------
-----------------------------------
- En fait, les dépendances comportent une notion de
temporalité sous la forme de - AVANT --- APRES
- DABORD --- ENSUITE
- La fonction de temps f dit de manière plus
précise - QUAND
31Dynamic Programming------------------------------
-----------------------------------
- En fait, les dépendances comportent une notion de
temporalité sous la forme de - AVANT --- APRES
- DABORD --- ENSUITE
- La fonction de temps f dit de manière plus
précise - QUAND
- La contrainte sur f dit que
- dès que A doit être avant B pour des
raisons de dépendances, alors - f ( A ) lt f ( B )
32Dynamic Programming------------------------------
-----------------------------------
- En fait, les dépendances comportent une notion de
temporalité sous la forme de - AVANT --- APRES
- DABORD --- ENSUITE
- La fonction de temps f dit de manière plus
précise - QUAND
- La contrainte sur f dit que
- dès que A doit être avant B pour des
raisons de dépendances, alors - f ( A ) lt f ( B )
f est alors dite compatible avec les
dépendances .
33Dynamic Programming------------------------------
-----------------------------------
- Larbre de dépendances de Fibonacci
4
3
2
2
1
1
1
0
0
34Dynamic Programming------------------------------
-----------------------------------
- Larbre de dépendances de Fibonacci
- Sa projection sur un axe de temps
t
4
4
3
3
2
2
2
1
1
1
1
0
0
0
35Dynamic Programming------------------------------
-----------------------------------
- Larbre de dépendances de Fibonacci
- Sa projection sur un axe de temps
t
4
4
3
3
2
2
2
1
1
1
1
0
0
0
36Dynamic Programming------------------------------
-----------------------------------
- Larbre de dépendances de Fibonacci
- Sa projection sur un axe de temps
t
4
4
Compatibilité !
3
3
2
2
2
1
1
1
1
0
0
0
37Dynamic Programming------------------------------
-----------------------------------
- Parfois, la programmation dynamique est
- la transformation dun problème de back-track ou
divide-and-conquer - avec un comportement temporel anarchique
- en un problème qui réalise les calculs une seule
fois et lorsquil le faut !
38Dynamic Programming------------------------------
-----------------------------------
- Il y a une théorie derrière !
- Cadre général les modèles de décision
multi-étages. - Si certaines propriétés sont vérifiées, on peut
transformer tout problème de ce modèle en un
programme DP. - Trop long et compliqué dans le contexte du cours.
39Dynamic Programming------------------------------
-----------------------------------
U n e x e m p l e c o m p l e t S A C A
D O S ! ! !
40Sac à dos --- Knapsack-----------------------
------------------------------------------
- Problème du sac à dos !
- Ingrédients
- 1 sac à dos de capacité C (par exemple en
kilos), - n objets de O , , O
- de poids strictement positifs respectifs p
- et de bénéfices strictement positifs respectifs b
.
n
1
i
i
41Sac à dos --- Knapsack-----------------------
------------------------------------------
- Problème du sac à dos !
- Ingrédients
- 1 sac à dos de capacité C (par exemple en
kilos), - n objets de O , , O
- de poids strictement positifs respectifs p
- et de bénéfices strictement positifs respectifs b
. - Recette
- Trouvez, sans dépasser la capacité, lensemble
dobjets qui maximise le bénéfice.
n
1
i
i
42Sac à dos --- Knapsack-----------------------
------------------------------------------
- Trouvez lensemble I inclus dans 1 , , n
tel que - P ( I ) S p C
i
i e I
43Sac à dos --- Knapsack-----------------------
------------------------------------------
- Trouvez lensemble I inclus dans 1 , , n
tel que - P ( I ) S p C
- B ( I ) S b max ( B ( J ) )
i
i e I
i
i e I
44Sac à dos --- Knapsack-----------------------
------------------------------------------
- Trouvez lensemble I inclus dans 1 , , n
tel que - P ( I ) S p C
- B ( I ) S b max ( B ( J ) )
- A priori, il faut se comparer à un grand nombre
dautres ensembles candidats à être optimal.
i
i e I
i
i e I
45Sac à dos --- Knapsack-----------------------
------------------------------------------
int max_benefice 0 pour k allant de 1 à n
faire pour chaque ensemble I, de taille k
et sous-ensemble de
1 , ... , n faire si ( P ( I ) lt
C ) max_benefice max ( B ( I ) ,
max_benefice )
46Sac à dos --- Knapsack-----------------------
------------------------------------------
Toutes les tailles possibles pour les
sous-ensembles.
int max_benefice 0 pour k allant de 1 à n
faire pour chaque ensemble I, de taille k
et sous-ensemble de
1 , ... , n faire si ( P ( I ) lt
C ) max_benefice max ( B ( I ) ,
max_benefice )
47Sac à dos --- Knapsack-----------------------
------------------------------------------
Toutes les tailles possibles pour les
sous-ensembles.
int max_benefice 0 pour k allant de 1 à n
faire pour chaque ensemble I, de taille k
et sous-ensemble de
1 , ... , n faire si ( P ( I ) lt
C ) max_benefice max ( B ( I ) ,
max_benefice )
Tous les sous-ensembles de cette taille
48Sac à dos --- Knapsack-----------------------
------------------------------------------
Toutes les tailles possibles pour les
sous-ensembles.
int max_benefice 0 pour k allant de 1 à n
faire pour chaque ensemble I, de taille k
et sous-ensemble de
1 , ... , n faire si ( P ( I ) lt
C ) max_benefice max ( B ( I ) ,
max_benefice )
Tous les sous-ensembles de cette taille
Retenez le bénéfice sil est meilleur et que la
contrainte sur la capacité est respectée.
49Sac à dos --- Knapsack-----------------------
------------------------------------------
Toutes les tailles possibles pour les
sous-ensembles.
int max_benefice 0 pour k allant de 1 à n
faire pour chaque ensemble I, de taille k
et sous-ensemble de
1 , ... , n faire si ( P ( I ) lt
C ) max_benefice max ( B ( I ) ,
max_benefice )
Tous les sous-ensembles de cette taille
Retenez le bénéfice sil est meilleur et que la
contrainte sur la capacité est respectée.
Seule ombre au tableau le nombre des
ensembles considérés est en X ( 2n ).
50Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ?
51Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! !
52Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! ! - Considérez les ensembles qui contiennent lobjet
O et ceux qui ne le contiennent pas !
53Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! ! - Considérez les ensembles qui contiennent lobjet
O et ceux qui ne le contiennent pas ! - Soit i lindice de lobjet que nous allons
considérer, - soit R la capacité résiduelle,
- soit B le bénéfice des objets pris jusque-là.
54Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! ! - Considérez les ensembles qui contiennent lobjet
O et ceux qui ne le contiennent pas ! - Soit i lindice de lobjet que nous allons
considérer, - soit R la capacité résiduelle,
- soit B le bénéfice des objets pris jusque-là.
Etat initial.
I 1 , R C , B 0
55Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! ! - Considérez les ensembles qui contiennent lobjet
O et ceux qui ne le contiennent pas ! - Soit i lindice de lobjet que nous allons
considérer, - soit R la capacité résiduelle,
- soit B le bénéfice des objets pris jusque-là.
Etat initial.
I 1 , R C , B 0
O est pris !
1
I 2 , R C - p , B b
1
1
56Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! ! - Considérez les ensembles qui contiennent lobjet
O et ceux qui ne le contiennent pas ! - Soit i lindice de lobjet que nous allons
considérer, - soit R la capacité résiduelle,
- soit B le bénéfice des objets pris jusque-là.
Etat initial.
I 1 , R C , B 0
O est pris !
O nest pas pris !
1
1
I 2 , R C - p , B b
I 2 , R C , B 0
1
1
57Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! ! - Considérez les ensembles qui contiennent lobjet
O et ceux qui ne le contiennent pas ! - Soit i lindice de lobjet que nous allons
considérer, - soit R la capacité résiduelle,
- soit B le bénéfice des objets pris jusque-là.
Etat initial.
I 1 , R C , B 0
O est pris !
O nest pas pris !
1
1
I 2 , R C - p , B b
I 2 , R C , B 0
1
1
Optimum local B_sans
Optimum local B_avec
58Sac à dos --- Knapsack-----------------------
------------------------------------------
- Solution Divide and Conquer ? ? ? Mais oui !
! ! - Considérez les ensembles qui contiennent lobjet
O et ceux qui ne le contiennent pas ! - Soit i lindice de lobjet que nous allons
considérer, - soit R la capacité résiduelle,
- soit B le bénéfice des objets pris jusque-là.
Etat initial.
I 1 , R C , B 0
MAX
O est pris !
O nest pas pris !
1
1
I 2 , R C - p , B b
I 2 , R C , B 0
1
1
Optimum local B_avec
Optimum local B_sans
59Sac à dos --- Knapsack-----------------------
------------------------------------------
int DC_sac ( int objet , int residuelle , int
benefice ) if ( objet gt n ) return( benefice
) else int memoire memoire
DC_sac ( objet 1 , residuelle , benefice )
if ( p objet gt residuelle ) return(
memoire ) else return( max( DC_sac(
objet 1 ,
residuelle p objet ,
benefice b objet ) ,
memoire ) )
60Sac à dos --- Knapsack-----------------------
------------------------------------------
int DC_sac ( int objet , int residuelle , int
benefice ) if ( objet gt n ) return( benefice
) else int memoire memoire
DC_sac ( objet 1 , residuelle , benefice )
if ( p objet gt residuelle ) return(
memoire ) else return( max( DC_sac(
objet 1 ,
residuelle p objet ,
benefice b objet ) ,
memoire ) )
Cas final !
61Sac à dos --- Knapsack-----------------------
------------------------------------------
int DC_sac ( int objet , int residuelle , int
benefice ) if ( objet gt n ) return( benefice
) else int memoire memoire
DC_sac ( objet 1 , residuelle , benefice )
if ( p objet gt residuelle ) return(
memoire ) else return( max( DC_sac(
objet 1 ,
residuelle p objet ,
benefice b objet ) ,
memoire ) )
Cas final !
Nous explorons toujours le cas où lobjet ne sera
pas pris !
62Sac à dos --- Knapsack-----------------------
------------------------------------------
int DC_sac ( int objet , int residuelle , int
benefice ) if ( objet gt n ) return( benefice
) else int memoire memoire
DC_sac ( objet 1 , residuelle , benefice )
if ( p objet gt residuelle ) return(
memoire ) else return( max( DC_sac(
objet 1 ,
residuelle p objet ,
benefice b objet ) ,
memoire ) )
Cas final !
Nous explorons toujours le cas où lobjet ne sera
pas pris !
Il se peut que cela suffise !
63Sac à dos --- Knapsack-----------------------
------------------------------------------
int DC_sac ( int objet , int residuelle , int
benefice ) if ( objet gt n ) return( benefice
) else int memoire memoire
DC_sac ( objet 1 , residuelle , benefice )
if ( p objet gt residuelle ) return(
memoire ) else return( max( DC_sac(
objet 1 ,
residuelle p objet ,
benefice b objet ) ,
memoire ) )
Cas final !
Nous explorons toujours le cas où lobjet ne sera
pas pris !
Il se peut que cela suffise !
Le cas le plus courant est celui qui explore les
deux alternatives !
64Sac à dos --- Knapsack-----------------------
------------------------------------------
int DC_sac ( int objet , int residuelle , int
benefice ) if ( objet gt n ) return( benefice
) else int memoire memoire
DC_sac ( objet 1 , residuelle , benefice )
if ( p objet gt residuelle ) return(
memoire ) else return( max( DC_sac(
objet 1 ,
residuelle p objet ,
benefice b objet ) ,
memoire ) )
Cas final !
Nous explorons toujours le cas où lobjet ne sera
pas pris !
Il se peut que cela suffise !
Le cas le plus courant est celui qui explore les
deux alternatives !
La capacité résiduelle diminue !
Le bénéfice augmente !
65Sac à dos --- Knapsack-----------------------
------------------------------------------
- Malheureusement, nous répétons des calculs !
- Considérons p 1 1 , p 2 2 , p 3
3 et - b 1 2 , b 2
4 , b 3 6 .
66Sac à dos --- Knapsack-----------------------
------------------------------------------
- Malheureusement, nous répétons des calculs !
- Considérons p 1 1 , p 2 2 , p 3
3 et - b 1 2 , b 2
4 , b 3 6 . - Si nous sélectionnons 1 et 2 mais pas 3 ,
lappel suivant sera - DC_sac ( 4 , C 3 ,
6 ).
67Sac à dos --- Knapsack-----------------------
------------------------------------------
- Malheureusement, nous répétons des calculs !
- Considérons p 1 1 , p 2 2 , p 3
3 et - b 1 2 , b 2
4 , b 3 6 . - Si nous sélectionnons 1 et 2 mais pas 3 ,
lappel suivant sera - DC_sac ( 4 , C 3 ,
6 ). - Si nous ne sélectionnons ni 1 , ni 2 , mais 3
, lappel suivant sera - DC_sac ( 4 , C 3 ,
6 ).
68Sac à dos --- Knapsack-----------------------
------------------------------------------
- Malheureusement, nous répétons des calculs !
- Considérons p 1 1 , p 2 2 , p 3
3 et - b 1 2 , b 2
4 , b 3 6 . - Si nous sélectionnons 1 et 2 mais pas 3 ,
lappel suivant sera - DC_sac ( 4 , C 3 ,
6 ). - Si nous ne sélectionnons ni 1 , ni 2 , mais 3
, lappel suivant sera - DC_sac ( 4 , C 3 ,
6 ).
69Sac à dos --- Knapsack-----------------------
------------------------------------------
- Organisons notre emploi du temps !
- Au temps t , nous nous occupons de O .
t
70Sac à dos --- Knapsack-----------------------
------------------------------------------
- Organisons notre emploi du temps !
- Au temps t , nous nous occupons de O .
- Nous avons donc déjà considéré O , , O
.
t
1
t-1
71Sac à dos --- Knapsack-----------------------
------------------------------------------
- Organisons notre emploi du temps !
- Au temps t , nous nous occupons de O .
- Nous avons donc déjà considéré O , , O
. - Avec une capacité résiduelle R , la meilleure
solution sur les t premiers objets est
obtenue par -
- Opt ( t , R )
-
t
1
t-1
72Sac à dos --- Knapsack-----------------------
------------------------------------------
- Organisons notre emploi du temps !
- Au temps t , nous nous occupons de O .
- Nous avons donc déjà considéré O , , O
. - Avec une capacité résiduelle R , la meilleure
solution sur les t premiers objets est
obtenue par -
- Opt ( t 1 , R )
si p gt R ! - Opt ( t , R )
-
t
1
t-1
t
73Sac à dos --- Knapsack-----------------------
------------------------------------------
- Organisons notre emploi du temps !
- Au temps t , nous nous occupons de O .
- Nous avons donc déjà considéré O , , O
. - Avec une capacité résiduelle R , la meilleure
solution sur les t premiers objets est
obtenue par -
- Opt ( t 1 , R )
si p gt R ! - Opt ( t , R )
- max ( Opt ( t 1 ,
R ) , b Opt ( t - 1 , R p ) )
t
1
t-1
t
t
t
74Sac à dos --- Knapsack-----------------------
------------------------------------------
- Organisons notre emploi du temps !
- Au temps t , nous nous occupons de O .
- Nous avons donc déjà considéré O , , O
. - Avec une capacité résiduelle R , la meilleure
solution sur les t premiers objets est
obtenue par -
- Opt ( t 1 , R )
si p gt R ! - Opt ( t , R )
- max ( Opt ( t 1 ,
R ) , b Opt ( t - 1 , R p ) )
t
1
t-1
t
t
t
O est pris !
O nest pas pris !
t
t
75Sac à dos --- Knapsack-----------------------
------------------------------------------
- Organisons notre emploi du temps !
- Au temps t , nous nous occupons de O .
- Nous avons donc déjà considéré O , , O
. - Avec une capacité résiduelle R , la meilleure
solution sur les t premiers objets est
obtenue par -
- Opt ( t 1 , R )
si p gt R ! - Opt ( t , R )
- max ( Opt ( t 1 ,
R ) , b Opt ( t - 1 , R p ) )
t
1
t-1
t
t
t
Nous respectons lécoulement du temps !
76Sac à dos --- Knapsack-----------------------
------------------------------------------
C
Opt ( t-1 , R )
Opt ( t , R )
R
Si lobjet est trop lourd !
n
t-1
t
77Sac à dos --- Knapsack-----------------------
------------------------------------------
C
Opt ( t-1 , R )
Opt ( t , R )
R
Si lobjet est trop lourd !
La fonction de temps est compatible avec les
dépendances ! ! !
n
t-1
t
78Sac à dos --- Knapsack-----------------------
------------------------------------------
C
Opt ( t-1 , R )
Opt ( t , R )
R
Si lobjet nest pas trop lourd !
R p t
Opt ( t-1 , R p t )
n
t-1
t
79Sac à dos --- Knapsack-----------------------
------------------------------------------
C
Opt ( t-1 , R )
Opt ( t , R )
R
Si lobjet nest pas trop lourd !
R p t
La fonction de temps est compatible avec les
dépendances ! ! !
Opt ( t-1 , R p t )
n
t-1
t
80Sac à dos --- Knapsack-----------------------
------------------------------------------
C
0
Opt ( t-1 , R )
Opt ( t , R )
R
0
Si lobjet nest pas trop lourd !
R p t
La fonction de temps est compatible avec les
dépendances ! ! !
Opt ( t-1 , R p t )
0
n
t-1
t
0
Sans objets, il ny a aucun bénéfice.
81Sac à dos --- Knapsack-----------------------
------------------------------------------
for ( R 0 R lt C R ) Opt 0 , R
0 for ( t 1 t lt n t ) for ( R
0 R lt C R ) if ( p t gt R )
Opt t , R Opt t-1 , R
else Opt t , R max( b t
Opt t-1 , Rp t ,
Opt t-1 , R )
82Sac à dos --- Knapsack-----------------------
------------------------------------------
for ( R 0 R lt C R ) Opt 0 , R
0 for ( t 1 t lt n t ) for ( R
0 R lt C R ) if ( p t gt R )
Opt t , R Opt t-1 , R
else Opt t , R max( b t
Opt t-1 , Rp t ,
Opt t-1 , R )
Initialisation de la première colonne à 0.
83Sac à dos --- Knapsack-----------------------
------------------------------------------
for ( R 0 R lt C R ) Opt 0 , R
0 for ( t 1 t lt n t ) for ( R
0 R lt C R ) if ( p t gt R )
Opt t , R Opt t-1 , R
else Opt t , R max( b t
Opt t-1 , Rp t ,
Opt t-1 , R )
Initialisation de la première colonne à 0.
Colonne après colonne, depuis la gauche vers la
droite et de bas en haut
84Sac à dos --- Knapsack-----------------------
------------------------------------------
for ( R 0 R lt C R ) Opt 0 , R
0 for ( t 1 t lt n t ) for ( R
0 R lt C R ) for ( R C R gt 0
R-- ) if ( p t gt R ) Opt
t , R Opt t-1 , R else
Opt t , R max( b t Opt t-1 , Rp t
, Opt t-1 , R
)
Initialisation de la première colonne à 0.
Colonne après colonne, depuis la gauche vers la
droite et de bas en haut et de haut en bas,
pourquoi pas ?
85Sac à dos --- Knapsack-----------------------
------------------------------------------
for ( R 0 R lt C R ) Opt 0 , R
0 for ( t 1 t lt n t ) for ( R
0 R lt C R ) if ( p t gt R )
Opt t , R Opt t-1 , R
else Opt t , R max( b t
Opt t-1 , Rp t ,
Opt t-1 , R )
Initialisation de la première colonne à 0.
Colonne après colonne, depuis la gauche vers la
droite et de bas en haut
ce quil faut !
86Sac à dos --- Knapsack-----------------------
------------------------------------------
for ( R 0 R lt C R ) Opt 0 , R
0 for ( t 1 t lt n t ) for ( R
0 R lt C R ) if ( p t gt R )
Opt t , R Opt t-1 , R
else Opt t , R max( b t
Opt t-1 , Rp t ,
Opt t-1 , R )
Initialisation de la première colonne à 0.
Colonne après colonne, depuis la gauche vers la
droite et de bas en haut
Finalement, c'était simple ! ! !
ce quil faut !
87Marine marchande---------------------------------
--------------------------------
- U n e x e m p l e c o m p l e t
- E G O C I A N T
- U
- O R T
- E
- M A R S E I L L E ! ! !
88Marine marchande---------------------------------
--------------------------------
- Lénoncé
- Vous êtes acheteur au port de Marseille,
89Marine marchande---------------------------------
--------------------------------
- Lénoncé
- Vous êtes acheteur au port de Marseille,
- n bateaux vont arriver et vous connaissez
cette valeur,
90Marine marchande---------------------------------
--------------------------------
- Lénoncé
- Vous êtes acheteur au port de Marseille,
- n bateaux vont arriver et vous connaissez
cette valeur, - la qualité de la marchandise des différents
bateaux Q( i ) varie de 0 à 1000, de manière
aléatoire uniforme, vous savez la juger,
91Marine marchande---------------------------------
--------------------------------
- Lénoncé
- Vous êtes acheteur au port de Marseille,
- n bateaux vont arriver et vous connaissez
cette valeur, - la qualité de la marchandise des différents
bateaux Q( i ) varie de 0 à 1000, de manière
aléatoire uniforme, vous savez la juger, - vous achetez une cargaison !
92Marine marchande---------------------------------
--------------------------------
- Lénoncé
- Vous êtes acheteur au port de Marseille,
- n bateaux vont arriver et vous connaissez
cette valeur, - la qualité de la marchandise des différents
bateaux Q( i ) varie de 1 à 1000, de manière
aléatoire uniforme, vous savez la juger, - vous achetez une cargaison !
- Laquelle ?
93Marine marchande---------------------------------
--------------------------------
- A larrivée du premier bateau
- Vous achetez ?
- Vous attendez mieux ?
94Marine marchande---------------------------------
--------------------------------
- A larrivée du premier bateau
- Vous achetez ?
- Vous attendez mieux ?
- OUI
- Achat du premier ?
- NON
-
95Marine marchande---------------------------------
--------------------------------
- A larrivée du premier bateau
- Vous achetez ?
- Vous attendez mieux ?
- OUI
- Achat du premier ?
OUI - NON Achat
du second -
NON
etc, etc ...
96Marine marchande---------------------------------
--------------------------------
- A larrivée du premier bateau
- Vous achetez ?
- Vous attendez mieux ?
- OUI
- Achat du premier ?
OUI - NON Achat
du second -
NON - En fait, quattendez-vous ?
etc, etc ...
97Marine marchande---------------------------------
--------------------------------
- A larrivée du premier bateau
- Vous achetez ?
- Vous attendez mieux ?
- OUI
- Achat du premier ?
OUI - NON Achat
du second -
NON - En fait, nous achetons si la qualité du
- bateau courant est meilleure que la
- qualité moyenne espérée des bateaux
- qui vont venir !
etc, etc ...
98Marine marchande---------------------------------
--------------------------------
- A larrivée du bateau i
- Nous achetons si Q( i ) est supérieure à E (
i1 ) - où E ( i1 ) est la qualité moyenne des bateaux
i1 à n - et nous en déduisons E( i ) !
99Marine marchande---------------------------------
--------------------------------
- A larrivée du bateau i
- Nous achetons si Q( i ) est supérieure à E (
i1 ) - où E ( i1 ) est la qualité moyenne des bateaux
i1 à n - et nous en déduisons E( i ) !
- Donc,
- avec une probabilité de ( 1000 E( i1 ) ) /
1000 - nous achetons le bateau i dont la qualité
moyenne vaut ( 1000 E( i1 ) ) / 2 .
100Marine marchande---------------------------------
--------------------------------
- A larrivée du bateau i
- Nous achetons si Q( i ) est supérieure à E (
i1 ) - où E ( i1 ) est la qualité moyenne des bateaux
i1 à n - et nous en déduisons E( i ) !
- Donc,
- avec une probabilité de ( 1000 E( i1 ) ) /
1000 - nous achetons le bateau i dont la qualité
moyenne vaut ( 1000 E( i1 ) ) / 2 . - E ( i ) ( 1000 E( i1 ) ) / 1000 ( 1000
E( i 1 ) ) / 2 -
101Marine marchande---------------------------------
--------------------------------
- A larrivée du bateau i
- Nous achetons si Q( i ) est supérieure à E (
i1 ) - où E ( i1 ) est la qualité moyenne des bateaux
i1 à n - et nous en déduisons E( i ) !
- Donc,
- avec une probabilité de ( 1000 E( i1 ) ) /
1000 - nous achetons le bateau i dont la qualité
moyenne vaut ( 1000 E( i1 ) ) / 2 . - E ( i ) ( 1000 E( i1 ) ) / 1000 ( 1000
E( i 1 ) ) / 2 - ( 1 - ( 1000 E( i1 ) ) /
1000 ) E( i1 )
102Marine marchande---------------------------------
--------------------------------
- A larrivée du bateau i
- Nous achetons si Q( i ) est supérieure à E (
i1 ) - où E ( i1 ) est la qualité moyenne des bateaux
i1 à n - et nous en déduisons E( i ) !
- Donc,
- avec une probabilité de ( 1000 E( i1 ) ) /
1000 - nous achetons le bateau i dont la qualité
moyenne vaut ( 1000 E( i1 ) ) / 2 . - E ( i ) ( 1000 E( i1 ) ) / 1000 ( 1000
E( i 1 ) ) / 2 - ( 1 - ( 1000 E( i1 ) ) /
1000 ) E( i1 ) - ( 10002 E2( i1 ) ) / 2000
103Marine marchande---------------------------------
--------------------------------
- Ce qui nous donne
- E( n ) 500
104Marine marchande---------------------------------
--------------------------------
- Ce qui nous donne
- E( n ) 500
- E( n-1 ) ½ 750 ½ 500 625
105Marine marchande---------------------------------
--------------------------------
- Ce qui nous donne
- E( n ) 500
- E( n-1 ) ½ 750 ½ 500 625
- E( n-2 ) ( 1000 625 ) / 1000 ( 1000 625
) / 2 - 625 / 1000 625 / 2
- 695
-
-
106Marine marchande---------------------------------
--------------------------------
- Ce qui nous donne
- E( n ) 500
- E( n-1 ) ½ 750 ½ 500 625
- E( n-2 ) ( 1000 625 ) / 1000 ( 1000 625
) / 2 - 625 / 1000 625 / 2
- 695
-
- n-10 n-9 n-8 n-7 n-6 n-5
n-4 n-3 n-2 n-1 n - 879 871 861 850 836 820 775
741 695 625 500
x
E( x )
107Marine marchande---------------------------------
--------------------------------
- Ce qui nous donne
- E( n ) 500
- E( n-1 ) ½ 750 ½ 500 625
- E( n-2 ) ( 1000 625 ) / 1000 ( 1000 625
) / 2 - 625 / 1000 625 / 2
- 695
-
- n-10 n-9 n-8 n-7 n-6 n-5
n-4 n-3 n-2 n-1 n - 879 871 861 850 836 820 775
741 695 625 500
Laxe de temps !
x
E( x )
108Marine marchande---------------------------------
--------------------------------
- Ce qui nous donne
- E( n ) 500
- E( n-1 ) ½ 750 ½ 500 625
- E( n-2 ) ( 1000 625 ) / 1000 ( 1000 625
) / 2 - 625 / 1000 625 / 2
- 695
-
- n-10 n-9 n-8 n-7 n-6 n-5
n-4 n-3 n-2 n-1 n - 879 871 861 850 836 820 775
741 695 625 500
Laxe de temps !
x
E( x )
Pour tout bateau i , i lt n Nous achetons si
Q( i ) gt E( i1 ) !
109Marine marchande---------------------------------
--------------------------------
- Ce qui nous donne
- E( n ) 500
- E( n-1 ) ½ 750 ½ 500 625
- E( n-2 ) ( 1000 625 ) / 1000 ( 1000 625
) / 2 - 625 / 1000 625 / 2
- 695
-
- n-10 n-9 n-8 n-7 n-6 n-5
n-4 n-3 n-2 n-1 n - 879 871 861 850 836 820 775
741 695 625 500
Laxe de temps !
C'est à nouveau très simple !
x
E( x )
Pour tout bateau i , i lt n Nous achetons si
Q( i ) gt E( i1 ) !
110Longest Common Sub-String------------------------
-----------------------------------------
- U n e x e m p l e c o m p l e t
- L A P L U S L O N G U E
- O U S C H A I N E
- C O M M U N E ! ! !
111Longest Common Sub-String------------------------
-----------------------------------------
En français Plus longue sous-chaîne commune !
- On obtient une sous-chaîne en supprimant des
caractères dune chaîne. - A B C D E F G
- B A C D D B E F
112Longest Common Sub-String------------------------
-----------------------------------------
En français Plus longue sous-chaîne commune !
- On obtient une sous-chaîne en supprimant des
caractères dune chaîne. - A B C D E F G
- B A C D D B E F
Une sous-chaîne A B
113Longest Common Sub-String------------------------
-----------------------------------------
En français Plus longue sous-chaîne commune !
- On obtient une sous-chaîne en supprimant des
caractères dune chaîne. - A B C D E F G
- B A C D D B E F
Une sous-chaîne A B
Une autre sous-chaîne B D E
114Longest Common Sub-String------------------------
-----------------------------------------
En français Plus longue sous-chaîne commune !
- On obtient une sous-chaîne en supprimant des
caractères dune chaîne. - A B C D E F G
- B A C D D B E F
Une sous-chaîne A B
Une autre sous-chaîne B D E
La sous-chaîne la plus longue A C D E F
115Longest Common Sub-String------------------------
-----------------------------------------
Soient a et b des lettres et u et v des
séquences de lettres.
116Longest Common Sub-String------------------------
-----------------------------------------
Soient a et b des lettres et u et v des
séquences de lettres.
- e ,
si u e ou v e , -
-
- LCSS ( u , v )
-
117Longest Common Sub-String------------------------
-----------------------------------------
Soient a et b des lettres et u et v des
séquences de lettres.
- e ,
si u e ou v e , - a .
LCSS ( u , v ) , si u a . u et -
v a . v , - LCSS ( u , v )
-
118Longest Common Sub-String------------------------
-----------------------------------------
Soient a et b des lettres et u et v des
séquences de lettres.
- e ,
si u e ou v e , - a .
LCSS ( u , v ) , si u a . u et -
v a . v , - LCSS ( u , v )
-
a . u a . v
LCSS
119Longest Common Sub-String------------------------
-----------------------------------------
Soient a et b des lettres et u et v des
séquences de lettres.
- e ,
si u e ou v e , - a .
LCSS ( u , v ) , si u a . u et -
v a . v , - LCSS ( u , v )
- maxstr ( LCSS ( u , v
) , LCSS ( u , v ) ) - si u a . u , v
b . v et a ltgt b.
120Longest Common Sub-String------------------------
-----------------------------------------
Soient a et b des lettres et u et v des
séquences de lettres.
- e ,
si u e ou v e , - a .
LCSS ( u , v ) , si u a . u et -
v a . v , - LCSS ( u , v )
- maxstr ( LCSS ( u , v
) , LCSS ( u , v ) ) - si u a . u , v
b . v et a ltgt b.
LCSS
a . u b . v
121Longest Common Sub-String------------------------
-----------------------------------------
Soient a et b des lettres et u et v des
séquences de lettres.