APLIKASI PROGRAM DINAMIS DALAM ALGORITMA COCKE- YOUNGER -KASAMI (CYK)

dokumen-dokumen yang mirip
BAB V CONTEXT FREE GRAMMAR DAN PUSH DOWN AUTOMATA

BAB 1 PENDAHULUAN. 1.1 Latar Belakang Masalah

Teknik Kompiler 7. oleh: antonius rachmat c, s.kom

Pemodelan CNF Parser dengan Memanfaatkan Pohon Biner

BAB I PENDAHULUAN 1-1

Aplikasi Rekursif dalam Analisis Sintaks Program

Pencarian Solusi Optimal dalam Permainan Congklak dengan Program Dinamis

Tata Bahasa Kelas Tata Bahasa. Konsep Bahasa (1)

Optimalisasi Susunan Tempat Duduk Kereta Api Menggunakan Algoritma Greedy dan Program Dinamis

BAB 1 PENDAHULUAN 1.1. Latar Belakang Masalah

TEORI BAHASA DAN OTOMATA [TBO]

TEORI BAHASA DAN OTOMATA [TBO]

Implementasi Pencocokan String Tidak Eksak dengan Algoritma Program Dinamis

Penyederhanaan Tata Bahasa Bebas Konteks dalam Bentuk Normal Chomsky Menggunakan PHP

TATA BAHASA BEBAS KONTEKS (CONTEXT FREE GRAMMAR)

TEORI BAHASA DAN OTOMATA [TBO]

Penyelesaian Sum of Subset Problem dengan Dynamic Programming

Analisis Sintaksis (syntactic analyzer atau parser)

PENYEDERHANAAN Context Free Grammar

POHON PENURUNAN Context Free Grammar

Translasi Context-Free Grammar Menjadi Parsing Tree Berbasis Algoritma Cocke-Younger-Kasami

Jurnal Ilmiah Komputer dan Informatika (KOMPUTA) Edisi Volume Bulan20.. ISSN :

TEORI BAHASA DAN AUTOMATA

Algoritma Puzzle Pencarian Kata

TEKNIK KOMPILASI Konsep & Notasi Bahasa

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

Penerapan Algoritma Program Dinamis pada Penyejajaran Sekuens dengan Algoritma Smith Waterman

Eksplorasi Algoritma Brute Force, Greedy, dan Dynamic Programming untuk Persoalan Integer Knapsack

Teori Bahasa Formal dan Automata

BAB I PENDAHULUAN. memiliki tata bahasa dan aturan yang lebih luas dan luwes, sehingga tidak

Sumarni Adi TEKNIK INFORMATIKA STMIK AMIKOM YOGYAKARTA 2013

Penyelesaian Persoalan Penukaran Uang dengan Program Dinamis

Penggunaan Pohon Huffman Sebagai Sarana Kompresi Lossless Data

TEORI BAHASA DAN AUTOMATA

TEKNIK KOMPILASI. Firrar Utdirartatmo

SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

Studi Algoritma Optimasi dalam Graf Berbobot

Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra

SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

Lecture Notes Teori Bahasa dan Automata

Penggunaan Algoritma Divide and Conquer Dalam Pewarnaan Graf

1, 2, 3

BAB IV ANALISA SINTAKS

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Solusi Terbaik Permainan Rocket Mania Deluxe dengan Pendekatan Algoritma BFS dan Algoritma Greedy

TUGAS MAKALAH INDIVIDUAL. Mata Kuliah : Matematika Diskrit / IF2153 Nama : Dwitiyo Abhirama NIM :

APLIKASI PROGRAM DINAMIS DALAM ALGORITMA COCKE- YOUNGER-KASAMI DAN ALGORITMA NEEDLEMAN-WUNSCH

Aplikasi Algoritma Dijkstra dalam Pencarian Lintasan Terpendek Graf

IF-UTAMA 1. Definisi. Grammar. Definisi

