« Algorithme de Cocke-Younger-Kasami » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Rehtse (discuter | contributions)
m v1.37 - Correction syntaxique (Section « Notes et références » manquante - Numéro ISBN : syntaxe erronée)
ManiacParisien (discuter | contributions)
+ Références biblio
Ligne 1 : Ligne 1 :
{{Ébauche|informatique}}
{{Ébauche|informatique}}
En [[informatique théorique]] et en [[théorie des langages]], l''''algorithme de Cocke-Younger-Kasami''' ('''CYK''') est un [[algorithme]] d'[[analyse syntaxique]] pour les [[Grammaire non contextuelle|grammaires non contextuelles]]. Il permet de déterminer si un mot est engendré par une grammaire, et si oui, d'en donner un [[arbre syntaxique]].
En [[informatique théorique]] et en [[théorie des langages]], l''''algorithme de Cocke-Younger-Kasami''' ('''CYK''') est un [[algorithme]] d'[[analyse syntaxique]] pour les [[Grammaire non contextuelle|grammaires non contextuelles]]. Il permet de déterminer si un mot est engendré par une grammaire, et si oui, d'en donner un [[arbre syntaxique]]. L'algorithme est nommé d'après les trois personnes qui l'ont trouvé indépendamment, J. Cocke, dont l'article n'a jamais été publié<ref name="Cocke" />, D. H. Younger<ref name="Younger" /> et T. Kasami qui a publié un rapport interne aux US-AirForce<ref name="Kasami />.


L'algorithme opère par analyse ascendante et emploie la [[programmation dynamique]]. L'algorithme suppose que la grammaire est en [[forme normale de Chomsky]]. Cette restriction n'est pas gênante dans la mesure où toute grammaire non contextuelle admet une grammaire en forme normale de Chomsky équivalente<ref>{{Ouvrage|langue = anglais|auteur1 = Sipser, Michael|titre = Introduction to the Theory of Computation (1st ed.)|lieu = |éditeur = |année = 1997|pages totales = |isbn = 0-534-94728-X|lire en ligne = |passage = }}</ref>. Le temps de calcul de cet algorithme est en <math>O(|m|^3 \cdot |G|)</math>, où <math>|m|</math> est la longueur du mot <math>m</math> à analyser et <math>|G|</math> est la taille de la grammaire.
L'algorithme opère par analyse ascendante et emploie la [[programmation dynamique]]. L'algorithme suppose que la grammaire est en [[forme normale de Chomsky]]. Cette restriction n'est pas gênante dans la mesure où toute grammaire non contextuelle admet une grammaire en forme normale de Chomsky équivalente<ref>{{Ouvrage|langue = anglais|auteur1 = Sipser, Michael|titre = Introduction to the Theory of Computation (1st ed.)|lieu = |éditeur = |année = 1997|pages totales = |isbn = 0-534-94728-X|lire en ligne = |passage = }}</ref>. Le temps de calcul de cet algorithme est en <math>O(|m|^3 \cdot |G|)</math>, où <math>|m|</math> est la longueur du mot <math>m</math> à analyser et <math>|G|</math> est la taille de la grammaire.
Ligne 52 : Ligne 52 :


== Notes et références ==
== Notes et références ==
{{Références}}
{{Références|références=
<ref name="Cocke">D'apres Hopcroft, Motwani et Ullman, le travail de J. Cocke, bien qu’il ait circulé de façon privée, n’a jamais été publié.
</ref>
<ref name="Younger">{{article|auteur = D. H. Younger| titre = Recognition and parsing of context-free languanges in time ''n''<sup>3</sup>|journal= Information and Control|volume= 10|numéro=2 |année=1967| pages 189-208}}.
</ref>
<ref name="Kasami">{{article|auteur= T. Kasami |titre= An efficient recognition and syntax-analysis algorithm for context-free languages|journal= Science Report AFCRL-65-758|éditeur= Air Force Cambridge Research Laboratory|lieu= Bedford, Mass.|année= 1965}}.
</ref>
}}

