ไม่สามารถแปลงจาก NFA เป็น DFA


11

ฉันมีปัญหาง่ายๆในการทำ DFA ซึ่งรับอินพุตทั้งหมดที่เริ่มต้นด้วยตัวอักษรคู่ (aa, bb) หรือลงท้ายด้วยตัวอักษรคู่ (aa, bb), ให้เป็นชุดตัวอักษรของ ภาษาที่กำหนดΣ={a,b}

ฉันพยายามที่จะแก้ปัญหาในทางอ้อมโดย:

  1. การสร้างการแสดงออกปกติ
  2. ทำให้ NFA ที่สอดคล้องกัน
  3. ใช้การสร้าง powerset เพื่ออนุมาน DFA
  4. การลดจำนวนสถานะใน DFA ให้น้อยที่สุด

ขั้นตอนที่ 1: การแสดงออกปกติสำหรับปัญหาที่กำหนดคือ (ท่ามกลางผู้อื่นนับไม่ถ้วน):

((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))

ขั้นตอนที่ 2: NFAสำหรับการแสดงออกที่กำหนดคือ:

NFA
(ที่มา: livefilestore.com )

ในรูปแบบตาราง NFA คือ:

State    Input:a     Input:b
->1        2,5         3,5
  2        4           -
  3        -           4
 (4)       4           4
  5        5,7         5,6
  6        -           8
  7        8           -
 (8)       -           -

ขั้นตอนที่ 3:แปลงเป็น DFA โดยใช้การสร้าง powerset:

Symbol, State       +   Symbol, State (Input:a) +   Symbol, State (Input:b)
   ->A, {1}         |        B, {2,5}           |        C, {3,5}
     B, {2,5}       |        D, {4,5,7}         |        E, {5,6}
     C, {3,5}       |        F, {5,7}           |        G, {4,5,6}
   (D), {4,5,7}     |        H, {4,5,7,8}       |        G, {4,5,6}
     E, {5,6}       |        F, {5,7}           |        I, {5,6,8}
     F, {5,7}       |        J, {5,7,8}         |        E, {5,6}
   (G), {4,5,6}     |        D, {4,5,7}         |        K, {4,5,6,8}
   (H), {4,5,7,8}   |        H, {4,5,7,8}       |        G, {4,5,6}
   (I), {5,6,8}     |        F, {5,7}           |        I, {5,6,8}
   (J), {5,7,8}     |        J, {5,7,8}         |        E, {5,6}
   (K), {4,5,6,8}   +        D, {4,5,7}         +        K, {4,5,6,8}

ขั้นตอนที่ 4:ย่อเล็กสุด DFA:

ฉันเปลี่ยน K-> G, J-> F, I-> E ก่อน ในการทำซ้ำครั้งถัดไป H-> D และ E-> F ดังนั้นตารางสุดท้ายคือ:

  State    +   Input:a     +   Input:b
   ->A     |      B        |      C
     B     |      D        |      E
     C     |      E        |      D
    (D)    |      D        |      D
    (E)    |      E        |      E

และตามแผนภาพดูเหมือนว่า:

Final DFA
(ที่มา: livefilestore.com )

... ซึ่งไม่ใช่ DFA ที่ต้องการ! ฉันตรวจสอบผลลัพธ์ของฉันแล้วสามครั้ง ดังนั้นฉันไปผิดที่ไหน

บันทึก:

  • -> = สถานะเริ่มต้น
  • () = สถานะสุดท้าย

3
นี่เป็นตัวอย่างที่ดีสำหรับคำถามพื้นฐานที่ได้รับการโพสต์ดีเพราะคุณรวมความคิดทั้งหมดไว้ด้วยกัน
กราฟิลส์

รู้สึกดีมากที่ได้ชื่นชมขอบคุณ! ^^
Anurag Kalia

คำตอบ:


5

คุณปรับได้ถึงขั้นตอนที่ 3 (DFA) แต่การย่อขนาดของคุณไม่ถูกต้อง

มันเป็นที่ชัดเจนว่าลด DFA ที่ไม่เหมาะสมเพราะทั้งสองปัจจัยการผลิตbaและab(ซึ่งไม่ได้อยู่ในภาษาต้นฉบับไม่ว่าพวกเขาได้รับการยอมรับโดย DFA ในขั้นตอนที่ 3) Eนำไปสู่รัฐสุดท้าย

ดูขั้นตอนการย่อเล็กสุดของคุณดูเหมือนว่าคุณได้รวมสถานะขั้นสุดท้ายและไม่ใช่ครั้งสุดท้าย ตัวอย่างเช่น J (final) -> F (ไม่ใช่ final) และ I (final) -> E (ไม่ใช่ final) การรวมสถานะสุดท้ายด้วยสถานะที่ไม่ใช่ครั้งสุดท้ายจะเปลี่ยนภาษาที่ได้รับการยอมรับจากหุ่นยนต์ซึ่งนำไปสู่การยอมรับสตริงที่ไม่ถูกต้องตามที่ระบุไว้ข้างต้น


1
โอ้ นั่นคือสิ่งที่สร้างปัญหาที่นี่ ตอนนี้ฉันจำได้ว่าครั้งสุดท้ายที่ฉันใช้วิธีนี้ไม่มีรัฐใดที่ยอมรับเฉพาะในตาราง!
Anurag Kalia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.