Kamis, 23 April 2020

Finite Automata



Finite automata adalah mesin abstrak berupa sistem model matematika dengan masukan dan keluaran diskrit yang dapat mengenali bahasa paling sederhana (bahasa reguler) dan dapat diimplementasikan secara nyata.
1.      Finite State Automata
• Model matematika suatu sistem yang menerima input dan output diskrit
• Mesin automata dari bahasa Regular
• Tidak memiliki tempat penyimpanan sehingga kemampuan mengingat terbatas (contoh: elevator/lift)
• Aplikatif berguna untuk merancang sistem nyata.
• Aplikasi meliputi: analisis leksikal, text-editor, protokol komunikasi jaringan (kermit) dan parity checker (pengecek parity).

FSA didefinisikan sebagai pasangan 5 tupel : (Q, ∑, δ, S, F). FSA atau AH (Automata Hingga) didefinisikan sebagai pasangan 5 Tupel  M = (Q, ∑, δ, S, F).
Q                     : himpunan hingga state
∑ (Sigma)       : himpunan hingga simbol input (alfabet)
δ (Delta)          : fungsi transisi, menggambarkan transisi state FSA akibat pembacaan simbol input. Fungsi transisi ini biasanya diberikan dalam bentuk tabel.
S Q               : state AWAL
F Q              : himpunan state AKHIR

Contoh :
Seorang petani dengan seekor serigala, kambing dan seikat rumput
berada pada suatu sisi sungai. Tersedia hanya sebuah perahu kecil yang hanya dapat dimuati dengan petani tersebut dengan salah satu serigala, kambing atau rumput. Petani tersebut harus menyeberangkan ketiga bawaannya kesisi lain sungai.
Tetapi jika petani meninggalkan serigala dan kambing pada suatu saat, maka kambing akan dimakan serigala. Begitu pula jika kambing ditinggalkan dengan rumput, maka rumput akan dimakan oleh kambing. Mungkinkah ditemukan suatu cara untuk melintasi sungai tanpa menyebabkan kambing atau rumput dimakan.


Jawab :



Tupel: M = (Q, ∑, δ, S, F)
Q                     = {PKSR-Φ, SR-PK, PSR-K, R-PSK, S-PKR, PKR-S, PSK-R, K-PSR, PK-SR, Φ-PKSR}
Σ                       = {p, k, s, r}
S                      = PKSR – Φ
F                       = {Φ-PKSR}

Ada dua jenis FSA, Finite State Automata dapat berupa:
1. Deterministic Finite Automata (DFA)
Artinya: Dari suatu state ada tepat satu state berikutnya untuk setiap simbol input yang diterima. Deterministic finite automata (DFA)  M = (Q, ∑, δ, S, F), dimana :

Q                     : himpunan state/kedudukan
                    : himpunan simbol input
                     : fungsi transisi,dimana ∂ Q x ∑  Q
S                      : State awal (initial state)
F                      : himpunan state akhir (Final State)
Language  L(M) : (x| ∂(S,x) di dalam F)

Penelusuran/Tracking:
Telusurilah, apakah kalimat-kalimat berikut diterima DFA di atas:
abababaa, aaaabab , aaabbaba
Jawab :
δ (q0,abababaa) δ (q0,bababaa) δ (q1,ababaa)
δ (q0,babaa) δ (q1,abaa) δ (q0,baa) δ (q1,aa)
δ (q0,a) q0
Tracking berakhir di q0 (state AKHIR) kalimat abababaa diterima
Kesimpulan :
Sebuah kalimat diterima oleh DFA di atas jika tracingnya berakhir di salah satu state AKHIR.

2. Nondeterministic Finite Automata (NDFA) / NFA
Artinya: Dari suatu state bisa terdapat 0,1 atau lebih busur keluar (transisi) berlabel simbol input yang sama. Non Deterministic finite automata (NFA)  M = (Q, ∑, δ, S, F), dimana :

Q : himpunan state/kedudukan
∑ : himpunan simbol input
∂ : fungsi transisi, dimana ∂ Q x (∑ ε)  P(Q)
P(Q) : set of all subsets of Q
S : State awal (initial state)
F : himpunan state akhir (Final State)
Language  L(M) : (x| ∂(S,x) di dalam F)




Ekuivalen antar DFA
Untuk suatu bahasa regular, kemungkinan ada sejumlah Deterministic Finite Automata yang dapat menerimanya. Perbedaannya hanyalah jumlah state yang dimiliki otomata-otomata yang saling ekuivalen tersebut. Tentu saja, dengan alasan kepraktisan, kita memilih otomata dengan jumlah state yang lebih sedikit.  Dua DFA M1 dan M2 dinyatakan ekuivalen apabila L(M1) = L(M2)