PERBANDINGAN KOMPLEKSITAS ALGORITMA PENCARIAN BINER DAN ALGORITMA PENCARIAN BERUNTUN

Penerapan Graf Transisi dalam Mendefinisikan Bahasa Formal

Penerapan Algoritma Greedy untuk Memecahkan Masalah Pohon Merentang Minimum

Pemanfaatan Pohon dalam Realisasi Algoritma Backtracking untuk Memecahkan N-Queens Problem

BAB II TINJAUAN PUSTAKA. Bahasa menurut kamus Websters adalah the body of words and methods of

RENCANA PROGRAM KEGIATAN PERKULIAHAN SEMESTER (RPKPS)

Pendekatan Dynamic Programming untuk Menyelesaikan Sequence Alignment

Analisa Keputusan Manajemen dengan Pemrograman Dinamis

Aplikasi Algoritma B&B untuk Memperoleh Poin Maksimum pada Permainan Diner Dash

MODUL MATA KULIAH TEORI BAHASA DAN OTOMATA DOSEN:

RENCANA PEMBELAJARAN SEMESTER

Penerapan Algoritma Brute Force pada Teka-teki Magic Square 3 x 3

PERBANDINGAN ALGORITMA GREEDY DAN BRUTE FORCE DALAM SIMULASI PENCARIAN KOIN

Teori Bahasa Formal dan Automata

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

Penerapan strategi runut-balik dalam penyelesaian permainan puzzle geser

TEKNIK KOMPILASI. Dosen : Dwi Retno Wahyuningsih, S. Kom. Jurusan : Teknik Informatika Semester Genap 2007/2008

TEORI BAHASA & OPERASI MATEMATIS (2)

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Implementasi Greedy Dalam Menemukan Rangkaian Logika Minimal Menggunakan Karnaugh Map

Penerapan Program Dinamis dalam Algoritma Cocke- Younger-Kasami dan Earley untuk Pemrosesan Bahasa Natural

Implementasi Pemrograman Dinamis dalam Pencarian Solusi Permainan Menara Hanoi

Teorema Cayley pada Pohon Berlabel dan Pembuktiannya

PENGANTAR OTOMATA DAN KOMPILASI

UNIVERSITAS GUNADARMA

Hirarki Comsky. Unrestricted. Context Sensitive Context free Regular

Penerapan Greedy pada Jalan Jalan Di Bandung Yuk! V1.71

Teknik Kompilasi. Notasi Bahasa

Penggunaan Struktur Data Pohon Berakar dalam XML

Penentuan Lintasan Terbaik Dengan Algoritma Dynamic Programming Pada Fitur Get Driving Directions Google Maps

IMPLEMENTASI ALGORITMA COCKE-YOUNGER-KASAMI (CYK) DAN LEVENSHTEIN UNTUK MENGOREKSI KESALAHAN PENGEJAAN KALIMAT BAHASA INGGRIS SKRIPSI

Algoritma Heap Sort. Sekolah Teknik Elektro & Informatika Departemen Teknik Informatika, Institut Teknologi Bandung Jl. Ganesha 10, Bandung

Pembangkit Kunci Acak pada One-Time Pad Menggunakan Fungsi Hash Satu-Arah

Algoritma Divide and Conquer untuk Optimasi Pemberian Efek Aura pada Permainan DotA (Defense of the Ancient)

Teori Bahasa & Otomata

Menentukan Susunan Terbaik Tim Proyek dengan Algoritma Branch and Bound

Teori Komputasi 11/23/2016. Bab 6: Context-Free Grammar & Parsing. Context-Free Grammar. Context-Free Grammar

TEORI BAHASA & OTOMATA (PENGENALAN KOMPILASI) PERTEMUAN VI Y A N I S U G I Y A N I

BAB I TEORI BAHASA DAN AUTOMATA

Kode Huffman dan Penggunaannya dalam Kompresi SMS

