Algorytm Cocke-Younger-Kasami

W teoretycznej informatyki i teorii języka The algorytm Cocke-Younger-Kasami ( cyk ) jest algorytm do analizowania dla gramatyk bezkontekstowych , opublikowane przez Itiroo Sakai w 1961 roku w celu ustalenia, czy słowo jest generowane przez gramatyki, a jeżeli tak, aby dać drzewo składni . Algorytm został nazwany na cześć trzech osób, które niezależnie go odkryły, J. Cocke, którego artykuł nigdy nie został opublikowany, DH Youngera i T. Kasami, którzy opublikowali wewnętrzny raport w US-AirForce.

Algorytm działa na zasadzie analizy oddolnej i wykorzystuje programowanie dynamiczne . Algorytm zakłada, że ​​gramatyka jest w normalnej postaci Chomsky'ego . To ograniczenie nie stanowi problemu, ponieważ każda gramatyka niekontekstowa dopuszcza równoważną gramatykę postaci normalnej Chomsky'ego. Czas obliczania tego algorytmu jest w , gdzie jest długością słowa do analizy i jest rozmiarem gramatyki.

Zasada

Bez utraty ogólności zakładamy, że gramatyka nie generuje pustego słowa . Zatem możemy założyć, że gramatyka jest w normalnej formie Chomsky'ego i nie zawiera żadnych reguł dotyczących formy (mówimy o gramatyce właściwej, patrz gramatyka bezkontekstowa ).

Lub niepuste słowo do analizy. Algorytm wykorzystuje programowanie dynamiczne. Podproblemy to: jest zbiorem nieterminali, które generują słowo dla wszystkich takich, gdzie gdzie jest długością słowa .

Możemy obliczyć zbiory przez indukcję .

Rysunek po prawej stronie przedstawia przypadek podstawowy i przypadek rekurencyjny.

Wyprowadzamy algorytm programowania dynamicznego, który oblicza wszystkie zestawy . Słowo jest generowane przez gramatykę wtedy i tylko wtedy, gdy jest tam, gdzie jest aksjomatem gramatyki i jest długością słowa .


Przykład

Rozważ następującą gramatykę w normalnej formie Chomsky'ego:


gdzie jest zbiór nieterminali i zestaw terminali (liter) . Tutaj „ona” nazywana jest literą (chociaż jest to słowo), a wyrażenie takie jak „ona je widelcem” nazywa się słowem.

Teraz przeanalizujmy słowo, które jest frazą „zjada rybę widelcem” za pomocą algorytmu CYK. W poniższej tabeli wskazujemy wartości  :

P [1, 7] = {S}
P [1, 6] = ø P [2, 7] = {GV}
P [1, 5] = ø P [2, 6] = ø P [3, 7] = ø
P [1, 4] = S P [2, 5] = ø P [3, 6] = ø P [4, 7] = ø
P [1, 3] = ø P [2, 4] = {GV} P [3, 5] = ø P [4, 6] = ø P [5, 7] = {C}
P [1, 2] = {S} P [2, 3] = ø P [3, 4] = {GN} P [4, 5] = ø P [5, 6] = ø P [6, 7] = {GN}
P [1, 1] = {GN} P [2, 2] = {V, GV} P [3, 3] = {Det} P [4, 4] = {N} P [5, 5] = {P} P [6, 6] = {Det} P [7, 7] = {N}
to jeść z ryba z za widelec

Słowo „zjada rybę widelcem” jest rozpoznawane, ponieważ aksjomat jest w środku .

Pseudo kod

Oto pseudokod zainspirowany analizą z poprzedniej sekcji:

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.

Możemy podać pseudokod, który pokazuje sześcienną złożoność poprzez  :

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.

Dyskusje

Gramatyki ważone

Jeśli gramatyka jest ważona , algorytm CYK umożliwia wygenerowanie najcięższego drzewa, które generuje zdanie.

Zainteresowanie normalnym formatowaniem Chomsky'ego

Ograniczenie gramatyki w normalnej formie Chomsky'ego jest przede wszystkim estetyczne, a Lange i Leiß omawiają wariant algorytmu CYK ze słabszymi ograniczeniami.

Powiązanie z mnożeniem macierzy

