Algoritmus CYK - CYK algorithm
v počítačová věda, Algoritmus Cocke – Younger – Kasami (alternativně nazývané CYKnebo CKY) je analýza algoritmus pro bezkontextové gramatiky vynalezl Ichirō Sakai.[1] Algoritmus je pojmenován po některých svých nově objevitelích: John Cocke, Daniel Younger a Tadao Kasami. Zaměstnává to analýza zdola nahoru a dynamické programování.
Standardní verze CYK funguje pouze na bezkontextových gramatikách uvedených v Chomsky normální forma (CNF). Libovolná bezkontextová gramatika však může být transformována (po konvenci) na gramatiku CNF vyjadřující stejný jazyk (Sipser 1997 ).
Důležitost algoritmu CYK vyplývá z jeho vysoké účinnosti v určitých situacích. Použitím Velká O notace, nejhorší doba provozu CYK je , kde je délka analyzovaného řetězce a je velikost gramatiky CNF (Hopcroft & Ullman 1979, str. 140). Díky tomu je jedním z nejúčinnějších algoritmů syntaktické analýzy, pokud jde o nejhorší případ asymptotická složitost, ačkoli v mnoha praktických scénářích existují jiné algoritmy s lepší průměrnou dobou chodu.
Standardní forma
The dynamické programování Algoritmus vyžaduje vykreslení bezkontextové gramatiky Chomsky normální forma (CNF), protože testuje možnosti rozdělení aktuální sekvence na dvě menší sekvence. Libovolnou bezkontextovou gramatiku, která negeneruje prázdný řetězec, lze v CNF reprezentovat pouze pomocí výrobní pravidla formulářů a .
Algoritmus
Jako pseudokód
Algoritmus v pseudo kód je následující:
nechat vstup je řetězec Já skládající se z n postavy: A1 ... An.nechat gramatika obsahuje r neterminální symboly R1 ... Rr, se symbolem zahájení R1.nechat P[n,n,r] být pole booleovců. Inicializujte všechny prvky P na falešný.pro každého s = 1 až n pro každého jednotková výroba Rproti → As soubor P[1,s,proti] = pravdapro každého l = 2 až n - Délka rozpětí pro každého s = 1 až n-l+1 - Začátek rozpětí pro každého str = 1 až l-1 - Rozdělení rozpětí pro každého Výroba RA → Rb RC -li P[str,s,b] a P[l-str,s+str,C] pak soubor P[l,s,A] = pravda-li P[n,1,1] je pravda pak Já je členem jazykajiný Já není členem jazyka
Pravděpodobnostní CYK (pro nalezení nejpravděpodobnější analýzy)
Umožňuje obnovit nejpravděpodobnější analýzu s ohledem na pravděpodobnosti všech produkcí.
nechat vstup bude řetězec Já skládající se z n postavy: A1 ... An.nechat gramatika obsahuje r neterminální symboly R1 ... Rr, se symbolem zahájení R1.nechat P[n,n,r] být pole reálných čísel. Inicializujte všechny prvky P na nulu.nechat zadní[n,n,r] být pole zpětně ukazujících trojic.pro každého s = 1 až n pro každého jednotková výroba Rproti →As soubor P[1,s,proti] = Pr (Rproti →As)pro každého l = 2 až n - Délka rozpětí pro každého s = 1 až n-l+1 - Začátek rozpětí pro každého str = 1 až l-1 - Rozdělení rozpětí pro každého Výroba RA → Rb RC prob_splitting = Pr (RA →Rb RC) * P[str,s,b] * P[l-str,s+str,C] -li P[str,s,b]> 0 a P[l-str,s+str,C]> 0 a P[l,s,A]pak soubor P[l,s,A] = prob_splitting soubor zadní[l,s,A] =
Jako próza
Neformálně tento algoritmus zohledňuje všechny možné podřetězce vstupního řetězce a sad být pravdivý, pokud je podřetězec délky začínající od lze generovat z neterminální proměnné . Jakmile vezme v úvahu podřetězce délky 1, přejde k podřetězcům délky 2 atd. U podřetězců délky 2 a větší zvažuje každé možné rozdělení podřetězce na dvě části a kontroluje, zda existuje nějaká výroba takhle odpovídá první části a odpovídá druhé části. Pokud ano, zaznamená jako shoda s celým podřetězcem. Jakmile je tento proces dokončen, věta je gramatikou rozpoznána, pokud je podřetězec obsahující celý vstupní řetězec uzavřen počátečním symbolem.
Příklad