== Bibliographie ==
L'algorithme est exposé dans les ouvrages théorique sur les langages formels.
<!-- Aho -->
* {{Ouvrage | langue = fr | auteur1 = Alfred Aho | auteur2 = Monica Lam | auteur3 = Ravi Sethi | auteur4 = Jeffrey Ullman | titre = Compilateurs : principes, techniques et outils | sous-titre = Avec plus de 200 exercices | éditeur = Pearson | lieu = | numéro édition = 2 |année = 2007 | pages totales = 928 | isbn = 9782744070372 | isbn2 = 2744070378}} {{commentaire biblio SRL|Exercice 4.4.9 du [[Dragon book]]}}.
<!-- Erk Priese -->
* {{Ouvrage | langue = de | auteur1 = Katrin Erk | auteur2 = Lutz Priese | titre = Theoretische Informatik : eine umfassende Einführung | éditeur = Springer | lieu = Berlin | année = 2008 | pages totales = | isbn = 9783540763192 | oclc = 244015158}} {{commentaire biblio SRL| 6.8.1 Das Wortproblem, {{p.|154-159}}}}.
<!-- Harrison -->
* {{Ouvrage | langue = en | auteur = Michael A. Harrison | titre = Introduction to Formal Language Theory | éditeur = Addison-Wesley | lieu = Reading, Mass. [u.a.] | année = 1978 | pages totales = | isbn = 0201029553 | oclc = 266962302}} {{commentaire biblio SRL|Section 12.4 The Cocke-Kasami-Younger Algorithm, {{p.|430-442}}}}.
<!-- Hopcroft -->
* {{Ouvrage | langue = en | auteur1 = John E. Hopcroft | auteur2 = Rajeev Motwani | auteur3 = Jeffrey D. Ullman | titre = Introduction to Automata Theory, Languages, and Computation | éditeur = Addison Wesley | numéro d’édition = 2 |lieu = | année = 2001 | pages totales = 521 | isbn = 9780201441246 | isbn2 = 0201441241}} {{commentaire biblio SRL| Section 7.4.4 Testing Membership in a CFL, {{p. |298-304}}}}.
<!-- Linz -->
* {{Ouvrage | langue = en | auteur = Peter Linz | titre = An Introduction to Formal Languages and Automata | éditeur = Jones & Bartlett Learning | lieu = | année = 2001 | pages totales = 410 | isbn = 9780763714222 | isbn2 = 0763714224}} {{commentaire biblio SRL|Section 6.3 A Membership Algorithm for Context Free Grammars, {{p.|172-174}}}}.
<!-- Shallit -->
* {{Ouvrage | langue = en | auteur = Jeffrey Shallit | titre = A Second Course in Formal Languages and Automata Theory | éditeur = Cambridge University Press | lieu = | année = 2009 | pages totales = 240 | isbn = 9780521865722 | isbn2 = 0521865727}} {{commentaire biblio SRL|Section 5.1 Recognition and parsing in general grammars {{p.| 141-144}}}}


== Voir aussi ==
== Voir aussi ==
[[Analyse Earley]]
* [[Analyse Earley]]


{{portail|Algorithmique|Informatique théorique}}
{{portail|Algorithmique|Informatique théorique}}

Version du 26 décembre 2015 à 18:02

En informatique théorique et en théorie des langages, l'algorithme de Cocke-Younger-Kasami (CYK) est un algorithme d'analyse syntaxique pour les grammaires non contextuelles. Il permet de déterminer si un mot est engendré par une grammaire, et si oui, d'en donner un arbre syntaxique. L'algorithme est nommé d'après les trois personnes qui l'ont trouvé indépendamment, J. Cocke, dont l'article n'a jamais été publié[1], D. H. Younger[2] et T. Kasami qui a publié un rapport interne aux US-AirForce[3].

L'algorithme opère par analyse ascendante et emploie la programmation dynamique. L'algorithme suppose que la grammaire est en forme normale de Chomsky. Cette restriction n'est pas gênante dans la mesure où toute grammaire non contextuelle admet une grammaire en forme normale de Chomsky équivalente[4]. Le temps de calcul de cet algorithme est en , où est la longueur du mot à analyser et est la taille de la grammaire.

Principe

L'algorithme emploie la programmation dynamique. Sans perte de généralité, on suppose que la grammaire n'engendre pas le mot vide . Ainsi, on peut supposer que la grammaire est forme normale de Chomsky et qu'elle ne contient pas de règles de la forme (on parle de grammaire propre, voir grammaire non contextuelle). Soit un mot non vide à analyser. Les sous-problèmes sont les suivants : est l'ensemble des non-terminaux qui engendrent le mot pour tout tels que est la longueur du mot .

