Kontekstivaba grammatika sõelumine hõlmab sümbolite jada analüüsimist vastavalt grammatika poolt määratletud tootmisreeglitele. See protsess on arvutiteaduse erinevates valdkondades, sealhulgas küberjulgeolekus, põhiline, kuna võimaldab meil mõista struktureeritud andmeid ja nendega manipuleerida. Selles vastuses kirjeldame kontekstivaba grammatika sõelumise algoritmi ja käsitleme selle ajalist keerukust.
Kõige sagedamini kasutatav algoritm kontekstivaba grammatika sõelumiseks on CYK-algoritm, mis sai nime selle leiutajate Cocke'i, Youngeri ja Kasami järgi. See algoritm põhineb dünaamilisel programmeerimisel ja töötab alt-üles parsimise põhimõttel. See koostab sõelumistabeli, mis esindab kõiki võimalikke sisendi alamstringide parse.
CYK-algoritm töötab järgmiselt:
1. Initsialiseerige sõelumistabel mõõtmetega nxn, kus n on sisendstringi pikkus.
2. Sisendstringi iga terminalisümboli jaoks täitke parsimistabeli vastav lahter seda genereerivate mitteterminaalsete sümbolitega.
3. Iga alamstringi pikkuse l jaoks vahemikus 2 kuni n ja iga lähtepositsiooni i jaoks vahemikus 1 kuni n-l+1 tehke järgmist.
a. Iga jaotuspunkti p i kuni i+l-2 ja iga tootmisreegli A -> BC jaoks kontrollige, kas lahtrid (i, p) ja (p+1, i+l-1) sisaldavad mitteterminaalseid sümboleid B ja C , vastavalt. Kui jah, lisage lahtrisse A (i, i+l-1).
4. Kui lahtris (1, n) esineb grammatika algussümbol, saab sisendstringi grammatikast tuletada. Vastasel juhul ei saa.
CYK-algoritmi ajaline keerukus on O(n^3 * |G|), kus n on sisendstringi pikkus ja |G| on grammatika suurus. See keerukus tuleneb pesastatud tsüklitest, mida kasutatakse sõelumistabeli täitmiseks. Algoritm uurib kõiki võimalikke jaotuspunkte ja tootmisreegleid iga alamstringi pikkuse jaoks, mille tulemuseks on kuupmeetriline ajaline keerukus.
Algoritmi illustreerimiseks kaaluge järgmist kontekstivaba grammatikat:
S -> AB | eKr
A -> AA | a
B -> AB | b
C -> eKr | c
Ja sisestusstring "abc". Selle näite sõelumistabel näeks välja järgmine:
| 1 | 2 | 3 |
——-|—–|—–|—–|
1 | A,S | B,C | S |
——-|—–|—–|—–|
2 | | B,C | A |
——-|—–|—–|—–|
3 | | | C |
——-|—–|—–|—–|
Selles tabelis sisaldab lahter (1, 3) algussümbolit S, mis näitab, et antud grammatikast saab tuletada sisendstringi "abc".
Kontekstivaba grammatika parsimise algoritm, näiteks CYK-algoritm, võimaldab meil analüüsida ja mõista struktureeritud andmeid. See toimib, koostades sõelumistabeli ja kontrollides kehtivaid tuletusi vastavalt grammatika tootmisreeglitele. CYK-algoritmi ajaline keerukus on O(n^3 * |G|), kus n on sisendstringi pikkus ja |G| on grammatika suurus.
Muud hiljutised küsimused ja vastused selle kohta Keerukus:
- Kas klass PSPACE ei ole võrdne klassiga EXPSPACE?
- Kas P keerukusklass on PSPACE klassi alamhulk?
- Kas saame tõestada, et Np ja P klass on samad, leides tõhusa polünoomlahenduse mis tahes NP täielikule probleemile deterministlikul TM-il?
- Kas NP klass võib olla võrdne klassiga EXPTIME?
- Kas PSPACE-s on probleeme, mille jaoks pole teadaolevat NP-algoritmi?
- Kas SAT-probleem võib olla NP täielik probleem?
- Kas probleem võib olla NP keerukuse klassis, kui on olemas mittedeterministlik tuurimismasin, mis lahendab selle polünoomilise aja jooksul
- NP on keelte klass, millel on polünoomilise aja kontrollijad
- Kas P ja NP on tegelikult sama keerukusklass?
- Kas P keerukusklassis on iga kontekstivaba keel?
Vaadake rohkem küsimusi ja vastuseid jaotises Komplekssus