การแปลง NDFA เป็น DFA

คำชี้แจงปัญหา

ปล่อย X = (Qx, ∑, δx, q0, Fx)เป็น NDFA ซึ่งยอมรับภาษา L (X) เราต้องออกแบบ DFA ที่เทียบเท่าY = (Qy, ∑, δy, q0, Fy) ดังนั้น L(Y) = L(X). ขั้นตอนต่อไปนี้แปลง NDFA เป็น DFA ที่เทียบเท่า -

อัลกอริทึม

Input - NDFA

Output - DFA ที่เทียบเท่า

Step 1 - สร้างตารางสถานะจาก NDFA ที่กำหนด

Step 2 - สร้างตารางสถานะว่างภายใต้ตัวอักษรอินพุตที่เป็นไปได้สำหรับ DFA ที่เทียบเท่า

Step 3 - ทำเครื่องหมายสถานะเริ่มต้นของ DFA ด้วย q0 (เหมือนกับ NDFA)

Step 4- ค้นหาการรวมกันของ States {Q 0 , Q 1 , ... , Q n } สำหรับตัวอักษรที่ป้อนได้แต่ละตัว

Step 5 - ทุกครั้งที่เราสร้างสถานะ DFA ใหม่ภายใต้คอลัมน์ตัวอักษรอินพุตเราต้องใช้ขั้นตอนที่ 4 อีกครั้งมิฉะนั้นให้ไปที่ขั้นตอนที่ 6

Step 6 - รัฐที่มีสถานะสุดท้ายของ NDFA เป็นสถานะสุดท้ายของ DFA ที่เทียบเท่า

ตัวอย่าง

ให้เราพิจารณา NDFA ที่แสดงในรูปด้านล่าง

q δ (q, 0) δ (q, 1)
{a, b, c, d, e} {d, e}
{ค} {e}
{b}
{e}

เมื่อใช้อัลกอริทึมข้างต้นเราจะพบ DFA ที่เทียบเท่า ตารางสถานะของ DFA แสดงอยู่ด้านล่าง

q δ (q, 0) δ (q, 1)
[a] [a, b, c, d, e] [d, e]
[a, b, c, d, e] [a, b, c, d, e] [b, d, e]
[d, e] [e]
[b, d, e] [c, e] [e]
[e]
[c, e] [b]
[b] [ค] [e]
[ค] [b]

แผนภาพสถานะของ DFA มีดังนี้ -