ฉันจะตรวจสอบว่า DFA เทียบเท่ากับ NFA ได้อย่างไร


10

ฉันเรียนรู้วิธีการแปลง NFA ให้เป็น DFA และฉันต้องการให้แน่ใจว่าฉันทำถูกต้อง เห็นได้ชัดว่าการกลับไปในทิศทางอื่นไม่ใช่เรื่อง ไม่มีใครรู้วิธีการตรวจสอบว่า DFA เทียบเท่ากับ NFA หรือไม่


การตีความผู้สมัครหนึ่งคน: มี "ตัวตรวจสอบผลลัพธ์" (ในแง่ของWasserman และ Blum ) สำหรับปัญหาการแปลง NFA เป็น DFA หรือไม่ กล่าวอีกนัยหนึ่งมีอัลกอริธึมที่เร็วกว่าการแปลงด้วยตัวเองแบบ asymptotically ซึ่งให้คู่ที่ถูกกล่าวหา (อินพุตเอาต์พุต) สำหรับอัลกอริทึมการแปลงตรวจสอบว่าเอาต์พุตถูกต้องหรือไม่
DW

คำตอบ:


7

นี่เป็นคำถามที่มีปัญหา มีวิธีตรวจสอบความสมดุลของออโตมาตะซึ่งตอนนี้ฉันจะอธิบาย แต่ฉันเกรงว่ามันจะไม่ช่วยคุณอย่างที่คุณจะเห็นในตอนท้าย

ABABBAL(D)L(N)L(N)L(D)DN

ABAB¯=B¯B

L(N)L(D)DN

L(D)L(N)N

โดยพื้นฐานแล้วปัญหาเกี่ยวกับคำถามของคุณนั้นลึกมาก: คุณต้องการตรวจสอบว่าคุณ (โมเดลการคำนวณที่ไม่ได้กำหนด) ดำเนินการอัลกอริทึมที่กำหนดชัดเจน ดังนั้นนี่ไม่ใช่ปัญหาด้านวิทยาศาสตร์คอมพิวเตอร์จริงๆ

L(D)L(N)22nnN


ขอบคุณสำหรับคำตอบที่ดี ฉันเรียนรู้สิ่งใหม่วันนี้ ดูเหมือนว่าทางออกที่ดีที่สุดของฉันคือเพียงเปรียบเทียบงานของฉันกับ JFLAP
IAmOnStackExchange

2
เว้นแต่ NFA ของคุณจะมีขนาดใหญ่ (เช่นที่มีมากกว่า 7-8 สถานะ) ตัวเลือกที่ดีที่สุดของคุณอาจเป็นเพียงการตรวจสอบตัวเองอย่างระมัดระวัง โดยปกติหลังจากลบสถานะที่ไม่สามารถเข้าถึงได้คุณจะได้รับ DFA ขนาดเล็กและการตรวจสอบด้วยตนเองนั้นไม่ยากเกินไป
Shaull

1
คุณไม่สามารถกำหนดและย่อเล็กสุดทั้งสองเครื่องและตรวจสอบว่าทั้งสองเครื่องมีความผิดปกติหรือไม่?
saadtaame

5

วิธีหนึ่งในการดำเนินการต่อคือการแปลง 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 ของผลลัพธ์ลิงก์ไปยังการนำไปปฏิบัติและแอปเพล็ตแบบโต้ตอบ


วิธีหนึ่งในการดำเนินการต่อคือการแปลง NFA เป็น DFAเป้าหมายของโปสเตอร์คือการตรวจสอบผลลัพธ์ของอัลกอริทึมนั้น การใช้สองครั้งเป็นวิธีเดียว แต่ไม่สามารถป้องกันความเข้าใจผิดของอัลกอริทึมได้ นั่นอาจเป็นสาเหตุที่ถามวิธีตรวจสอบ
AProgrammer

2
@aprogrammer ส่วนหลักของคำตอบของฉันคือการอ้างอิงอัลกอริทึมที่มีสคริปต์การพิสูจน์ Coq ซึ่งเป็นวิธีการตรวจสอบที่ปลอดภัยที่สุดที่ฉันคิด
เจ

1
ฉันไม่แน่ใจว่าสิ่งที่ใครบางคนไม่แน่ใจเกี่ยวกับความเข้าใจของเขาเกี่ยวกับอัลกอริทึมง่าย ๆ เช่น NFA ถึง DFA อย่างใดอย่างหนึ่งจะทำกับสคริปต์พิสูจน์ Coq ดูเหมือนว่าการใช้พีชคณิตเพื่อแก้ปัญหาทางคณิตศาสตร์ของนักเรียนระดับที่สาม
AProgrammer

0

คำถามนี้เป็นคำถามเพิ่มเติมเกี่ยวกับการทดสอบซอฟต์แวร์ประยุกต์และการตรวจสอบความถูกต้องในทางปฏิบัติมากกว่าคำถามเชิงทฤษฎี

  • D1D2¯D2D1¯D¯

  • คุณสามารถวางใจได้กับซอฟต์แวร์ที่ผ่านการทดสอบมาก่อนซึ่งได้รับการทดสอบเพื่อตรวจสอบความถูกต้องของผลลัพธ์ของคุณ เช่นAT&T FSM library

  • แนวคิดอื่น: การทดสอบแบบสุ่ม เลือกสตริงสุ่มภายในภาษาของคุณ พิจารณาว่าสายอักขระได้รับการยอมรับหรือไม่ยอมรับโดย DFA / NFA หากทั้งสองไม่เท่ากันมีความน่าจะเป็นสูงคุณจะพบสตริงที่ไม่ตรงกัน

  • แนวคิดอื่น: คุณสามารถเขียนโค้ดเพื่อสำรวจทุกสาขาของ DFA และ NFA ไปยังบางส่วนที่ลึกและมองหาไม่ตรงกัน นี่เทียบเท่ากับการแจกแจงสตริงที่ยอมรับได้ของความยาวที่กำหนด

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