มีอัลกอริธึมอะไรบ้างในการสร้าง DFA ที่จดจำภาษาที่อธิบายโดย regex ที่ให้มา


11

หนังสือเรียนทั้งหมดของฉันใช้อัลกอริทึมเดียวกันในการสร้าง DFA ที่ได้รับ regex: อันดับแรกสร้าง NFA ที่รับรู้ภาษาของ regex จากนั้นใช้การสร้างชุดย่อย (aka "powerset") เปลี่ยน NFA ให้เป็น DFA ที่เทียบเท่า ( เลือกลด DFA) ฉันยังเคยได้ยินศาสตราจารย์กล่าวถึงการมีอัลกอริทึมอื่น ๆ มีใครรู้บ้างไหม? อาจเป็นหนึ่งที่ไปจาก regex โดยตรงกับ DFA โดยไม่ต้อง NFA กลาง?


ยินดีต้อนรับสู่ cstheory เว็บไซต์คำถามและคำตอบสำหรับคำถามระดับการวิจัยในสาขาวิทยาการคอมพิวเตอร์เชิงทฤษฎี (TCS) คำถามของคุณดูเหมือนจะไม่ใช่คำถามระดับการวิจัยใน TCS โปรดดูคำถามที่พบบ่อยสำหรับข้อมูลเพิ่มเติมเกี่ยวกับความหมายของสิ่งนี้ คำถามของคุณอาจเหมาะสำหรับวิทยาการคอมพิวเตอร์ที่มีขอบเขตที่กว้างขึ้น
Kaveh

1
ทำไมคุณถึงแสดงความคิดเห็นแม่แบบนี้เสมอ ? เห็นได้ชัดว่ามีอย่างน้อย 5 คนที่ไม่เห็นด้วยกับคุณ ฉันขอแนะนำให้คุณตั้งคำถามเช่นนี้
AJed

@Ajed ฉันไม่ได้ใช้ความคิดเห็นนี้เสมอไป ฉันจะใช้มันเมื่อคำถามดูเหมือนว่านอกเรื่องกับผม แต่อาจจะเหมาะสำหรับวิทยาการคอมพิวเตอร์ การโหวตไม่ได้หมายความว่าคำถามอยู่ในหัวข้อและคำถามนี้ดูเหมือนจะเป็นคำถามระดับการวิจัยสำหรับฉันดังนั้นฉันคิดว่าความคิดเห็นนั้นเหมาะสม (ความจริงที่คนสามารถเขียนคำตอบวิจัยระดับคำถามไม่ได้ทำให้คำถามการวิจัยระดับ.) PS: ผมคิดว่าการสนทนานี้จะเหมาะสำหรับทฤษฎีวิทยาศาสตร์คอมพิวเตอร์ Meta
Kaveh

คำตอบ:


13

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

ตรวจสอบว่าการแสดงออกปกติแสดงภาษาที่มีสตริงทั้งหมดเป็นปัญหาที่สมบูรณ์ PSPACE (ดูคำตอบนี้สำหรับการอ้างอิง) การตรวจสอบว่า DFA ยอมรับภาษานั้นสามารถทำได้ในเวลาพหุนามหรือไม่ดังนั้นถ้าคุณไปจากนิพจน์ปกติไปยัง DFA โดยตรงจะมีการระเบิดขึ้นที่ใดที่หนึ่ง

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

มีงานจำนวนมากในการระบุตระกูลย่อยของนิพจน์ทั่วไปซึ่งเราสามารถสร้าง DFA ได้อย่างมีประสิทธิภาพ สายงานนี้ขึ้นอยู่กับการแปลที่คุณใช้ หมายความว่าคุณแก้ไขการแมปจากนิพจน์ทั่วไปไปยัง NFAs และพยายามอธิบายลักษณะของนิพจน์ทั่วไปที่แมปไปยัง DFA

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

อนุพันธ์ของการแสดงออกปกติ JA Brzozowski 1964

เป็นที่มาการแสดงออกปกติด้วยความเคารพสัญลักษณ์จากตัวอักษรคือการแสดงออกปกติคิดเป็นภาษาของกับชั้นนำลบออกจากสตริง ความคิดนี้ขยายไปถึงอนุพันธ์บางส่วนของการแสดงออกปกติโดย Antimirovsrara

อนุพันธ์บางส่วนของนิพจน์ทั่วไปและโครงสร้างออโตไฟไนต์ จำกัด , V. Antimirov 1995

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

จากนิพจน์ปกติไปจนถึงออโตมาต้าแบบกำหนดค่าได้ G. G. Berry และ R. Sethi, 1986

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

ภาษาปกติหนึ่งเดียวที่ไม่ชัดเจน , A. Brüggemann-Klein และ Derick Wood, 1998

บทความนี้สร้างจากงานก่อนหน้าโดยBrüggemann-Klein และกรณีศึกษาที่คุณสามารถใช้อนุพันธ์เพื่อสร้าง DFAs ในเวลาพหุนาม มีงานจำนวนมากติดตามบทความนี้ มันมีความสำคัญจากมุมมองของเทคโนโลยีเว็บเนื่องจากนิพจน์ทั่วไปที่สามารถจัดการได้อย่างมีประสิทธิภาพ (อาคาสอดคล้องกับ DFAs) มีความสำคัญสำหรับการประมวลผล SGML และ XML

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

นิพจน์ปกติที่กำหนดได้ในเวลาเชิงเส้นเบอนัวต์กรูซเซบาสเตียนมาเน ธ Slawomir Staworko 2012


5
คุณได้กล่าวถึงอนุพันธ์ในคำตอบของคุณแล้วดังนั้นคุณควรเพิ่ม JA Brzozowski: อนุพันธ์ของการแสดงออกปกติวารสาร ACM 11 (4): 481–494 (1964) เนื่องจากเขาให้อัลกอริธึมโดยตรงสำหรับการแปลง regexps เป็น DFAs .
Neel Krishnaswami

3
ฉันถกเถียงกันเรื่องนั้น แต่เอกสารทั้งสามด้านบนสร้างโดยตรงจากผลลัพธ์นั้นฉันคิดว่าไม่มีเหตุผลที่จะพูดถึง กระดาษของ Brueggeman-Klein และ Wood เต็มไปด้วยตัวอย่าง ถ้าฉันพูดถึง Brzozowski ฉันรู้สึกว่าควรพูดถึง Antimirov ด้วย ฉันต้องการหลีกเลี่ยงการสำรวจ แต่บางทีฉันควรจะไปสำรวจ พูดอะไร?
วีเจย์ D

5
หากคุณมีเวลาและพลังงานฉันคิดว่าคำตอบที่เหมือนการสำรวจความคิดเห็นมีความเหมาะสมมากที่นี่
David Eppstein

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