PENGGUNAAN ALGORITMA BRANCH AND BOUND UNTUK MENYELESAIKAN PERSOALAN PENCARIAN JALAN (PATH-FINDING)

PERANCANGAN SISTEM PERBAIKAN ERROR KODE SUMBER PROGRAM OTOMATIS

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

SILABUS MATAKULIAH. Indikator Pokok Bahasan/Materi Aktifitas Pembelajaran

anggota alfabet dinamakan simbol terminal atau token.

ALGORITMA PEMROGRAMAN 1C SINTAKS

Penggunaan Algoritma Runut-balik Pada Pencarian Solusi dalam Persoalan Magic Square

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

Penerapan Algoritma Brute Force dalam mencari Faktor Prima pada suatu Bilangan

Analisis dan Strategi Algoritma

PENEMPATAN KANTOR POS DENGAN ALGORITMA PROGRAM DINAMIS

Transkripsi:

APLIKASI PROGRAM DINAMIS DALAM ALGORITMA COCKE- YOUNGER -KASAMI (CYK) Inas Luthfi 1) NIM 13506019 1) Jurusan Teknik Informatika ITB, Jalan Ganesha 10 Bandung Indonesia 40132 email: if16019@students.if.itb.ac.id ABSTRAK Algoritma Cocke-Younger-Kasami (CYK) adalah algoritma untuk menentukan apakah suatu untai (string) dapat diterima oleh suatu Bahasa-Bebas- Konteks (Context Free Grammar CFG)[1]. CFG yang diterima oleh algoritma CYK yang diterangkan dalam makalah ini adalah CFG dalam bentuk norma Chomsky Normal Form (CNF). Apabila suatu untai dapat diterima, dipaparkan tahapan algoritma CYK untuk menyelesaikan permasalahan ini. Algoritma yang akan dibahas merupakan metode yang umum digunakan dalam teori otomata dan bahasa formal terutama di bidang desain kompiler bahasa pemrograman. Proses parsing untai dengan algoritma CYK memanfaatkan struktur data sebuah array dua dimensi dan merupakan aplikasi Pemrograman Dinamis (Program Dinamis) karena proses parsing memanfaatkan hasil parsing sebelumnya untuk memutuskan apakah proses yang sedang berlangsung dapat diterima maupun tidak. Dalam makalah ini akan dibahas sebuah contoh pembentukan array dengan CYK yang merupakan algoritma terdiri dari banyak iterasi kolom-baris, kemudian digambarkan pohon parsing yang dapat dibentuk dari array tersebut. Kata kunci: Cocke-Younger-Kasami, CYK, CFG, CNF Program Dinamis 1. PENDAHULUAN 1.1 Bahasa Formal Dalam teori Otomata dan Bahasa Formal sekaligus desain kompiler, terdapat pendekatan untuk memetakan struktur suatu bahasa menjadi tata bahasa yang lebih formal. Sejak tahun 1950-an para ahli bahasa telah mempelajari struktur bahasa natural manusia seperti bahasa Inggris dan memetakan tata bahasanya secara formal. Setalah itu pada tahun 1960-an dimana teknik komputasi dan komputer mulai banyak dikembangkan, muncullah bahasa pemrograman untuk menjembatani antara programmer dengan mesin komputer agar mempermudah programmer membuat sebuah program yang memiliki fungsionalitas tertentu. Pada dekade tersebut, muncul banyak metode untuk mendesain bahasa pemrograman beserta kompilernya, sehingga pada dekade-dekade tersebut, penelitian tentang bahasa formal banyak dilakukan dan kuliah tentang teori otomata dan bahasa formal di bidang ilmu komputer dianggap sangat penting. 1.2 Context Free Grammar dan Chomsky Normal Form Terinspirasi dari bahasa natural manusia, ilmuwanilmuwan ilmu komputer yang mengembangkan bahasa pemrograman, turut serta memberikan tata bahasa (pemrograman) secara formal. Tata bahasa ini diciptakan secara bebas-konteks dan disebut CFG (Context Free Grammar). Hasilnya, dengan pendekatan formal ini, kompiler suatu bahasa pemrograman dapat dibuat lebih mudah dan menghindari ambiguitas ketika parsing bahasa tersebut. Contoh desain CFG untuk parser semisal : B -> BB (B) e untuk mengenali bahasa dengan hanya tanda kurung { (, ) } sebagai terminal-nya. Proses parsing adalah proses pembacaan untai dalam bahasa sesuai CFG tertentu, proses ini harus mematuhi aturan produksi dalam CFG tersebut. Secara formal, CFG didefinisikan[2]: CFG G=(V,T,P,S) Dimana V adalah daftar variabel produksi T, adalah daftar simbol atau terminalyang dipakai dalam CFG P, adalah aturan produksi CFG S, adalah variabel start aturan produksi CFG dapat dinormalkan dengan pola tersendiri supaya tidak ambigu dan lebih sederhana, meskipun normalisasi CFG kadang membuat aturan produksi menjadi lebih banyak dari sebelumnya. Teknik normalisasi yang digunakan dalam makalah ini adalah CNF (Chomsky Normal Form).

