Otomaton hingga
Otomaton hingga (bahasa Inggris: finite state machine atau finite automaton) adalah model komputasi berupa komputer sederhana yang terdiri atas beberapa state dan beberapa transisi, serta dapat menerima atau menolak string yang diberikan kepadanya.
Contoh
Secara informal, otomaton hingga dapat kita jelaskan dengan diagram transisi yang menggambarkannya:
Otomaton tersusun atas state; pada gambar ada tiga state berbentuk lingkaran, yaitu q0, q1, dan q2. Di antara state-state tersebut terdapat transisi, yaitu panah-panah pada gambar. Otomaton juga harus memiliki state awal, dalam hal ini state q0. State awal sering digambarkan dengan panah yang mengarah ke state tersebut tetapi tidak berasal dari state mana pun. Selain itu, otomaton biasanya memiliki state akhir yang digambar dengan garis ganda; pada gambar, state akhir adalah q2.
Otomaton yang disusun seperti ini menerima string tertentu. Kita memasukkan string ke otomaton, lalu otomaton mencoba menerimanya. Jika string diterima, otomaton menjawab YA; jika tidak, otomaton menjawab TIDAK. Otomaton kita mencoba menerima string yang tersusun atas huruf “a, b, c”, sehingga kita dapat mencoba string “abbc”.
Kita mulai dari state awal q0, dan inputnya adalah string “abbc”. Selanjutnya, kita mengikuti panah.
String dibaca seperti biasa dari kiri ke kanan, artinya simbol pertama yang kita ambil adalah “a”. Panah untuk input “a” menuju state q1, jadi kita berpindah ke sana dan menghapus simbol “a” dari string. Sekarang inputnya adalah string “bbc”:
Panah untuk input “b” mengarah kembali ke simpul q1. Kita kembali menghapus huruf pertama, dan inputnya menjadi string “bc”. Kita tetap berada di state q1. Akhirnya, inputnya adalah string “c”. Dari state q1, panah untuk input “c” membawa kita ke state q2.
Semua huruf string input sudah habis dibaca, dan kita berada di state q2, yang merupakan state akhir. Jadi, otomaton hingga ini menerima string “abbc”.
Jika pada akhirnya kita tidak berada di state penerima, otomaton tidak akan menerima string tersebut. Otomaton juga tidak menerima string jika di suatu state kita tidak punya tujuan untuk melanjutkan. Misalnya, untuk input “ab” kita sampai di state q1 dan berhenti di sana — otomaton tidak menerima string seperti itu. Jika kita menguji string “aabbc”, kita juga gagal, karena dari state q1 tidak ada panah untuk huruf “a”.
Jadi, otomaton hingga digunakan untuk mengenali suatu himpunan string. Dalam praktik, otomaton dapat digunakan, misalnya, untuk memeriksa apakah string input merupakan alamat email yang valid.
Definisi otomaton hingga
Gambaran intuitif tentang otomaton hingga di atas perlu kita formalkan agar kita dapat bekerja dengan otomaton lebih jauh dan lebih baik.
Otomaton hingga (deterministik) adalah lima-tupel ⟨Q, Σ, δ, q0, F⟩, dengan
- Q himpunan berhingga state,
- Σ (sigma kapital) alfabet (himpunan berhingga simbol/huruf),
- δ: Q × Σ ⟶ Q fungsi transisi,
- q0 ∈ Q state awal,
- F ⊆ Q himpunan state akhir (state penerima).
Jika kita kembali ke otomaton sebelumnya,
dapat dikatakan bahwa himpunan state Q memuat tiga state, Q = {q0, q1, q2}. Alfabet Σ memuat huruf-huruf yang dapat dirangkai menjadi string, yang kemudian diterima atau ditolak oleh otomaton. Di sini alfabetnya kemungkinan besar Σ= {a, b, c}, tetapi bisa juga sembarang superhimpunannya. State awal q0 adalah state q0, tidak ada yang berubah. Himpunan state akhir pada otomaton ini hanya memuat satu state, F = {q2}.
Yang dimaksud dengan fungsi transisi adalah ketiga panah berhuruf tadi. Jika notasi δ: Q × Σ ⟶ Q membingungkanmu, artinya hanya bahwa δ adalah fungsi (mungkin lebih tepat disebut pemetaan) yang menerima dua parameter: state dari Q dan huruf dari Σ. Setelah dipanggil, fungsi mengembalikan state baru. Fungsi transisi kita dapat didefinisikan dengan tabel berikut:
Jadi, jika kita memanggil δ(q1, c), kita menerapkan baris ketiga, dan fungsi menjawab dengan state q2 — sama seperti diagram. Jika kita berada di state q1 dan inputnya huruf “c”, kita sampai di state q2. Sebelum mendefinisikan secara formal apa artinya otomaton menerima suatu string, kita gunakan pemahaman intuitif tentang konsep ini dan melihat beberapa contoh lain.
Contoh lain
-
Buatlah otomaton atas alfabet biner, yaitu Σ= {0, 1}, yang hanya menerima string yang diakhiri angka satu. Misalnya, otomaton menerima string 1, 01, 000001, 0101011.
Otomaton kita memiliki dua state — state awal q0 dan state akhir q1. Setiap kali inputnya angka 1, kita berpindah ke state akhir q1 dan tetap di sana. Sebaliknya, jika inputnya angka 0, kita berpindah ke state bukan akhir q0 dan juga tetap di sana.
-
Konstruksilah otomaton atas alfabet biner yang hanya menerima string dengan huruf pertama yang berbeda dari huruf terakhirnya.
Pada langkah pertama, otomaton langsung terbagi menjadi dua “subotomaton”. Jika string diawali nol, otomaton masuk ke bagian kiri dan tetap di sana; jika diawali satu, otomaton berpindah ke bagian kanan. Selanjutnya, cara kerjanya sudah biasa: jika kita berada di bagian kiri dan inputnya 1, kita berpindah ke state akhir dan tetap di sana. Jika inputnya 0, kita berpindah ke state q1, yang bukan state akhir.
Berbeda dengan otomaton sebelumnya, otomaton ini memiliki lebih dari satu state akhir, yaitu F = {q3, q4}.
-
Konstruksilah otomaton atas alfabet biner yang hanya menerima string yang tidak memuat dua angka nol berturut-turut.
Otomaton ini menarik karena dua hal. Pertama, otomaton ini menerima string kosong. Kita dapat mencoba memasukkan string kosong ke otomaton, dan otomaton akan menerimanya jika state awal sekaligus merupakan state akhir, seperti pada otomaton ini. Karena string kosong tidak memuat dua angka nol berturut-turut, hasil ini benar. Kedua, semua state pada otomaton ini adalah state akhir. Satu-satunya keadaan ketika otomaton tidak menerima string adalah ketika dari suatu state tidak ada transisi yang bisa diambil. Hal ini terjadi di state q1, yang tidak memiliki transisi untuk 0, karena dengan transisi tersebut string akan memuat dua angka nol berturut-turut.
-
Konstruksilah otomaton atas alfabet {-,+,.,0,1,…,9} yang hanya menerima string yang menyatakan bilangan, ditulis dengan titik desimal seperti dalam pemrograman. Artinya, bilangan bulat seperti 2, 548, 98263, atau bilangan desimal seperti 5584.48, 3.14, keduanya juga dalam versi bilangan negatif dengan tanda minus -2, -548, -3.14, serta dengan tanda plus yang ditulis secara eksplisit, yaitu +2, +548, +3.14. Selain itu, bilangan 0.123 juga harus dapat ditulis sebagai .123 saja (tanpa nol di depan), termasuk dengan kedua tanda tersebut. Kita gunakan notasi bantu: alih-alih menuliskan sepuluh transisi untuk sepuluh angka, kita gunakan simbol N.
-
Konstruksilah otomaton atas alfabet biner yang hanya menerima string berbentuk 0n1n, artinya string diawali sejumlah angka nol, lalu diikuti angka satu yang banyaknya sama. Contoh string seperti itu adalah 0011, 00001111, 01.
Otomaton seperti itu tidak dapat dibuat, karena tidak ada tempat untuk “mengingat” banyaknya angka nol. Kita harus membuat beberapa “subotomaton” seperti pada contoh kedua, tetapi banyaknya “subotomaton” tersebut harus tak hingga, satu untuk setiap nilai n.
Formalisasi komputasi otomaton
Kita sudah mendefinisikan otomaton hingga secara formal. Selanjutnya, kita masih perlu mendefinisikan apa sebenarnya yang dilakukan otomaton, yaitu komputasi otomaton.
Konfigurasi otomaton: Pasangan ⟨q, w⟩ ∈ Q × Σ∗ disebut konfigurasi otomaton, dengan q state saat ini tempat otomaton berada dan w bagian string yang belum dibaca. Σ∗ menyatakan penutup alfabet Σ, yaitu himpunan semua string yang dapat disusun dari huruf-huruf alfabet Σ. Penutup ini juga memuat string kosong, yang dilambangkan dengan ε.
Jika ada otomaton ⟨Q, Σ, δ, q0, F⟩ dan kita ingin menerima string w, otomaton berada pada konfigurasi awal ⟨q0, w⟩. Jika kita kembali ke otomaton
dan ingin menerima string w = abbc, konfigurasi awalnya adalah ⟨q0, abbc⟩.
Langkah komputasi didefinisikan sebagai relasi ↦ antara himpunan (Q × Σ∗) × (Q × Σ∗), yaitu antara konfigurasi-konfigurasi otomaton. Misalkan w = w0w1… wn menyatakan bagian string w yang belum dibaca. Pasangan ⟨q1, w0w1… wn⟩ dan ⟨q2, w1… wn⟩ dikatakan berada dalam relasi ↦, ditulis
jika dan hanya jika δ(q1, w0) = q2. Kembali ke contoh kita, konfigurasi awalnya adalah ⟨q0, abbc⟩. Dari diagram terlihat bahwa untuk input “a” kita dapat berpindah ke state q1. Jadi, kita dapat menulis
karena berlaku δ(q0, a) = q1. Dengan begitu, kita telah melakukan satu langkah komputasi — kita melihat ke state mana kita harus berpindah untuk input tersebut (= huruf pertama dari bagian string yang belum dibaca), berpindah ke sana, lalu menghapus huruf pertama dari bagian string yang belum dibaca. Hasilnya adalah konfigurasi baru.
Penutup refleksif dan transitif dari relasi langkah komputasi dilambangkan dengan ↦ ∗. Jadi, jika kita menulis K1 ↦ ∗ K2, dengan K1, K2 konfigurasi otomaton, artinya dari konfigurasi K1 kita dapat mencapai konfigurasi K2 melalui beberapa langkah komputasi. Dengan kata lain, ada barisan konfigurasi berhingga sedemikian sehingga:
Misalnya, pada otomaton kita berlaku ⟨q0, abbc⟩ ↦ ∗ ⟨q1,bc⟩, karena setelah dua langkah komputasi tersisa string “bc” dan kita berada di state q1. Artinya, ada barisan konfigurasi berikut:
Otomaton menerima string w jika dan hanya jika ada qf ∈ F sedemikian sehingga
dan state q2 adalah state akhir, q2 ∈ F.
Bahasa yang diterima otomaton adalah himpunan semua string yang diterima otomaton. Bahasa otomaton A dilambangkan dengan L(A). Jadi, berlaku L(A) ⊆ Σ∗ dan
Bahasa reguler adalah bahasa yang diterima oleh suatu otomaton hingga.
Dua otomaton hingga ekuivalen jika keduanya menerima bahasa yang sama. Jadi, otomaton A1 dan A2 ekuivalen jika berlaku L(A1) = L(A2).
Sumber
Daftar isi: Otomaton hingga, Otomaton lengkap, Otomaton hingga nondeterministik, Simulasi otomaton nondeterministik, Konversi NFA ke DFA