เนื่องจากคุณต้องการ "แปลง regex เป็น DFA ในเวลาน้อยกว่า 30 นาที" ฉันคิดว่าคุณกำลังทำงานด้วยมือกับตัวอย่างที่ค่อนข้างเล็ก
ในกรณีนี้คุณสามารถใช้อัลกอริทึมของ Brzozowski ซึ่งคำนวณหุ่นยนต์ Nerode ของภาษาโดยตรง (ซึ่งเป็นที่ทราบกันว่ามีค่าเท่ากับหุ่นยนต์ที่กำหนดน้อยที่สุด) มันขึ้นอยู่กับการคำนวณโดยตรงของอนุพันธ์และยังใช้งานได้สำหรับการแสดงผลปกติแบบขยายที่ช่วยให้การแยกและการเติมเต็ม ข้อเสียเปรียบของอัลกอริทึมนี้คือต้องตรวจสอบความเท่าเทียมกันของนิพจน์ที่คำนวณไปพร้อมกันซึ่งเป็นกระบวนการที่มีราคาแพง แต่ในทางปฏิบัติและสำหรับตัวอย่างเล็ก ๆ มันมีประสิทธิภาพมาก[1]
บวกลบคูณหารซ้าย ให้เป็นภาษาของและให้เป็นคำ จากนั้น
ภาษาจะเรียกว่าเป็นความฉลาดทางด้านซ้าย (หรือซ้ายอนุพันธ์ ) ของLLA∗u
u−1L={v∈A∗∣uv∈L}
u−1LL
หุ่นยนต์ Nerode หุ่นยนต์ Nerodeของเป็นกำหนดหุ่นยนต์ที่ ,และมีการกำหนดฟังก์ชั่นการเปลี่ยนสำหรับแต่ละโดยสูตร
ระวังคำจำกัดความที่เป็นนามธรรมนี้ สถานะของแต่ละเป็นความฉลาดทางด้านซ้ายของโดยคำและด้วยเหตุนี้ภาษาของ * สถานะเริ่มต้นคือภาษาและชุดของสถานะสุดท้ายคือชุดของผลหารทางซ้ายทั้งหมดของLA(L)=(Q,A,⋅,L,F)Q={u−1L∣u∈A∗}F={u−1L∣u∈L}a∈A
(u−1L)⋅a=a−1(u−1L)=(ua)−1L
ALA∗LLด้วยคำพูดของL
L
อัลกอริทึมของ Brzozowski ให้เป็นตัวอักษร เราสามารถคำนวณหารซ้ายโดยใช้สูตรต่อไปนี้:
a,b
a−11a−1(L1∪L2)a−1(L1∩L2)=0=a−1L1∪u−1L2,=a−1L1∩u−1L2,a−1ba−1(L1∖L2)a−1L∗={10if a=bif a≠b=a−1L1∖u−1L2,=(a−1L)L∗
a−1(L1L2)={(a−1L1)L2(a−1L1)L2∪a−1L2si 1∉L1,si 1∈L1
ตัวอย่าง สำหรับเราได้รับอย่างต่อเนื่อง:
ซึ่งให้ออโตขั้นต่ำต่อไปนี้
L=(a(ab)∗)∗∪(ba)∗
1−1La−1L1b−1L1a−1L2b−1L2a−1L3b−1L3a−1L4b−1L4a−1L5b−1L5=L=L1=(ab)∗(a(ab)∗)∗=L2=a(ba)∗=L3=b(ab)∗(a(ab)∗)∗∪(ab)∗(a(ab)∗)∗=bL2∪L2=L4=∅=(ba)∗=L5=∅=a−1(bL2∪L2)=a−1L2=L4=b−1(bL2∪L2)=L2∪b−1L2=L2=∅=a(ba)∗=L3
[1] J. Brzozowski, อนุพันธ์ของการแสดงออกปกติ, J.ACM 11 (4), 481–494, 1964
แก้ไข (5 เมษายน 2015) ฉันเพิ่งค้นพบว่าคำถามที่คล้ายกัน: อัลกอริทึมอะไรอยู่สำหรับการสร้าง DFA ที่รับรู้ภาษาที่อธิบายโดย regex ที่กำหนด? ถูกถามใน cstheory คำตอบบางส่วนแก้ไขปัญหาความซับซ้อน
a(a|ab|ac)*a+
มันอาจจะเป็นประโยชน์ในการอธิบายกระบวนการของคุณด้วยตัวอย่างเช่น คุณสามารถแปลสิ่งนั้นเป็น NDFA โดยตรงซึ่งคุณลดให้เป็น DFA หรือคุณสามารถทำให้มาตรฐานเป็นสิ่งที่แมปกับ DFA ได้ทันที