Kok-Yngre-Kasami-algoritme

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 25. januar 2021; checks kræver 5 redigeringer .

Cocke -Younger-  Kasami - algoritmen , CYK-  eller CKY - algoritmen ,  er en algoritme , der giver dig mulighed for at bestemme, om det er muligt at vise en given streng i en given kontekstfri grammatik , og i givet fald give dens output. Med andre ord er det en strengparsingalgoritme . Algoritmen implementerer bottom-up-parsing og er baseret på den dynamiske programmeringsmetode . dets opdagere: John Cock, Daniel Younger, Tadao Kasami og Jacob T. Schwartz. De brugte bottom-up analyse og dynamisk programmering.

Standardversionen af ​​CYK fungerer kun med kontekstfri grammatik givet i normal form (CNF). Enhver kontekstfri grammatik kan dog konverteres (efter konvertering) til en CNF-grammatik, der udtrykker det samme sprog ( Sipser 1997 ).

Det er en af ​​de mest effektive parsing-algoritmer med hensyn til worst-case asymptotisk kompleksitet , selvom der er andre algoritmer med bedre gennemsnitlige udførelsestider i mange praktiske scenarier [1] .

Beskrivelse

Algoritmen fungerer som følger: ved første trin skrives et ord i den første linje, og hvert ikke-terminaltegn tilføjes til linjen, hvorunder terminaltegnene vises. Derefter er det for hver celle i gitteret nødvendigt at gå lodret fra top til bund til den markerede celle og den anden celle op diagonalt. For hvert sådant trin kombineres og kontrolleres cellerne for at finde kombinationen i grammatikken. Hvis den findes, føjes den venstre ikke-terminal til gittercellen. Hvis starttegnet efter alle trin er indeholdt i den sidste linje, kan ordet fås fra den givne grammatik [2] .

Den dynamiske programmeringsalgoritme kræver , at den kontekstfri grammatik konverteres til Chomsky Normal Form (CNF), fordi den kontrollerer, om den aktuelle sekvens kan opdeles i to mindre sekvenser. Enhver kontekstfri grammatik, der ikke producerer en tom streng, kan repræsenteres i CNF ved hjælp af produktionsregler [3] .

Pseudokode

I pseudokode ser algoritmen sådan ud:

CYK-algoritme: givet en streng S på n tegn: a 1 ... a n . givet en grammatik indeholdende r ikke-terminale symboler R 1 ... R r . Indeholder et undersæt R s af begyndelsestegn. def array P [ n , n , r ] af booleske værdier initialiseret til False. for hver i = 1 : n for hver produktion R j -> a i tildele P [ 1 , i , j ] = Sand for hver i = 2 : n er intervallængden for hver j = 1 : n - i +1 - - begyndelsen af ​​intervallet for hver k = 1 : i -1 er partitionen af ​​intervallet for hver produktion RA -> R B R C hvis P [ k , j , B ] og P [ i - k , j + k , C ] så tildel P [ i , j , A ] = Sand , hvis for nogle x fra mængden s P [n, 1 , x ] = Sand, hvor s er alle indekser af R s , så returnerer S tilhører sproget ellers hører retur S ikke til sproget

Se også

Noter

  1. John E. Hopcroft. Introduktion til automatteori, sprog og beregning . - Reading, Mass.: Addison-Wesley, 1979. - x, 418 sider s. - ISBN 0-201-02988-X , 978-0-201-02988-8.
  2. CYK-algoritmen • Datalogi og maskinlæring . www.xarg.org . Hentet: 4. oktober 2022.
  3. Michael Sipser. Introduktion til teorien om beregning . — 2. udg. - Boston: Thomson Course Technology, 2006. - xix, 431 sider s. - ISBN 0-534-95097-3 , 978-0-534-95097-2.

Litteratur