Reduksi Jumlah State
Reduksi dilakukan untuk mengurangi jumlah state tanpa mengurangi kemampuan untuk menerima suatu bahasa seperti semula (efisiensi). State pada FSA dapat direduksi apabila terdapat useless state. Hasil dari FSA yang direduksi merupakan ekivalensi dari FSA semula
Sasaran kita di sini adalah mengurangi jumlah state dari suatu Finite State Automata, dengan tidak mengurangi kemampuannya semula untuk menerima suatu bahasa.
Ada dua buah istilah baru yang perlu kita ketahui yaitu :
1.      Distinguishable yang berarti dapat dibedakan :
Dua state  p dan q dari suatu DFA dikatakan indistinguishable apabila:
δ(q,w)
F dan δ(p,w) F atau δ(q,w) F dan δ(p,w) F untuk semua w S*
2.      Indistinguishable yang berarti tidak dapat dibedakan.
Dua state  p dan q dari suatu DFA dikatakan distinguishable,
jika ada string w
S*  hingga: δ(q,w) Î δ(q,w) F dan δ(p,w) F
Pasangan dua buah state memiliki salah satu kemungkinan : distinguishable atau indistinguishable tetapi tidak kedua-duanya. Dalam hal ini terdapat sebuah relasi :
Jika p dan q indistinguishable, dan q  dan r indistinguishable maka p,  r indistinguishable dan p, q, r indistinguishable
Dalam melakukan eveluasi state, didefinisikan suatu relasi :     
Untuk Q yang merupakan himpunan semua state D  adalah  himpunan state-state distinguishable,  dimana D Q   Nadalah himpunan state-state indistinguishable, dimana N Q maka  x N jika x Q dan x D


source : 

Jumat, 17 April 2020

Tata Bahasa Bebas Konteks Parsing dan Ambiguitas


Tata Bahasa Bebas Konteks Parsing dan Ambiguitas
A.    Parsing
Untuk mengimplementasikan Parser diperlukan TBBK (Context Free Grammar). TBBK adalah sekumpulan simbol-simbol variabel (non-terminal) yang menunjukkan bagaimana menghasilkan untai-untai, yang masing-masing merepresentasikan bahasa. Bahasa yang direpresentasikan dengan simbol-simbol nonterminal tersebut diproses secara rekursif dengan suatu aturan-aturan yang disebut aturan produksi.
Tata bahasa bebas konteks (tipe 2) memiliki elemen:
1. Terminal : simbol dasar yang tidak dapat diturunkan lagi. Terminal disebut juga token.
2. Non terminal : variabel sintaktik yang masih dapat diturunkan lagi.
Pohon (tree) adalah suatu graph terhubung tidak sirkuler, yang memiliki satu simpul (node) yang disebut akar dan dari situ memiliki lintasan ke setiap simpul. Pohon penurunan (derivation tree/parse tree) berguna untuk menggambarkan bagaimana memperoleh suatu string (untai) dengan cara menurunkan simbol-simbol variabel menjadi simbol-simbol terminal.
Proses penurunan atau parsing bisa dilakukan dengan cara:
·         Penurunan terkiri (leftmost derivation). Simbol variabel terkiri yang diperluas terlebih dahulu.
·         Penurunan terkanan (right derivation). Simbol variabel terkanan yang diperluas terlebuh dahulu.
Misal, terdapat tata bahasa bebas konteks:
S → aAS | a
A → SbA | ba
Untuk memperoleh untai ‘aabbaa’ :
Simbol ( => ) dibaca menurunkan
• Dengan penurunan terkiri: S => aAS => aSbAS => aabAS => aabbaS => aabbaa
• Dengan penurunan terkanan: S => aAS => aAa => aSbAa => aSbbaa => aabbaa
Meskipun proses penurunan berbeda, namun akan tetap memiliki pohon penurunan yang sama.
Biasanya persoalan yang diberikan berkaitan dengan pohon penurunan, adalah untuk mencari penurunan yang hasilnya menuju kepada suatu untai yang ditentukan. Dalam hal ini, perlu untuk melakukan percobaan pemilihan aturan produksi yang bisa menuju ke solusi.

B.     Ambiguitas
Terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda utuk memperoleh
suatu untai. Misal terdapat tata bahasa bebas konteks:
S → SbS | ScS | a
Untuk memperoleh untai ‘abaca’
Cara pertama:
S >> SbS >> SbScS >> SbSca >> Sbaca >> abaca
Cara kedua:
S => ScS => SbScS => abScS => abacS => abaca


Contoh Soal :
1. S -> AA
A -> AAA | a | bA| Ab
Buatlah pohon penurunan dari himpunan produksi di atas untuk membangkitkan string dengan susunan “bbabaaba”
Jawab:



2. S -> AB
A -> Aa| bB
B -> a | Sb
Buatlah pohon penurunan dari himpunan produksi di atas untuk membangkitkan string dengan susunan “baabaab”
Jawab :



3. S -> Ba | Ab
A -> Sa | Aab| a
B -> Sb| Bba| b
Buatlah pohon penurunan dari himpunan produksi di atas untuk membangkitkan string dengan susunan “bbaaaabb”
Jawab :


4. S -> AB | C
A -> aAb| ab
B -> cBd| cd
C -> aCd| aDd
D -> bDc| bc
Buatlah pohon penurunan dari himpunan produksi di atas untuk membangkitkan string dengan susunan “aabbccdd”.




















Video penjelasan :