Parsing grammar tanpa konteks kalebu nganalisis urutan simbol miturut sakumpulan aturan produksi sing ditemtokake dening grammar. Proses iki penting ing macem-macem bidang ilmu komputer, kalebu keamanan siber, amarga ngidini kita ngerti lan ngapusi data terstruktur. Ing jawaban iki, kita bakal njlèntrèhaké algoritma kanggo parsing grammar tanpa konteks lan ngrembug kerumitan wektu.
Algoritma sing paling umum digunakake kanggo parsing grammar tanpa konteks yaiku algoritma CYK, dijenengi miturut panemune Cocke, Younger, lan Kasami. Algoritma iki adhedhasar pemrograman dinamis lan ngoperasikake prinsip parsing ngisor. Iku mbangun tabel parse sing makili kabeh parses bisa kanggo substrings saka input.
Algoritma CYK dianggo kaya ing ngisor iki:
1. Initialize tabel parse karo dimensi nxn, ngendi n punika dawa senar input.
2. Kanggo saben simbol terminal ing senar input, isi ing sel sing cocog ing tabel parse karo simbol nonterminal sing gawé.
3. Kanggo saben substring dawa l saka 2 kanggo n, lan saben posisi wiwitan i saka 1 kanggo n-l+1, tindakake ing ngisor iki:
a. Kanggo saben titik partisi p saka i nganti i+l-2, lan saben aturan produksi A -> BC, priksa manawa sel (i, p) lan (p+1, i+l-1) ngemot simbol nonterminal B lan C , mungguh. Yen mangkono, tambahake A menyang sel (i, i + l-1).
4. Yen simbol wiwitan grammar ana ing sel (1, n), string input bisa dijupuk saka grammar. Yen ora, ora bisa.
Kompleksitas wektu algoritma CYK yaiku O(n^3 * |G|), ing ngendi n yaiku dawa string input lan |G| punika ukuran grammar. Kompleksitas iki muncul saka puteran nested sing digunakake kanggo ngisi tabel parse. Algoritma kasebut mriksa kabeh titik partisi lan aturan produksi kanggo saben dawa substring, nyebabake kerumitan wektu kubik.
Kanggo nggambarake algoritma kasebut, nimbang grammar tanpa konteks ing ngisor iki:
S -> AB | BC
A -> AA | a
B -> AB | b
C -> BC | c
Lan senar input "abc". Tabel parse kanggo conto iki bakal katon kaya ing ngisor iki:
| 1 | 2 | 3 |
——-|—–|—–|—–|
1 | A, S | B, C | S |
——-|—–|—–|—–|
2 | | B, C | A |
——-|—–|—–|—–|
3 | | | C |
——-|—–|—–|—–|
Ing tabel iki, sel (1, 3) ngemot simbol wiwitan S, nuduhake yen string input "abc" bisa diturunake saka grammar sing diwenehake.
Algoritma kanggo parsing grammar tanpa konteks, kayata algoritma CYK, ngidini kita nganalisa lan ngerti data terstruktur. Makaryakke kanthi mbangun tabel parse lan mriksa derivasi sing bener miturut aturan produksi grammar. Kompleksitas wektu algoritma CYK yaiku O(n^3 * |G|), ing ngendi n yaiku dawa string input lan |G| punika ukuran grammar.
Pitakonan lan jawaban anyar liyane babagan Review ujian:
- Punapa punika prabédan antarane masalah path lan masalah path Hamiltonian, lan apa sing terakhir kagungane kelas kerumitan NP?
- Napa saben basa tanpa konteks ing kelas P, sanajan wektu paling awon ing algoritma parsing yaiku O(N^3)?
- Nerangake masalah path lan carane bisa ditanggulangi nggunakake algoritma menehi tandha.
- Apa definisi kelas kompleksitas P ing teori kompleksitas komputasi?

