Back to IF2224 Teori Bahasa Formal dan Otomata

Topic

Questions/Cues

  • Apa filosofi dasar desain DFA?
  • Apa 3 syarat utama sebuah state?
  • Bagaimana algoritma desainnya?
  • Apa arti dari setiap state?
  • Studi Kasus: Genap 0 & Genap 1?
  • Bagaimana menangani operasi “or” / “not”?

Reference Points

  • 2022_catatan-kuliah-Algoritma-membuat-DFA.pdf
  • 2019_How to Design a DFA.pptx

Filosofi Utama: State adalah Memori

Kunci utama dalam merancang sebuah DFA adalah memahami bahwa setiap state mewakili sebuah “ingatan” atau kondisi spesifik dari string yang telah dibaca sejauh ini. DFA tidak memiliki memori eksternal, jadi satu-satunya cara ia bisa “mengingat” informasi penting (misalnya, “apakah jumlah 0 sejauh ini genap?” atau “apakah simbol terakhir yang dibaca adalah 1?”) adalah dengan berada di state yang berbeda.

Setiap state harus memiliki arti atau interpretasi yang jelas dan bisa dideskripsikan.

Syarat-Syarat State dalam DFA

Saat mendefinisikan state, ada tiga aturan utama yang harus dipatuhi:

  1. Keadaan Diterima Harus Menjadi State: Kondisi apa pun yang menyebabkan sebuah string diterima (menjadi bagian dari bahasa) harus bisa diwakili sebagai sebuah state (atau beberapa state).
  2. Keadaan State Tidak Boleh Beririsan: Makna dari satu state tidak boleh tumpang tindih dengan makna state lain. Misalnya, mendefinisikan ​ sebagai “jumlah ‘0’ genap” dan ​ sebagai “jumlah ‘1’ genap” adalah salah, karena string “0011” memenuhi kedua kondisi tersebut. Seharusnya, satu state merepresentasikan kombinasi kondisi yang unik.
  3. Semua Kemungkinan Keadaan Harus Terakomodasi: Seluruh kemungkinan kondisi yang relevan dengan permasalahan bahasa harus terwakili oleh salah satu state yang ada. Tidak boleh ada kondisi yang terlewat.

Algoritma Desain DFA

Berikut adalah proses sistematis untuk merancang DFA:

  • Buat Test Set: Tuliskan beberapa contoh string yang seharusnya diterima dan beberapa contoh yang seharusnya ditolak. Ini akan sangat membantu untuk menguji DFA kita nanti.
  • Definisikan Semua State: Identifikasi semua kemungkinan kondisi/keadaan yang perlu diingat oleh mesin. Pastikan kondisi-kondisi ini tidak beririsan dan mencakup semua kemungkinan. Beri nama dan deskripsi yang jelas untuk setiap state.
  • Gambarkan Transisi: Untuk setiap state, tentukan ke mana mesin akan berpindah jika menerima setiap simbol dari alphabet. Transisi ini harus konsisten dengan arti dari masing-masing state.
  • Tentukan Start dan Final State:
    • Start State: Biasanya merepresentasikan kondisi awal sebelum membaca string apa pun (misalnya, kondisi saat baru membaca string kosong, ϵ).
    • Final State: Pilih state (atau beberapa state) yang definisinya cocok dengan kriteria string yang diterima oleh bahasa.
  • Uji dengan Test Set: Gunakan string dari langkah 1 untuk menelusuri DFA yang telah dibuat dan pastikan hasilnya sesuai (diterima atau ditolak).

Studi Kasus: DFA untuk String dengan Jumlah ‘0’ Genap dan Jumlah ‘1’ Genap

Misalkan  memiliki jumlah ’0’ genap DAN jumlah ’1’ genap.

  1. Definisi State: Kita butuh 4 kondisi untuk melacak paritas (genap/ganjil) dari ‘0’ dan ‘1’.
    • : Jumlah ‘0’ genap, jumlah ‘1’ genap.
    • : Jumlah ‘0’ genap, jumlah ‘1’ ganjil.
    • : Jumlah ‘0’ ganjil, jumlah ‘1’ genap.
    • : Jumlah ‘0’ ganjil, jumlah ‘1’ ganjil.
  2. Transisi:
    • Dari ​ (genap, genap): jika baca ‘0’ → ​ (ganjil, genap). Jika baca ‘1’ → (genap, ganjil).
    • Dari (genap, ganjil): jika baca ‘0’ → (ganjil, ganjil). Jika baca ‘1’ → (genap, genap).
    • Dari (ganjil, genap): jika baca ‘0’ → (genap, genap). Jika baca ‘1’ → (ganjil, ganjil).
    • Dari (ganjil, ganjil): jika baca ‘0’ → ​ (genap, ganjil). Jika baca ‘1’ → (ganjil, genap).
  3. Start & Final State:
    • Start State: Kondisi awal (string kosong) memiliki nol buah ‘0’ dan nol buah ‘1’ (keduanya genap). Jadi, start state adalah q0​.
    • Final State: Bahasa ini menerima string dengan ‘0’ genap dan ‘1’ genap. Kondisi ini persis seperti definisi state q0​. Jadi, final state adalah q0​.

Aturan Khusus untuk Operasi Bahasa

Terkadang, bahasa didefinisikan sebagai kombinasi dari bahasa lain. Berikut panduan singkatnya:

  • Jika Bahasa mengandung “OR” (atau): Buat DFA untuk masing-masing sub-bahasa, lalu gabungkan dengan membuat “cabang” dari start state. (Catatan: Ini menyederhanakan konsep, biasanya menghasilkan NFA yang perlu diubah lagi).
  • Jika Bahasa mengandung “NOT” (bukan): Buat DFA untuk bahasa positifnya (tanpa “not”). Lalu, ubah semua final state menjadi non-final, dan semua non-final state menjadi final. Ini disebut operasi komplemen.
  • Jika Bahasa mengandung “AND” (dan): Buat DFA untuk masing-masing sub-bahasa. (Catatan: Penggabungannya lebih kompleks, biasanya menggunakan metode product construction, bukan sekadar konkatenasi).

Summary

Mendesain sebuah DFA adalah proses sistematis yang berpusat pada filosofi bahwa setiap state adalah sebuah memori yang merepresentasikan kondisi unik dan tidak tumpang tindih dari string yang telah dibaca. Prosesnya meliputi pendefinisian semua state yang diperlukan, menentukan transisi yang logis antar state berdasarkan input, menetapkan state awal dan akhir sesuai kondisi bahasa, dan terakhir mengujinya. Dengan memahami bahwa arti dari setiap state adalah kunci, perancangan DFA yang kompleks sekalipun dapat dipecah menjadi langkah-langkah yang dapat dikelola.