Gambar 1. Gambaran parsing bahasa natural (Inggris) Contoh desain CNF dari bahasa CFG, semisal CFG berikut: S -> aa bb (1) A-> Baa ba B -> baa ab CFG (1) tersebut ekivalen dengan CFG dibawah ini, dimana symbol terminal memiliki variabel produksi tersendiri: S -> DA EB (2) A -> BDD ED B -> EAA DE D -> a E -> b CNF yang dihasilkan dari CFG (2) diatas ialah: S -> DA EB (3) A -> BF ED B -> EH DE F -> DD H -> AA D -> a E -> b Setelah terbentuk CFG yang telah dinormalkan secara CNF, dalam implementasi parsing, terdapat algoritma yang berguna untuk menentukan apakah suatu untai valid, atau dapat diciptakan dari aturan-aturan CFG yang ada. Salah satu algoritma yang dapat dipakai adalah Algoritma Cocke-Younger-Kasami (CYK). Algoritma ini menyelesaikan masalah analisa kembali sebuah sub-untai yang sama karena seharusnya analisa sub-untai independen terhadap parsing sub-untai yang diparsing setelahnya. Dengan Program Dinamis, independensi yang diinginkan dapat dicapai ketika parsing. Algoritma CYK termasuk dalam bidang Program Dinamis karena algoritma ini membangun tabel status dua dimensi ketika parsing dimana penentuan parsing selanjutnya diturunkan atau dihasilkan dari parsing sebelumnya, hingga akhir untai. Selain untuk mengetahui validitas untai dalam suatu CFG, algoritma CYK yang dimodifikasi dapat dipergunakan pula untuk membangun pohon parsing. Gambar 2. Pohon parsing yang terbentuk dari sebuah bahasa natural 2. METODE 2.1 Program Dinamis Program Dinamis adalah metode pemecahan masalah dengan cara menguraikan solusi menjadi sekumpulan langkah (step) atau tahapan (stage) sedemikian sehingga solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling berkaitan [3]. Dalam Program Dinamis, sebuah persoalan dapat diselesaikan dengan metode yang memiliki ciri: 1. Terdapat sejumlah berhingga pilihan yang mungkin 2. Solusi pada setiap tahap dibangun dari hasil solusi tahap sebelumnya 3. Menggunakan persyaratan optimasi dan kendala untuk membatasi sejumlah pilihan yang harus dipertimbangkan setiap tahap 4. Jika solusi total optimal, maka bagian solusi sampai tahap ke-k juga optimal Algoritma yang membentuk solusi secara bertahap selain Program Dinamis adalah algoritma Greedy, namun hal yang membedakan dengan Program Dinamis adalah daam Program Dinamis rangkaian keputusan yang pernah dihasilkan tidak hanya satu buah seperti layaknya Greedy.[3] Pendekatan awal algoritma Program Dinamis untuk pengecekan validitas untai dalam suatu CFG pertama secara sistematis mengisi array atau tabel solusi dari permasalahan yang lebih kecil (memorization) setelah semua solusi permasalahan seleai diakumulasi dalam tabel, selesaikan permasalahan sebenarnya dari mengkomposisi solusi yang sudah ada. Dalam hal parsing untai, permasalahan lebih kecil yang dimaksud adalah setiap simbol dalam untai, dan tabel yang digunakan untuk mencatat solusi dinamakan chart. Chart berisi constituent (upapohon) yang telah ditemukan sebelumnya, yang di-indeks sesuai indeks simbol didalam untai[4]. Proses pembentukan Chart memiliki algoritma tersendiri, dalam makalah ini, algoritma yang akan dibahas adalah algoritma CYK.

