อัลกอริทึมเพื่อตรวจสอบว่าทั้งสอง regexes เทียบเท่า


12

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

โดยทั่วไปเราสามารถคำนวณขนาดของทางแยกของชุดการแข่งขันทั้งสองได้หรือไม่?

มีอัลกอริธึมอะไรบ้างในการทำสิ่งนี้และพวกเขาอาศัยอยู่ในระดับความซับซ้อนอะไร?

หากเราไม่อนุญาตให้ดาว Kleene นั่นเปลี่ยนรูปภาพได้หรือไม่?


คุณหมายถึงอะไรโดย "ขนาดของทางแยก"? ในกรณีที่น่าสนใจที่สุดจะมีขนาดใหญ่มาก คุณสนใจในขนาด wrt หรือไม่? Σn
กราฟิลส์

@ ราฟาเอลความเข้าใจของฉันคือการกำจัดดาว Kleene ทำให้ขนาดของเซตนั้น จำกัด
ทางคณิตศาสตร์

ขึ้นอยู่กับ ผู้ประกอบการรายอื่นที่ได้รับอนุญาต หากคุณยอมให้สิ่งที่คุณพูดนั้นไม่จริง นอกจากนี้คุณยังถามถึงสถานการณ์ที่มีดาว Kleene ด้วยดังนั้นคุณต้องชี้แจงต่อไป
Raphael

คำตอบ:


12

Hendrik Jan ให้คำตอบที่ดีสำหรับคลาสความซับซ้อน แต่ไม่ใช่อัลกอริธึมเอง

อัลกอริทึมที่ง่ายที่สุดในการทำสิ่งนี้ที่ฉันรู้คือการแปลงนิพจน์ปกติเป็น DFA มีเทคนิคที่รู้จักกันสำหรับการแปลงนิพจน์ปกติเป็น NFA และ NFA เป็น DFA

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

อย่างไรก็ตามการสร้าง DFA เหล่านี้จาก NFAs อาจใช้เวลานานและสร้าง DFAS ที่มีขนาดใหญ่มากซึ่งมีขนาดใหญ่เป็นทวีคูณในกรณีที่เลวร้ายที่สุด


11

การรู้เท่ากันของนิพจน์ทั่วไปเป็นที่รู้จักกันในชื่อ PSPACE-complete ซึ่งค่อนข้างแย่ กระดาษ "ความซับซ้อนของปัญหาการตัดสินใจสำหรับนิพจน์ทั่วไปอย่างง่าย" จะแสดงรายการคลาสย่อยของนิพจน์ทั่วไปที่มีความซับซ้อนตามลำดับ ( ลิงก์ )


1
อี2อีอี

@dkuper ขอบคุณสำหรับคำอธิบายเพิ่มเติม อย่าลังเลที่จะแก้ไขคำตอบเพื่อเพิ่มการอ้างอิงนี้หรือที่เหมาะสม (หรือแม้แต่เริ่มคำตอบของคุณเอง)
Hendrik Jan

มีการอ้างอิงสำหรับนิพจน์ทั่วไปทั่วไปที่จะเสร็จสมบูรณ์ PSPACE หรือไม่
Ryan

ลิงก์ของคุณเสียชีวิต คุณสามารถให้ข้อมูลสดใหม่หรืออย่างน้อยบางส่วนของข้อมูลที่เกี่ยวข้องจากกระดาษ?
D. Ben Knoble

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