ฉันเรียนรู้วิธีการแปลง NFA ให้เป็น DFA และฉันต้องการให้แน่ใจว่าฉันทำถูกต้อง เห็นได้ชัดว่าการกลับไปในทิศทางอื่นไม่ใช่เรื่อง ไม่มีใครรู้วิธีการตรวจสอบว่า DFA เทียบเท่ากับ NFA หรือไม่
ฉันเรียนรู้วิธีการแปลง NFA ให้เป็น DFA และฉันต้องการให้แน่ใจว่าฉันทำถูกต้อง เห็นได้ชัดว่าการกลับไปในทิศทางอื่นไม่ใช่เรื่อง ไม่มีใครรู้วิธีการตรวจสอบว่า DFA เทียบเท่ากับ NFA หรือไม่
คำตอบ:
นี่เป็นคำถามที่มีปัญหา มีวิธีตรวจสอบความสมดุลของออโตมาตะซึ่งตอนนี้ฉันจะอธิบาย แต่ฉันเกรงว่ามันจะไม่ช่วยคุณอย่างที่คุณจะเห็นในตอนท้าย
โดยพื้นฐานแล้วปัญหาเกี่ยวกับคำถามของคุณนั้นลึกมาก: คุณต้องการตรวจสอบว่าคุณ (โมเดลการคำนวณที่ไม่ได้กำหนด) ดำเนินการอัลกอริทึมที่กำหนดชัดเจน ดังนั้นนี่ไม่ใช่ปัญหาด้านวิทยาศาสตร์คอมพิวเตอร์จริงๆ
วิธีหนึ่งในการดำเนินการต่อคือการแปลง NFA เป็น DFA แล้วตรวจสอบความเท่าเทียมกันของ DFA สองตัวซึ่งมีอัลกอริทึมแบบเชิงเส้น [1]
บทความต่อไปนี้ให้ความสำคัญกับกรณีทั่วไปมากขึ้นของความเท่าเทียมกันของ NFA สองแห่ง (ซึ่งแน่นอนเช่นเดียวกันกับกรณีของคุณ)
Filippo Bonchi, Damien Pous, การตรวจสอบความเท่าเทียม NFA กับ bisimulations ถึงความสอดคล้อง หลักการของภาษาโปรแกรม (POPL), มกราคม 2013, Roma, อิตาลี ACM, pp.457-468, 2013
นามธรรม เราแนะนำการใช้ bisimulation ให้สอดคล้องกันเป็นเทคนิคสำหรับการพิสูจน์ความเท่าเทียมกันทางภาษาของออโตมาต จำกัด การใช้ประโยชน์จากเทคนิคนี้เราได้วางแผนการเพิ่มประสิทธิภาพของอัลกอริทึมแบบดั้งเดิมโดย Hopcroft และ Karp [1] เราเปรียบเทียบวิธีการของเรากับอัลกอริทึม antichain ที่เพิ่งได้รับการแนะนำโดยการวิเคราะห์และเกี่ยวข้องกับวิธีการพิสูจน์หลักฐานแบบเหรียญสองวิธี เราให้ตัวอย่างที่เป็นรูปธรรมที่เราอธิบายได้ดีกว่า antichains ผลการทดลองยิ่งกว่านั้นแสดงว่าไม่มีการปรับปรุงเล็กน้อย
[1] JE Hopcroft และ RM Karp อัลกอริทึมเชิงเส้นสำหรับการทดสอบความเท่าเทียมของออโตไฟไนต์ TR 114, Cornell Univ., ธันวาคม 1971
ดูภาคผนวกเว็บของเอกสารนี้ซึ่งมีสคริปต์พิสูจน์ Coq ของผลลัพธ์ลิงก์ไปยังการนำไปปฏิบัติและแอปเพล็ตแบบโต้ตอบ
คำถามนี้เป็นคำถามเพิ่มเติมเกี่ยวกับการทดสอบซอฟต์แวร์ประยุกต์และการตรวจสอบความถูกต้องในทางปฏิบัติมากกว่าคำถามเชิงทฤษฎี
คุณสามารถวางใจได้กับซอฟต์แวร์ที่ผ่านการทดสอบมาก่อนซึ่งได้รับการทดสอบเพื่อตรวจสอบความถูกต้องของผลลัพธ์ของคุณ เช่นAT&T FSM library
แนวคิดอื่น: การทดสอบแบบสุ่ม เลือกสตริงสุ่มภายในภาษาของคุณ พิจารณาว่าสายอักขระได้รับการยอมรับหรือไม่ยอมรับโดย DFA / NFA หากทั้งสองไม่เท่ากันมีความน่าจะเป็นสูงคุณจะพบสตริงที่ไม่ตรงกัน
แนวคิดอื่น: คุณสามารถเขียนโค้ดเพื่อสำรวจทุกสาขาของ DFA และ NFA ไปยังบางส่วนที่ลึกและมองหาไม่ตรงกัน นี่เทียบเท่ากับการแจกแจงสตริงที่ยอมรับได้ของความยาวที่กำหนด