Algorytm CYK jest w , gdzie jest długością słowa do analizy i jest rozmiarem gramatyki postaci normalnej Chomsky'ego. Valiant daje przedłużenie algorytm cyk poprzez dostosowanie STRASSEN „s algorytm na macierzach .

Używając algorytmu Coppersmitha-Winograda do pomnożenia macierzy, osiągamy asymptotyczną złożoność równą . Ale stała ukryta w dużym zapisie O oznacza, że ​​algorytm nie jest interesujący w praktyce. Zależności od wydajnego algorytmu mnożenia macierzy nie można uniknąć w następującym sensie: Lee pokazał, że można zbudować algorytm mnożący w czasie macierze o wielkości 0-1 z analizatora dla gramatyk bezkontekstowych w formacie .

Demonstracje

Uwagi i odniesienia

  1. (w) Itiroo Sakai, „Składnia w tłumaczeniu uniwersalnym” w 1961 r. Międzynarodowa konferencja na temat tłumaczenia maszynowego języków i stosowanej analizy językowej, Teddington, Anglia , t.  II, Londyn, Her Majesty's Stationery Office,1962, s.  593-608.
  2. (w) Dick Grune, analiza techniczna: praktyczny przewodnik , Nowy Jork, Springer,2008, 2 II  wyd. ( ISBN  978-0-387-20248-8 ) , s.  579.
  3. Według Hopcrofta, Motwaniego i Ullmana praca J. Cocke, mimo iż była rozpowszechniana prywatnie, nigdy nie została opublikowana.
  4. DH Younger, „  Rozpoznawanie i analizowanie języków bezkontekstowych w czasie n 3  ”, Informacje i kontrola , t.  10 N O  21967, s.  189-208.
  5. T. Kasami, „  Efektywny algorytm rozpoznawania i analizy składni dla języków bezkontekstowych  ”, Raport naukowy AFCRL-65-758 , Bedford, Mass., Air Force Cambridge Research Laboratory,1965.
  6. (w) Sipser, Michael, Wprowadzenie do teorii obliczeń (wyd. 1) ,1997( ISBN  978-0-534-94728-6 ).
  7. Víctor M. Jiménez i Andrés Marzal, „  Computation of the N Best Parse Trees for Weighted and Stochastic Context-Free Grammars  ”, Advances in Pattern Recognition , Springer Science + Business Media,2000, s.  183-192 ( ISBN  978-3-540-67946-2 , ISSN  0302-9743 , DOI  10.1007 / 3-540-44522-6_19 , czytaj online ).
  8. Xian Chen, „  Weighted-CYK-Probabilistic-Context-Free-Grammar  ”, na GitHub ,marzec 2015.
  9. Martin Lange, Hans Leiß, „  Do CNF czy nie do CNF? Efektywna, ale prezentowalna wersja algorytmu CYK  ”, Informatica Didactica 8, 2009.
  10. „  Ogólne bezkontekstowe rozpoznawanie w czasie krótszym niż sześcienny  ” , na stronie www.sciencedirect.com ( DOI  10.1016 / S0022-0000 (75) 80046-8 , dostęp: 29 grudnia 2015 ) .
  11. Don Coppersmith i Shmuel Winograd . Mnożenie macierzy przez progresje arytmetyczne. Materiały z XIX dorocznego sympozjum ACM na temat teorii informatyki , strony 1–6, 1987.
  12. (w) Donald Knuth, The Art of Computer Programming Tom 2: Seminumerical Algorithms (3rd ed.). Addison-Wesley Professional. p. 501. , Reading (Mass.), Addison-Wesley, 762  str. ( ISBN  978-0-201-89684-8 , uwaga BnF n o  FRBNF37532795 ).
  13. Lillian Lee , „  Szybka analiza gramatyki bez kontekstu wymaga szybkiego mnożenia macierzy boolowskiej  ”, J. ACM , vol.  49,1 st styczeń 2002, s.  1-15 ( ISSN  0004-5411 , DOI  10.1145 / 505241.505242 , czytaj online , dostęp: 29 grudnia 2015 ).

Bibliografia

Algorytm jest eksponowany w pracach teoretycznych dotyczących języków formalnych.

Zobacz też

<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">