Programmation DynamiqueMise en œuvre et application à des problèmes en TALSébastien Combéfis23 décembre 2009
Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDis...
Algorithme naif pour le problème du changeIl faut rendre une certaine quantité d’argent M sous forme depièces, tout en ren...
Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 402520105⊲4
Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 152520105⊲254
Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 52520105⊲25 104
Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 0252010525 10 54
Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 0252010525 10 5Ce n’est pas l...
Algorithme brute-forcePour être sûr d’avoir la solution optimale, on peut explorertoutes les solutions possibles4015203035...
Algorithme brute-forceOn choisit ensuite la solution qui qui coute le moins cher (ouune des solutions les moins chères s’i...
Programmation dynamique IRésoudre un problème en s’attaquant à des sous-problèmessimilaires au problème initial et plus si...
Programmation dynamique IIContrairement à l’approche « Diviser pour Régner » , lessous-problèmes peuvent se superposerMéth...
Retour sur le problème du changeDéfinition récursive du problème :ChangeM = minChangeM−5 + 1ChangeM−10 + 1ChangeM−...
Algorithme récursifUne version récursive de l’algorithme :Input : M une quantité d’argent positiveOutput : Nombre minimal ...
Algorithme récursifUne version récursive de l’algorithme :minc∈CoinsChange(M − c)Input : M une quantité d’argent positiveO...
Exemple et complexitéL’algorithme n’est pas du tout efficace, de nombreuxsous-problèmes sont exécutés plusieurs fois4035 30 ...
Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :Input : M une quantité d’arge...
Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :minc∈Coinstab[m − c]Input : M...
Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . +∞m 40c12
Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . +∞m 40c 512
Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 3m 40c 1012
Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 3m 40c 2012
Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 2m 40c 2512
Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 2mcL’algorithme fonctionne de manière a...
Comparaison des complexités051015202530350 10 20 30 40 50Nombre d’opérations élémentaires en fonction de MChangeRecChangeD...
Obtenir les dénominations des piècesIl suffit d’ajouter un tableau qui stocke une pièce :Input : M une quantité d’argent pos...
Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDis...
Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDis...
Algorithme de ViterbiUtilisé pour résoudre le problème du décodage sur un modèlede Markov caché (HMM)Problème du décodageS...
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0....
Définition récursive du problèmeδt(i) est la meilleure probabilité d’être sur l’état i au temps titi − 1ii + 1t − 1. . .. ....
Définition récursive du problèmeδt(i) est la meilleure probabilité d’être sur l’état i au temps titi − 1ii + 1t − 1. . .. ....
Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :Input : M = (Q, Σ, π, ω, a, b...
Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :maxj∈Qδt−1(j) · aj,i · bi,otI...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 × × ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 ...
Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDis...
Distance d’éditionUtilisée pour mesurer la distance entre deux séquencesOpération d’éditionUne opération d’édition est une...
Spellcheck basé sur la distance d’éditionMITSY24
Spellcheck basé sur la distance d’éditionMITSYEMITSY(−, E)24
Spellcheck basé sur la distance d’éditionMITSYEMITSYEDITSY(−, E)(M, D)24
Spellcheck basé sur la distance d’éditionMITSYEMITSYEDITSYEDITS(−, E)(M, D)(Y , −)24
Spellcheck basé sur la distance d’éditionMITSYEMITSYEDITSYEDITS(−, E)(M, D)(Y , −)-MITSYEDITS-24
Définition récursive du problèmed(ε, ε) = 0 (ε est la chaine vide)d(s, ε) = d(ε, s) = |s| (|s| est la longueur de s)d(s1 · ...
Algorithme en programmation dynamiqueCalcul de la distance d’édition entre les chaines s et t avec|s| = n et |t| = m et fo...
Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :Input : s = s1 · · · sn et t ...
Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :minM[i][j − 1] + 1M[i − ...
Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1E 2N 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑E ↑N ↑T ↑I ↑L ↑28
Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1E 2N 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑ տE ↑N ↑T ↑I ↑L ↑M[1][1] =M...
Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2N 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑ տ տ← տ← տ← տ←E ↑ ...
Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2 3 4N 3 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑ տ տ← տ← տ← ...
Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2 3 4N 3 3 2 2 3 4T 4 4 3 2 3 3I 5 5 4 3 2L 6ε P E T I T...
Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2 3 4N 3 3 2 2 3 4T 4 4 3 2 3 3I 5 5 4 3 2 3L 6 6 5 4 3 ...
Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDis...
Algorithme CKYAnalyseur syntaxique basé sur une approche bottom-upS’applique aux grammaires hors-contexte (type 2 Chomsky)...
Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN ...
Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN ...
Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN ...
Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN ...
Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN ...
Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN ...
Définition récursive du problème IÉviter de réanalyser plusieurs fois les mêmes sous-séquencesChaine abc · · · à analyser d...
Définition récursive du problème IIMot à analyser : w1w2 · · · wnCas de base : Mot wi , P[i − 1][i] ∪= {S}, avec S → wiCas ...
Algorithme en programmation dynamiquePour une grammaire G = N, Σ, P, S , tester si une chainew = w1, · · · , wn appartient...
Algorithme en programmation dynamiquePour une grammaire G = N, Σ, P, S , tester si une chainew = w1, · · · , wn appartient...
Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → De...
Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → Det NSN → X1 ...
Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → De...
Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → De...
Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → De...
Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → De...
Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 81. S → SN SV2. S → SN V3. SN → Det N4. SN → X...
ConclusionProgrammation dynamique adaptée pour :Des problèmes décomposables en sous-problèmesLes sous-problèmes se chevauc...
Prochain SlideShare
Chargement dans…5
×

Programmation Dynamique : Mise en œuvre et application à des problèmes en TAL

452 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
452
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
23
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Programmation Dynamique : Mise en œuvre et application à des problèmes en TAL

  1. 1. Programmation DynamiqueMise en œuvre et application à des problèmes en TALSébastien Combéfis23 décembre 2009
  2. 2. Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDistance d’éditionAlgorithme CKY2
  3. 3. Algorithme naif pour le problème du changeIl faut rendre une certaine quantité d’argent M sous forme depièces, tout en rendant un minimum de piècesUn algorithme naif utilisé par la plupart des caissiersInput : M une quantité d’argent positiveOutput : Liste de pièces à rendre pour former M, tel que lenombre de pièces soit minimalL ←1while M > 0 do2c ← La pièce de plus grande valeur tel que c ≤ M3L ← L + c4M ← M − c5return L63
  4. 4. Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 402520105⊲4
  5. 5. Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 152520105⊲254
  6. 6. Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 52520105⊲25 104
  7. 7. Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 0252010525 10 54
  8. 8. Exemple d’exécution de l’algorithmeRendre 40 cents avec des pièces de 25, 20, 10 et 5 centsM 0252010525 10 5Ce n’est pas la solution optimale !L’algorithme proposé n’est pas correct !4
  9. 9. Algorithme brute-forcePour être sûr d’avoir la solution optimale, on peut explorertoutes les solutions possibles401520303505101520253005101520250510152005101505100505
  10. 10. Algorithme brute-forceOn choisit ensuite la solution qui qui coute le moins cher (ouune des solutions les moins chères s’il y a plusieurs possibilités)401520303505101520253005101520250510152005101505100505
  11. 11. Programmation dynamique IRésoudre un problème en s’attaquant à des sous-problèmessimilaires au problème initial et plus simples à résoudreÉviter de calculer plusieurs fois la même chose en exploitant lamémoizationPrincipe d’optimalité de BellmanUne solution optimale d’une instance du problème peut toujoursêtre obtenue à partir de solutions optimales aux sous-problèmes6
  12. 12. Programmation dynamique IIContrairement à l’approche « Diviser pour Régner » , lessous-problèmes peuvent se superposerMéthode ascendante, on commence par résoudre les petitssous-problèmes pour obtenir une solution au problème initialDiviser pour régner Programmation dynamique7
  13. 13. Retour sur le problème du changeDéfinition récursive du problème :ChangeM = minChangeM−5 + 1ChangeM−10 + 1ChangeM−20 + 1ChangeM−25 + 1Pour trouver le nombre optimal de pièces sommant à M, onessaie toutes les possibilités et on prend la meilleure8
  14. 14. Algorithme récursifUne version récursive de l’algorithme :Input : M une quantité d’argent positiveOutput : Nombre minimal de pièces à rendre pour former Mif M = 0 then1return 02best ← +∞3foreach c ∈ Coins do4if M ≥ c then5n ← Change(M − c)6if n + 1 < best then7best ← n + 18return best99
  15. 15. Algorithme récursifUne version récursive de l’algorithme :minc∈CoinsChange(M − c)Input : M une quantité d’argent positiveOutput : Nombre minimal de pièces à rendre pour former Mif M = 0 then1return 02best ← +∞3foreach c ∈ Coins do4if M ≥ c then5n ← Change(M − c)6if n + 1 < best then7best ← n + 18return best99
  16. 16. Exemple et complexitéL’algorithme n’est pas du tout efficace, de nombreuxsous-problèmes sont exécutés plusieurs fois4035 30 20 1530 25 15 10 25 20 10 5 15 10 0 −5 10 5 −5 −10L’algorithme fonctionne de manière descendanteAlgorithme de complexité temporelle O(Md)10
  17. 17. Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :Input : M une quantité d’argent positiveOutput : Nombre minimal de pièces à rendre pour former Mtab ← new Array[M + 1]1tab[0] ← 02for m ← 1 to M do3tab[m] ← +∞4foreach c ∈ Coins do5if m ≥ c then6if tab[m − c] + 1 < tab[m] then7tab[m] ← tab[m − c] + 18return tab[M]911
  18. 18. Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :minc∈Coinstab[m − c]Input : M une quantité d’argent positiveOutput : Nombre minimal de pièces à rendre pour former Mtab ← new Array[M + 1]1tab[0] ← 02for m ← 1 to M do3tab[m] ← +∞4foreach c ∈ Coins do5if m ≥ c then6if tab[m − c] + 1 < tab[m] then7tab[m] ← tab[m − c] + 18return tab[M]911
  19. 19. Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . +∞m 40c12
  20. 20. Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . +∞m 40c 512
  21. 21. Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 3m 40c 1012
  22. 22. Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 3m 40c 2012
  23. 23. Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 2m 40c 2512
  24. 24. Exemple et complexitétab0 1 15 200 +∞ . . . 2 . . . 130 35 40. . . 2 . . . 2 . . . 2mcL’algorithme fonctionne de manière ascendanteAlgorithme de complexité temporelle O(Md)Il exploite le fait que la valeur ChangeM ne dépend que decelles de Changem pour m < M12
  25. 25. Comparaison des complexités051015202530350 10 20 30 40 50Nombre d’opérations élémentaires en fonction de MChangeRecChangeDPVersion récursive en O(Md)Version programmation dynamique en O(Md)13
  26. 26. Obtenir les dénominations des piècesIl suffit d’ajouter un tableau qui stocke une pièce :Input : M une quantité d’argent positiveOutput : Nombre minimal de pièces à rendre pour former Mtab ← new Array[M + 1]1tab[0] ← 02denom ← new Array[M + 1]3for m ← 1 to M do4tab[m] ← +∞5foreach c ∈ Coins do6if m ≥ c then7if tab[m − c] + 1 < tab[m] then8tab[m] ← tab[m − c] + 19denom[m] ← c10return tab[M]1114
  27. 27. Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDistance d’éditionAlgorithme CKY15
  28. 28. Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDistance d’éditionAlgorithme CKY16
  29. 29. Algorithme de ViterbiUtilisé pour résoudre le problème du décodage sur un modèlede Markov caché (HMM)Problème du décodageSoit un HMM M = (Q, Σ, π, a, b) et une séquence d’observationsO = o0, o1, · · · , oT−1 , le problème du décodage consiste àtrouver la séquence d’état q = q0, q1, · · · , qT−1 la plus probablequi a généré la séquence d’observations O.17
  30. 30. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)18
  31. 31. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?18
  32. 32. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)18
  33. 33. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS18
  34. 34. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS · bS,il18
  35. 35. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS · bS,il · aS,V18
  36. 36. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS · bS,il · aS,V · bV ,combat18
  37. 37. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS·bS,il ·aS,V ·bV ,combat ·aV ,C18
  38. 38. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS · bS,il · aS,V · bV ,combat ·aV ,C · bC,Florence18
  39. 39. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS · bS,il · aS,V · bV ,combat ·aV ,C · bC,Florence · ωC18
  40. 40. Tagging basé sur les HMMsSV C00.70.10.20.10.40.10.20.3P(il) = 0.5P(combat) = 0.1P(Florence) = 0.4P(il) = 0.1P(combat) = 0.8P(Florence) = 0.1P(il) = 0.3P(combat) = 0.1P(Florence) = 0.6Q = (S, V , C)π = (0.6, 0.3, 0.1)ω = (0.4, 0.3, 0.4)O = il, combat, Florenceq = ?P(S, V , C; il, combat, Florence)= πS · bS,il · aS,V · bV ,combat ·aV ,C · bC,Florence · ωC= 0.01612818
  41. 41. Définition récursive du problèmeδt(i) est la meilleure probabilité d’être sur l’état i au temps titi − 1ii + 1t − 1. . .. . .. . .t − 2δt−1(i − 1)δt−1(i + 1)δt−1(i)ai−1,iai,iai+1,i19
  42. 42. Définition récursive du problèmeδt(i) est la meilleure probabilité d’être sur l’état i au temps titi − 1ii + 1t − 1. . .. . .. . .t − 2δt−1(i − 1)δt−1(i + 1)δt−1(i)ai−1,iai,iai+1,iδt(i) = maxj∈Qδt−1(j) · aj,i · bi,ot19
  43. 43. Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :Input : M = (Q, Σ, π, ω, a, b), O = o0, o1, · · · , oT−1Output : Probabilité de la séquence d’états la + probable pour Ofor i ← 0 to n − 1 do1δ0(i) ← πi · bi,o02for t ← 1 to T − 1 do3for i ← 0 to n − 1 do4δt(i) ← −∞5for j ← 0 to n − 1 do6if δt−1(j) · aj,i · bi,ot > δt(i) then7δt(i) ← δt−1(j) · aj,i · bi,ot8return maxj∈Qωj · δT−1(j)920
  44. 44. Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :maxj∈Qδt−1(j) · aj,i · bi,otInput : M = (Q, Σ, π, ω, a, b), O = o0, o1, · · · , oT−1Output : Probabilité de la séquence d’états la + probable pour Ofor i ← 0 to n − 1 do1δ0(i) ← πi · bi,o02for t ← 1 to T − 1 do3for i ← 0 to n − 1 do4δt(i) ← −∞5for j ← 0 to n − 1 do6if δt−1(j) · aj,i · bi,ot > δt(i) then7δt(i) ← δt−1(j) · aj,i · bi,ot8return maxj∈Qωj · δT−1(j)920
  45. 45. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 × × ×12∗21
  46. 46. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×12∗δ0(S) = πS · bS,il = 0.3δ0(V ) = πV · bV ,il = 0.15δ0(C) = πC · bC,il = 0.0521
  47. 47. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 V2∗δ1(S) = maxδ0(S) · aS,S · bS,combat = 0δ0(V ) · aV ,S · bS,combat = 0.003δ0(C) · aC,S · bS,combat = 0.000521
  48. 48. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 0.168 V S2∗δ1(V ) = maxδ0(S) · aS,V · bV ,combat = 0.168δ0(V ) · aV ,V · bV ,combat = 0.012δ0(C) · aC,V · bV ,combat = 0.00821
  49. 49. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 0.168 0.006 V S V2∗δ1(C) = maxδ0(S) · aS,C · bC,combat = 0.003δ0(V ) · aV ,C · bC,combat = 0.006δ0(C) · aC,C · bC,combat = 0.001521
  50. 50. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 0.168 0.006 V S V2 0.01344 V∗δ2(S) = maxδ1(S) · aS,S · bS,Florence = 0δ1(V ) · aV ,S · bS,Florence = 0.01344δ1(C) · aC,S · bS,Florence = 0.0002421
  51. 51. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 0.168 0.006 V S V2 0.01344 0.00168 V V∗δ2(V ) = maxδ1(S) · aS,V · bV ,Florence = 0.00021δ1(V ) · aV ,V · bV ,Florence = 0.00168δ1(C) · aC,V · bV ,Florence = 0.0001221
  52. 52. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 0.168 0.006 V S V2 0.01344 0.00168 0.04032 V V V∗δ2(C) = maxδ1(S) · aS,C · bC,Florence = 0.00018δ1(V ) · aV ,C · bC,Florence = 0.04032δ1(C) · aC,C · bC,Florence = 0.0010821
  53. 53. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 0.168 0.006 V S V2 0.01344 0.00168 0.04032 V V V∗ 0.005376 0.000504 0.016128ω = (0.4, 0.3, 0.4)δ∗ = ωC · δ2(C)φ2(C) = Vφ1(V ) = S ⇒ q = S, V , C21
  54. 54. Exemple et complexitéSoit la séquence d’observations O = il, combat, Florencet δt(S) δt(V ) δt(C) φt(S) φt(V ) φt(C)0 0.3 0.15 0.05 × × ×1 0.003 0.168 0.006 V S V2 0.01344 0.00168 0.04032 V V V∗ 0.005376 0.000504 0.016128ω = (0.4, 0.3, 0.4)δ∗ = ωC · δ2(C)φ2(C) = Vφ1(V ) = S ⇒ q = S, V , CComplexité temporelle O(Tn2)21
  55. 55. Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDistance d’éditionAlgorithme CKY22
  56. 56. Distance d’éditionUtilisée pour mesurer la distance entre deux séquencesOpération d’éditionUne opération d’édition est une (x, y) ∈ (Σ ∪ {−}) × (Σ ∪ {−})x = − et y ∈ Σ (insertion)x ∈ Σ et y = − (délétion)x, y ∈ Σ et x = y (substitution)Distance d’éditionSoient deux séquences a et b et une fonction de coutw : (Σ ∪ {−}) × (Σ ∪ {−}) → RLa distance d’édition dw (a, b) = minS(w(S) | a ⇒S b) avec S uneséquence d’opérations d’édition23
  57. 57. Spellcheck basé sur la distance d’éditionMITSY24
  58. 58. Spellcheck basé sur la distance d’éditionMITSYEMITSY(−, E)24
  59. 59. Spellcheck basé sur la distance d’éditionMITSYEMITSYEDITSY(−, E)(M, D)24
  60. 60. Spellcheck basé sur la distance d’éditionMITSYEMITSYEDITSYEDITS(−, E)(M, D)(Y , −)24
  61. 61. Spellcheck basé sur la distance d’éditionMITSYEMITSYEDITSYEDITS(−, E)(M, D)(Y , −)-MITSYEDITS-24
  62. 62. Définition récursive du problèmed(ε, ε) = 0 (ε est la chaine vide)d(s, ε) = d(ε, s) = |s| (|s| est la longueur de s)d(s1 · · · sn, t1 · · · tm) =mind(s1 · · · sn, t1 · · · tm−1) + 1 (insertion)d(s1 · · · sn−1, t1 · · · tm) + 1 (délétion)d(s1 · · · sn−1, t1 · · · tm−1) + (1 − δsntm ) (substitution)s1 · · · sn tmt1 · · · tm−1 tms1 · · · sn−1 snt1 · · · tms1 · · · sn−1 snt1 · · · tm−1 tm25
  63. 63. Algorithme en programmation dynamiqueCalcul de la distance d’édition entre les chaines s et t avec|s| = n et |t| = m et fonction de cout w = 1Utilisation d’une matrice M de taille (n + 1) × (m + 1)M[i, j] contient la distance d’édition pour passer du mots1 · · · si ou mot t1 · · · tjM[0, 0] = 0 d(ε, ε) = 0M[i, 0] = i d(s1 · · · si , ε) = iM[0, j] = j d(ε, t1 . . . tj) = jM[i, j] = minM[i, j − 1] + 1M[i − 1, j] + 1M[i − 1, j − 1] + (1 − δsi tj )26
  64. 64. Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :Input : s = s1 · · · sn et t = t1 · · · tmOutput : Distance d’édition d(s, t)M ← new Array[n + 1][m + 1]1for i ← 0 to n do M[i][0] ← i2for j ← 0 to m do M[0][j] ← j3for i ← 1 to n do4for j ← 1 to m do5M[i][j] ← M[i][j − 1] + 16if M[i − 1][j] + 1 < M[i][j] then7M[i][j] ← M[i − 1][j] + 18if M[i − 1][j − 1] + (1 − δsi sj ) < M[i][j] then9M[i][j] ← M[i − 1][j − 1] + (1 − δxi yj )10return M[m][n]1127
  65. 65. Algorithme en programmation dynamiqueUne version de l’algorithme en programmation dynamique :minM[i][j − 1] + 1M[i − 1][j]M[i − 1][j − 1] + (1 − δsi tj )Input : s = s1 · · · sn et t = t1 · · · tmOutput : Distance d’édition d(s, t)M ← new Array[n + 1][m + 1]1for i ← 0 to n do M[i][0] ← i2for j ← 0 to m do M[0][j] ← j3for i ← 1 to n do4for j ← 1 to m do5M[i][j] ← M[i][j − 1] + 16if M[i − 1][j] + 1 < M[i][j] then7M[i][j] ← M[i − 1][j] + 18if M[i − 1][j − 1] + (1 − δsi sj ) < M[i][j] then9M[i][j] ← M[i − 1][j − 1] + (1 − δxi yj )10return M[m][n]1127
  66. 66. Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1E 2N 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑E ↑N ↑T ↑I ↑L ↑28
  67. 67. Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1E 2N 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑ տE ↑N ↑T ↑I ↑L ↑M[1][1] =M[1][0] + 1M[0][1] + 1M[0][0] + (1 − δGP)G → P =(G → ε) + 1(ε → P) + 1(ε → ε) + 128
  68. 68. Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2N 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑ տ տ← տ← տ← տ←E ↑ տ↑ տ ←N ↑T ↑I ↑L ↑M[2][3] =M[2][2] + 1M[1][3] + 1M[1][2] + (1 − δET )GE → PET =(GE → PE) + 1(G → PET) + 1(G → PE) + 128
  69. 69. Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2 3 4N 3 3T 4I 5L 6ε P E T I Tε ← ← ← ← ←G ↑ տ տ← տ← տ← տ←E ↑ տ↑ տ ← ← ←N ↑ տ↑T ↑I ↑L ↑M[3][1] =M[3][0] + 1M[2][1] + 1M[2][0] + (1 − δNP)GEN → P =(GEN → ε) + 1(GE → P) + 1(GE → ε) + 128
  70. 70. Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2 3 4N 3 3 2 2 3 4T 4 4 3 2 3 3I 5 5 4 3 2L 6ε P E T I Tε ← ← ← ← ←G ↑ տ տ← տ← տ← տ←E ↑ տ↑ տ ← ← ←N ↑ տ↑ ↑ տ տ← տ←T ↑ տ↑ ↑ տ տ← տI ↑ տ↑ ↑ ↑ տL ↑M[5][4] =M[5][3] + 1M[4][4] + 1M[4][3] + (1 − δII)GENTI → PETI =(GENTI → PET) + 1(GENT → PETI + 1(GENT → PET) + 028
  71. 71. Exemple et complexitéε P E T I Tε 0 1 2 3 4 5G 1 1 2 3 4 5E 2 2 1 2 3 4N 3 3 2 2 3 4T 4 4 3 2 3 3I 5 5 4 3 2 3L 6 6 5 4 3 3ε P E T I Tε ← ← ← ← ←G ↑ տ տ← տ← տ← տ←E ↑ տ↑ տ ← ← ←N ↑ տ↑ ↑ տ տ← տ←T ↑ տ↑ ↑ տ տ← տI ↑ տ↑ ↑ ↑ տ ←L ↑ տ↑ ↑ ↑ ↑ տGENTILPE-TITComplexité temporelle O(nm)28
  72. 72. Plan1 IntroductionLe problème du ChangeProgrammation dynamique2 Application à des problèmes en TALAlgorithme de ViterbiDistance d’éditionAlgorithme CKY29
  73. 73. Algorithme CKYAnalyseur syntaxique basé sur une approche bottom-upS’applique aux grammaires hors-contexte (type 2 Chomsky)données en forme normale de Chomsky (CNF). Les règles sontde deux formes :S → ABS → aCalcule toutes les interprétations possibles de toutes lessous-séquences de la séquence d’entrée30
  74. 74. Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN La fille aime le mauveDet N V Det N31
  75. 75. Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN La fille aime le mauveDet N V Det NX131
  76. 76. Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN La fille aime le mauveDet N V Det NSN SN31
  77. 77. Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN La fille aime le mauveDet N V Det NSN SNS31
  78. 78. Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN La fille aime le mauveDet N V Det NSN SNSV31
  79. 79. Analyse syntaxique d’une phraseS → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN La fille aime le mauveDet N V Det NSN SNSVS31
  80. 80. Définition récursive du problème IÉviter de réanalyser plusieurs fois les mêmes sous-séquencesChaine abc · · · à analyser de la forme 0 a 1 b 2 c 3 · · ·Tableau carré contenant n lignes et colonnes (n = longueur dela chaine)1 2 3 · · ·012...L’entrée (i, j) correspond à lasous-chaine commençant en iet se finissant en j32
  81. 81. Définition récursive du problème IIMot à analyser : w1w2 · · · wnCas de base : Mot wi , P[i − 1][i] ∪= {S}, avec S → wiCas récursif : Sous-chaine wi , · · · , wj , il faut analyser toutesles découpes de la sous-chaine : wi , · · · , wk , · · · , wj33
  82. 82. Algorithme en programmation dynamiquePour une grammaire G = N, Σ, P, S , tester si une chainew = w1, · · · , wn appartient à L(G)Input : G = N, Σ, P, S et w = w1, · · · , wnOutput : w ∈ L(G)P ← new Array[n + 1][n + 1]1for i ← 1 to n do2if X → wi ∈ P then3P[i − 1][i] ← P[i − 1][i] ∪ {X}4for j ← 1 to n do5for i ← j − 2 downto 0 do6for k ← i + 1 to j − 1 do7if X → A B ∈ G ∧ A ∈ P[i][k] ∧ B ∈ P[k][j] then8P[i][j] ← P[i][j] ∪ {X}9return S ∈ P[n + 1][n + 1]1034
  83. 83. Algorithme en programmation dynamiquePour une grammaire G = N, Σ, P, S , tester si une chainew = w1, · · · , wn appartient à L(G)On cherche les décompositions dewi+1, · · · , wj avec S → A B dansla grammaire et A ⇒ wi+1; · · · wket B ⇒ wk+1; · · · wjInput : G = N, Σ, P, S et w = w1, · · · , wnOutput : w ∈ L(G)P ← new Array[n + 1][n + 1]1for i ← 1 to n do2if X → wi ∈ P then3P[i − 1][i] ← P[i − 1][i] ∪ {X}4for j ← 1 to n do5for i ← j − 2 downto 0 do6for k ← i + 1 to j − 1 do7if X → A B ∈ G ∧ A ∈ P[i][k] ∧ B ∈ P[k][j] then8P[i][j] ← P[i][j] ∪ {X}9return S ∈ P[n + 1][n + 1]1034
  84. 84. Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN1 2 3 4 5 6 7 80 Det1 N2 V3 Det4 N5 Prep6 Det7 N35
  85. 85. Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → Det NSN → X1 SNPX1 → Det NX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN1 2 3 4 5 6 7 80 Det SN, X11 N2 V3 Det4 N5 Prep6 Det7 NA : 0 Le 1 B : 1 chat 235
  86. 86. Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN1 2 3 4 5 6 7 80 Det SN, X11 N2 V3 Det4 N5 Prep6 Det7 NA : 1 chat 2 B : 2 mange 335
  87. 87. Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN1 2 3 4 5 6 7 80 Det SN, X11 N2 V3 Det4 N5 Prep6 Det7 NA : 0 Le 1 B : 1 chat 2 mange 335
  88. 88. Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN1 2 3 4 5 6 7 80 Det SN, X1 S1 N2 V3 Det4 N5 Prep6 Det7 NA : 0 Le 1 chat 2 B : 2 mange 335
  89. 89. Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 8S → SN SVS → SN VSN → Det NSN → X1 SNPX1 → Det NSNP → Prep SNSV → V SNSV → X2 SNPX2 → V SN1 2 3 4 5 6 7 80 Det SN, X1 S S S1 N2 V SV , X2 SV , X23 Det SN, X1 SN4 N5 Prep SNP6 Det SN, X17 N35
  90. 90. Exemple et complexité0 Le 1 chat 2 mange 3 la 4 souris 5 dans 6 le 7 jardin 81. S → SN SV2. S → SN V3. SN → Det N4. SN → X1 SNP5. X1 → Det N6. SNP → Prep SN7. SV → V SN8. SV → X2 SNP9. X2 → V SN1 2 3 4 5 6 7 80Det SN, X1 S S S(1, 5) (2) (1) (1)1N2V SV , X2 SV , X2(7, 9) (7/8, 9)3Det SN, X1 SN(3, 5) (4)4N5Prep SNP(6)6Det SN, X1(3, 5)7NComplexité temporelle O(n3)35
  91. 91. ConclusionProgrammation dynamique adaptée pour :Des problèmes décomposables en sous-problèmesLes sous-problèmes se chevauchentUne solution au problème est une composition des solutionsaux sous-problèmesLe principe consiste à :Procéder de manière ascendanteStocker les résultats intermédiaires36

×