2.2 Algoritma Cocke-Younger-Kasami (CYK) Algoritma CYK menggunakan tabel dua dimensi untuk menyimpan hasil keputusan permasalahan yang lebih kecil terlebih dahulu. Sisi Program Dinamis dari algoritma ini terletak pada pembangunan array dua dimensi atau tabel saat memparsing sebuah untai, kemudian ketika parsing untai dilakukan dalam iterasi selanjutnya, algoritma ini akan memanfaatkan array atau tabel yang telah dibangun sebelumnya. Dari tabel yang telah terbentuk, untai yang diparsing dapat diketahui apakah valid, dalam artian CFG tersebut dapat memproduksi untai tersebut melalui aturan-aturan yang ada. Berikut ini adalah persyaratan yang dibentuk dengan mengapikasikan CYK: Apabila tidak ada hasil produksi, maka sel diberikan penanda khusus, atau dikosongkan. Apabila untai masih berisi simbol setelah iterasi selesai sampai pada sel batas, maka untai tersebut tidak valid. Contoh permasalahan yang dipecahkan: Input: untai dengan n simbol Output: valid/ tak valid Struktur data: tabel n x n Baris dengan indeks 0 sampai n-1 (atau 1-n dengan modifikasi) Kolom dengan indeks 1 sampai n Sel [i,j] simbol yang yang termasuk dalam untai input Siapkan tabel n x n dimana n adalah panjang untai yang akan dicek validitasnya, kemudian dalam diagnal tabel tersebut, isi tiap sel dengan tiap simbol dalam untai. Sel yag diisi mulai dari [i,j] awal. Setelah persyaratan pembangunan algoritma telah dipenuhi maka pseudo-code CYK seperti berikut: Gambar 3. Algoritma CYK dalam mengecek validitas bahasa natural time flies like an arrow tahap awal for i := 1 to n Add to [i-1,i] all (part-of-speech) categories for the ith word for width := 2 to n for start := 0 to n-width Define end := start + width for mid := start+1 to end-1 for every constituent X in [start,mid] for every constituent Y in [mid,end] for all ways of combining X and Y (if any) Add the resulting constituent to [start,end] Pseudo-code ini bermaksud untuk mengisi tiap sel setelah diagonal tengah dengan variabel produksi yang mungkin dari CFG yang diberikan oleh persoalan dengan mengecek symbol atas dan bawah (lihat gambar). Setiap kali variabel produksi dapat dikembalikan, maka simbol dalam untai berkurang satu. Gambar 4. Algoritma CYK dalam mengecek validitas bahasa natural time flies like an arrow selesai