Toto je příklad gramatiky:
Nyní ta věta jí vidličkou rybu je analyzována pomocí algoritmu CYK. V následující tabulce v , i je číslo řádku (počínaje spodní částí číslem 1) a j je číslo sloupce (počínaje vlevo od 1).
S | ||||||
VP | ||||||
S | ||||||
VP | PP | |||||
S | NP | NP | ||||
NP | V, VP | Det. | N | P | Det | N |
ona | jí | A | Ryba | s | A | Vidlička |
Pro čitelnost tabulka CYK pro P je zde znázorněna jako 2-rozměrná matice M obsahující sadu neterminálních symbolů Rk je v pokud, a pouze pokud, .Ve výše uvedeném příkladu, protože počáteční symbol S je v , věta může být generována gramatikou.
Rozšíření
Generování stromu analýzy
Výše uvedený algoritmus je a rozpoznávač to určí pouze to, zda je věta v jazyce. Je jednoduché jej rozšířit na a analyzátor který také konstruuje a analyzovat strom, uložením uzlů parse stromu jako prvků pole, namísto booleovské 1. Uzel je propojen s prvky pole, které byly použity k jeho vytvoření, aby se vytvořila stromová struktura. Pokud má být vytvořen pouze jeden analyzovaný strom, je v každém prvku pole potřeba pouze jeden takový uzel. Pokud však mají být zachovány všechny parsovací stromy nejednoznačné věty, je nutné uložit do prvku pole seznam všech způsobů, jak lze získat odpovídající uzel v procesu syntaktické analýzy. To se někdy děje s druhou tabulkou B [n, n, r] tzv zpětné ukazateleKonečným výsledkem je pak sdílený les možných analyzovaných stromů, kde se mezi různé analýzy analyzují společné části stromů. Tuto sdílenou doménovou strukturu lze pohodlně číst jako nejednoznačná gramatika generování pouze rozebrané věty, ale se stejnou nejednoznačností jako původní gramatika a se stejnými parsovacími stromy až po velmi jednoduché přejmenování jiných než terminálů, jak ukazuje Lang (1994).
Analýza gramatik bez kontextu bez CNF
Jak zdůraznil Lange & Leiß (2009) Nevýhodou všech známých transformací do Chomského normální formy je, že mohou vést k nežádoucímu nafouknutí ve velikosti gramatiky. Velikost gramatiky je součtem velikostí jejích produkčních pravidel, kde velikost pravidla je jedna plus délka jeho pravé strany. Použitím pro označení velikosti původní gramatiky se může v nejhorším případě zvětšit velikost na , v závislosti na použitém transformačním algoritmu. Pro použití ve výuce navrhují Lange a Leiß mírné zobecnění algoritmu CYK, „aniž by byla ohrožena účinnost algoritmu, jasnost jeho prezentace nebo jednoduchost důkazů“ (Lange & Leiß 2009 ).
Analýza vážených gramatik bez kontextu
Je také možné rozšířit algoritmus CYK tak, aby analyzoval řetězce pomocí vážený a stochastické bezkontextové gramatiky. Váhy (pravděpodobnosti) jsou poté uloženy v tabulce P namísto booleanů, takže P [i, j, A] bude obsahovat minimální váhu (maximální pravděpodobnost), kterou lze podřetězec z i do j odvodit z A. Další rozšíření Algoritmus umožňuje výčet všech analýz řetězce od nejnižší po nejvyšší váhu (nejvyšší po nejnižší pravděpodobnost).
Valiantův algoritmus
The nejhorší doba provozu CYK je , kde n je délka analyzovaného řetězce a |G| je velikost gramatiky CNF G. Díky tomu je v praxi jedním z nejúčinnějších algoritmů pro rozpoznávání obecných bezkontextových jazyků. Valiant (1975) dal rozšíření algoritmu CYK. Jeho algoritmus vypočítává stejnou analýzu jako algoritmus CYK; přesto to ukázal algoritmy pro efektivní množení z matice s 0-1 vstupy lze použít k provedení tohoto výpočtu.
Za použití Coppersmith – Winogradův algoritmus pro vynásobení těchto matic to dává asymptotickou nejhorší dobu běhu . Konstantní výraz skrytý v Velká O notace je tak velký, že algoritmus Coppersmith – Winograd je vhodný pouze pro matice, které jsou příliš velké na to, aby je bylo možné zpracovat na současných počítačích (Knuth 1997 ), a tento přístup vyžaduje odečtení, a proto je vhodný pouze pro rozpoznávání. Nelze se zcela vyhnout závislosti na účinném násobení matic: Lee (2002) prokázal, že jakýkoli analyzátor pro bezkontextové gramatiky pracující v čase lze efektivně převést na algoritmus počítající produkt produktu -matrice s 0-1 vstupy v čase .
Viz také
Reference
- ^ Grune, Dick (2008). Techniky analýzy: praktický průvodce (2. vyd.). New York: Springer. ISBN 978-0-387-20248-8.
Zdroje
- Cocke, Johne; Schwartz, Jacob T. (duben 1970). Programovací jazyky a jejich překladače: Úvodní poznámky (PDF) (Technická zpráva) (2. přepracované vydání). CIMS, NYU.
- Hopcroft, John E.; Ullman, Jeffrey D. (1979). Úvod do teorie automatů, jazyků a výpočtu. Čtení / MA: Addison-Wesley. ISBN 0-201-02988-X.CS1 maint: ref = harv (odkaz)
- Kasami, T. (1965). Efektivní algoritmus rozpoznávání a analýzy syntaxe pro bezkontextové jazyky (Technická zpráva). AFCRL. 65-758.
- Knuth, Donald E. (14. listopadu 1997). The Art of Computer Programming Volume 2: Seminumerical Algorithms (3. vyd.). Addison-Wesley Professional. p. 501. ISBN 0-201-89684-2.CS1 maint: ref = harv (odkaz)
- Lang, Bernard (1994). "Rozpoznání může být těžší než analýza". Comput. Intell. 10 (4): 486–494. CiteSeerX 10.1.1.50.6982. doi:10.1111 / j.1467-8640.1994.tb00011.x.CS1 maint: ref = harv (odkaz)
- Lange, Martin; Leiß, Hans (2009). „Do CNF nebo ne do CNF? Efektivní, přesto prezentovatelná verze algoritmu CYK“. Informatica Didactica. 8.CS1 maint: ref = harv (odkaz)
- Lee, Lillian (2002). "Rychlá analýza gramatiky bez kontextu vyžaduje rychlé násobení booleovských matic". J. ACM. 49 (1): 1–15. arXiv:cs / 0112018. doi:10.1145/505241.505242.CS1 maint: ref = harv (odkaz)
- Sipser, Michael (1997). Úvod do teorie výpočtu (1. vyd.). IPS. p.99. ISBN 0-534-94728-X.CS1 maint: ref = harv (odkaz)
- Valiant, Leslie G. (1975). "Obecné bezkontextové rozpoznávání za méně než kubický čas". J. Comput. Syst. Sci. 10 (2): 308–314. doi:10.1016 / s0022-0000 (75) 80046-8.CS1 maint: ref = harv (odkaz)
- Mladší, Daniel H. (únor 1967). "Rozpoznávání a analýza bezkontextových jazyků v čase n3". Informovat. Řízení. 10 (2): 189–208. doi:10.1016 / s0019-9958 (67) 80007-x.