Principe de l'algorithme CYK : cas de base et cas récursif

On peut calculer les ensembles par récurrence sur .

  • Cas de base : est l'ensemble des non-terminaux tel que est une règle de la grammaire.
  • Cas récursif : Si , est l'ensemble des non-terminaux tels qu'il existe une règle et sont des non-terminaux et un entier tels que est dans et est dans .

La figure à droite montre le cas de base et le cas récursif.

On en déduit un algorithme de programmation dynamique qui calcule tous les ensembles . Le mot est engendré par la grammaire si et seulement si est dans est l'axiome de la grammaire et est la longueur du mot .

Pseudo-code

Voici un pseudo-code inspiré de l'analyse de la section précédente :

Pour i = 1 à 
     := ensemble des non-terminaux  tel que  est une règle de la grammaire
Pour d = 1 à 
    Pour i = 1 à -d
         j := i+d
          := ensemble des non-terminaux  tels qu'il existe une règle  et un entier  tels que
                                 est dans  et  est dans 

Retourne oui si  est dans  ; non sinon.

On peut donner un pseudo-code qui montre la complexité cubique en  :

Pour i = 1 à 
     := ensemble des non-terminaux  tel que  est une règle de la grammaire
Pour d = 1 à 
    Pour i = 1 à -d
         j := i+d
          := ensemble vide
         Pour tout k = i à j-1
                  Pour tout  est dans  et  est dans 
                            Pour tout non-terminal  tel que  est une règle
                                  Ajouter  à 
Retourne oui si  est dans  ; non sinon. 

Variantes

Si la grammaire est pondérée, l'algorithme de CYK permet de générer l'arbre le plus lourd qui engendre la phrase.[réf. nécessaire]

La restriction qui consiste à avoir une grammaire en forme normale de Chomsky est essentiellement esthétique et Lange et Leiß [5] discutent une variante de l'algorithme CYK avec des restrictions plus faibles.

Démonstrations

Notes et références

  1. D'apres Hopcroft, Motwani et Ullman, le travail de J. Cocke, bien qu’il ait circulé de façon privée, n’a jamais été publié.
  2. D. H. Younger, « Recognition and parsing of context-free languanges in time n3 », Information and Control, vol. 10, no 2,‎ .
  3. T. Kasami, « An efficient recognition and syntax-analysis algorithm for context-free languages », Science Report AFCRL-65-758, Bedford, Mass., Air Force Cambridge Research Laboratory,‎ .
  4. (en) Sipser, Michael, Introduction to the Theory of Computation (1st ed.), (ISBN 0-534-94728-X)
  5. Lange, Martin; Leiß, Hans (2009). "To CNF or not to CNF? An Efficient Yet Presentable Version of the CYK Algorithm". Informatica Didactica 8.

Bibliographie

L'algorithme est exposé dans les ouvrages théorique sur les langages formels.

  • Alfred Aho, Monica Lam, Ravi Sethi et Jeffrey Ullman, Compilateurs : principes, techniques et outils : Avec plus de 200 exercices, Pearson, , 2e éd., 928 p. (ISBN 9782744070372 et 2744070378) — Exercice 4.4.9 du Dragon book.
  • (de) Katrin Erk et Lutz Priese, Theoretische Informatik : eine umfassende Einführung, Berlin, Springer, (ISBN 9783540763192, OCLC 244015158) — 6.8.1 Das Wortproblem, p. 154-159.
  • (en) Michael A. Harrison, Introduction to Formal Language Theory, Reading, Mass. [u.a.], Addison-Wesley, (ISBN 0201029553, OCLC 266962302) — Section 12.4 The Cocke-Kasami-Younger Algorithm, p. 430-442.
  • (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison Wesley, , 521 p. (ISBN 9780201441246 et 0201441241) — Section 7.4.4 Testing Membership in a CFL, p. 298-304.
  • (en) Peter Linz, An Introduction to Formal Languages and Automata, Jones & Bartlett Learning, , 410 p. (ISBN 9780763714222 et 0763714224) — Section 6.3 A Membership Algorithm for Context Free Grammars, p. 172-174.
  • (en) Jeffrey Shallit, A Second Course in Formal Languages and Automata Theory, Cambridge University Press, , 240 p. (ISBN 9780521865722 et 0521865727) — Section 5.1 Recognition and parsing in general grammars p. 141-144

Voir aussi