2.3 Algoritma Cocke-Younger-Kasami (CYK) Dalam Teknik Kompilasi Selanjutnya adalah mengiterasi hingga habis sel paling pojok kanan-atas : Penerapan algoritma CYK ini dalam teknik kompilasi suatu bahasa tak jauh berbeda, perbedaan yang paling mendasar adalah simbol yang terdapat dalam untai merupakan token-token dalam bahasa pemrograman yang spesifik, sehingga koleksi simbol di CFG yang akan diproses sangat bervariasi. Contohnya dalam bahasa C, terdapat simbol-simbol { (, ), [, ], { } dan seterusnya. Untuk menggambarkan algoritma CYK dalam teknik kompilasi, kita akan membahas satu contoh yang hanya mengecek rekursi simbol (, dan ). Diberikan CFG G=(V,T,P,S) dimana V = {S} T = {(,)} dan produknya (1) P: S -> SS S -> (S) S -> e Konversi ke CNF dahulu: V = {S} (2) T = {(,)} P: S -> SS S -> (S1 S1 -> S) S -> () Kita aplikasikan algoritma CYK untuk untai (()(())), langkah-demi langkah dalam kasus kita (dalam gambar, kolom dan baris dimodifikasi agar mulai dari indeks 1 semua). Di tahap awal isi diagonal tabel dengan simbolsimbol untai: Gambar 6. Mengisi diagonal dua, tiga, empat dengan Hasil Produksi CFG Gambar 5. Mengisi diagonal dengan simbol dari untai

Hal yang perlu diperhatikan sebelum mengisi sel diagonal dengan variabel poduksi adalah memperhatikan simbol di kolom dan baris yang sama dengan posisi [i,j] sel sekarang. Cek semua kombinasi yang mungkin dengan variabel produksinya. Disinilah peran CNF untuk menghilangkan kemabiguitasan pengambilan kombinasi. 3. KESIMPULAN CFG adalah tata bahasa yang digunakan untuk formalisasi suatu bahasa baik bahasa natural maupun bahasa pemrograman. Untuk menormalkan suatu CFG dipergunakan metode CNF. CFG dan CNF dipelajari dalam bidang teori otomata dan bahasa formal secara lebih mendalam. Permasalah pengecekan validitas sebuah untai simbol dalam CFG tertentu dapat diselesaikan secara Program Dinamis. Salah satu algortima yang dapat digunakan untuk permasalahan ini adalah algoritma Cocke-Younger-Kasami (CYK) yag merupakah implementasi pengembangan lebih lanjut dari Program Dinamis. CYK merupakan penerapan Program Dinamis yang cukup mudah diterapkan meski memiliki kompleksitas kasus terburuk O(n3), dimana n adalah panjang untai yang diparsing. Sisi Program Dinamis dari algoritma ini terletak pada pembangunan array dua dimensi atau tabel saat memparsing sebuah untai. Dari tabel yang telah terbentuk, untai yang diparsing dapat diketahui apakah valid, dalam artian CFG tersebut dapat memproduksi untai tersebut melalui aturan-aturan yang ada. CYK merupakan algoritma yang cukup efisien dalam hal mengenali CFG apapun dan merupakan algoritma dasar yang diperkenalkan dalam pemrograman kompiler suatu bahasa pemrograman. REFERENSI [1] Andrew McCallum, Chart Parsing, Lecture of University of Massachusetts Amherst: Introduction to Natural Language Processing. 2007 [2] Lecture of CYK algorithm http://www.ecst.csuchico.edu/~juliano/computing/ Tanggal akses : 18 Mei 2008 pukul 12:00 [3] Munir, Rinaldi, Matematika Diskrit, Program Studi Informatika, Institut Teknologi Bandung. 2007. [4] Nitin Gupta, Parsing Natural Languages, Paper from Department of Computer Science and Engg, IIT Bombay, 2005. [5] English Wikipedia 2008 http://en.wikipedia.org/wiki/cyk Tanggal akses: 19 Mei 2008 pukul 13:00. [6] Bonnie Webber, Chart Parsing: The CYK Algorithm, Lecture of School of Informatics University of Edinburgh, 2007 Gambar7. Mengisi diagonal sisa Hasil Produksi CFG