ถ้าฉันต้องทำสิ่งนี้ในทางปฏิบัติฉันจะใช้ตัวแก้ SAT
คำถามที่ว่ามี DFA ที่มีฯ ที่รับxและปฏิเสธy หรือไม่นั้นสามารถแสดงเป็นอินสแตนซ์ SAT ได้อย่างง่ายดาย ยกตัวอย่างเช่นวิธีหนึ่งคือการมี2 k 2ตัวแปรบูล: Z s , ข, เสื้อเป็นจริงถ้าเปลี่ยน DFA จากรัฐsไปยังรัฐทีกับการป้อนข้อมูลบิตข แล้วเพิ่มคำสั่งบางอย่างในการบังคับใช้ว่านี้เป็น DFA และตัวแปรบางอย่างและการบังคับใช้คำสั่งว่าจะยอมรับxและปฏิเสธYkxY2 k2Zs , b , tsเสื้อขxY
ตอนนี้ใช้การค้นหาแบบไบนารีบนเพื่อค้นหาk ที่เล็กที่สุดซึ่งมี DFA ประเภทนี้อยู่ จากสิ่งที่ฉันอ่านในเอกสารเกี่ยวกับปัญหาที่เกี่ยวข้องฉันคาดหวังว่าสิ่งนี้อาจมีประสิทธิภาพพอสมควรในทางปฏิบัติkk
การเข้ารหัสอื่น ๆ นี้เป็น SAT เป็นไปได้ ตัวอย่างเช่นเราสามารถใช้การเข้ารหัสการติดตาม:
ถ้าเป็นความยาวเมตรคุณสามารถเพิ่มเมตรLG kตัวแปรบูล: Let s 0 , s 1 , ... , s เมตรเป็นลำดับของรัฐแยบยลในการป้อนข้อมูลที่xและตัวแทนของแต่ละs ฉันใช้⌈ LG k ⌉ตัวแปรบูลxม.มLGks0, s1, … , sม.xsผม⌈ lgk ⌉
ตอนนี้สำหรับแต่ละดังกล่าวว่าx ฉัน = x เจคุณมีข้อ จำกัด ที่s ฉัน- 1 = s J - 1ฉัน, Jxผม= xJเจsฉัน- 1= sj - 1⟹sผม= sJ
ถัดไปขยายนี้เพื่อจับ : ให้ที0 , ... , เสื้อnเป็นลำดับของรัฐแยบยลในการป้อนข้อมูลYและตัวแทนของแต่ละทีเจใช้LG kตัวแปรบูล สำหรับแต่ละผม, เจดังกล่าวว่าปีฉัน = Y Jเพิ่มข้อ จำกัด ที่ทีฉัน- 1 = เสื้อJ - 1Yเสื้อ0, … , tnYเสื้อJLGkฉัน, JYผม= yJ Jเสื้อฉัน- 1= tj - 1⟹เสื้อผม= tJ
ในทำนองเดียวกันสำหรับแต่ละดังกล่าวว่าx ฉัน = Y Jเพิ่มข้อ จำกัด ที่s ฉัน- 1 = เสื้อJ - 1ฉัน, Jxผม= yJ Jsฉัน- 1= tj - 1⟹sผม=tJ
การติดตามทั้งสองจะต้องเริ่มจากจุดเริ่มต้นเดียวกันดังนั้นเพิ่มข้อกำหนดที่ (WLOG คุณสามารถต้องการs 0 = t 0 = 0 )s0= t0s0= t0= 0
เพื่อให้แน่ใจว่า DFA ใช้เพียงรัฐจำเป็นต้องให้0 ≤ s ฉัน < kและ0 ≤ ทีเจ < kสำหรับทุกฉัน, Jk0 ≤ sผม< k0 ≤ tJ< kฉัน, J
สุดท้ายการเข้ารหัสความต้องการที่เป็นที่ยอมรับและy ที่ถูกปฏิเสธต้องการให้s เมตร ≠ เสื้อ nxYsม.≠ tn
ข้อกำหนดทั้งหมดเหล่านี้สามารถเข้ารหัสเป็นคำสั่ง SAT
ก่อนหน้านี้คุณจะใช้การค้นหาแบบไบนารีบนเพื่อค้นหาk ที่เล็กที่สุดที่มี DFA อยู่kk