ค้นหา DFA ที่เล็กที่สุดที่แยกสองคำโดยไม่ใช้การค้นหาแบบ brute force หรือไม่


23

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

ฉันต้องการทราบว่ามีวิธีอื่นที่รู้จักในการค้นหาหรือสร้าง DFA ขนาดต่ำสุดที่ยอมรับ x และปฏิเสธ y หรือไม่ กล่าวอีกนัยหนึ่งเราสามารถเอาชนะการค้นหากำลังดุร้ายได้หรือไม่?

รายละเอียดเพิ่มเติม:

(1) ฉันต้องการอัลกอริทึมในการหา DFA ขนาดต่ำสุดไม่ใช่ DFA ขนาดใกล้เคียงที่สุด

(2) ฉันไม่เพียง แต่ต้องการทราบว่า DFA ขั้นต่ำเล็กหรือใหญ่เพียงใด

(3) ตรงนี้ฉันแค่เน้นไปที่กรณีที่คุณมีสองสาย x และ y


แก้ไข :

ข้อมูลเพิ่มเติมสำหรับผู้อ่านที่สนใจ:

สมมติว่าและy ที่มีสตริงไบนารีของความยาวที่มากที่สุดn มันเป็นผลลัพธ์ที่ทราบว่ามี DFA ที่ยอมรับxและปฏิเสธyด้วยอย่างมากxynxyรัฐ สังเกตว่ามีประมาณnn DFA ด้วยตัวอักษรไบนารีและสูงสุดnnรัฐ ดังนั้นวิธีการบังคับเดรัจฉานจะไม่เราต้องระบุถึงมากกว่าnn DFA มันเป็นไปตามที่วิธีเดรัจฉานบังคับไม่สามารถใช้มากกว่าnnnเวลาnn

สไลด์ที่ฉันพบว่ามีประโยชน์: https://cs.uwaterloo.ca/~shallit/Talks/sep2.pdf


2
@ AndrásSalamonมันยังคงสมบูรณ์ NP หรือไม่ถ้าชุดที่จะแตกต่างแต่ละคนประกอบด้วยเพียงหนึ่งสาย? ฉันรู้สึกเหมือนว่าสิ่งนี้ควรจะสามารถหยั่งรู้ได้อย่างสมเหตุสมผล
mhum

6
@mum ปัญหาที่มีภาษาปกติต่าง ๆ มากมายที่แยกทั้งสองสาย - การย่อขนาด DFA จะค้นหา automaton ที่ดีที่สุดสำหรับหนึ่งในภาษาเหล่านี้ แต่จะไม่ทำอะไรเลยเพื่อเปรียบเทียบกับ automata สำหรับภาษาอื่น ๆ ที่แยกออกมา
David Eppstein

4
ถ้าและyมีความยาวต่างกันด้วยความยาวที่ใหญ่กว่าnมันง่ายที่จะหา DFA ที่มีสถานะO ( log n )ที่แยกพวกมันออกอย่างรวดเร็ว: เพียงแค่ใช้วงจรของความยาวpโดยที่pไม่ได้แบ่ง| x | - | y | . ค้นหาหน้าโดยพยายามที่2 , 3 , 5 , ...ในการสั่งซื้อจนกว่าคุณจะพบที่เหมาะสมพี ถ้าxและyมีความยาวเท่ากันดังนั้นOxynO(logn)pp|x||y|p2,3,5,pxyการก่อสร้างของร็อบสันในกระดาษปี 1996 จะช่วยให้เครื่องที่เรียบง่ายที่สามารถพบได้โดยการค้นหาของขนาดO(n) ไม่รับประกันการก่อสร้างว่าจะเป็น DFA ที่เล็กที่สุด O(n)O(n)
Jeffrey Shallit

3
บันทึกของ Shallit ที่เชื่อมโยงด้านบนนั้นรวมถึงการสังเกตที่มีประโยชน์ว่ากรณีที่แย่ที่สุดสำหรับปัญหาการแยกคือเมื่อตัวอักษรเป็นเลขฐานสอง: มันเป็นไปได้เสมอที่จะแบ่งตัวอักษรขนาดใหญ่เป็นสองชุดย่อยที่ยังคงแยกแยะ ตัวอักษรในชุดย่อยหนึ่งชุดเป็น 0 และตัวอักษรในชุดย่อยอื่น ๆ เป็น 1 แต่สำหรับการค้นหาขั้นต่ำของการแยกหุ่นยนต์สิ่งนี้ดูเหมือนจะไม่ช่วยได้เพราะคุณอาจใช้ข้อมูลเพิ่มเติมจากตัวอักษรดั้งเดิมเพื่อทำได้ดีกว่าที่คุณสามารถทำได้ด้วยการทำแผนที่กับตัวอักษรไบนารี
David Eppstein

3
เป็นกรณีพิเศษของคำถามนี้ล่าสุดอื่น ๆ ที่อยู่ในชุดและออกชุดขนาดเท่ากับ 1. ออโต จำกัด น้อยที่สุดที่ได้รับในคำพูดและการออกคำ คำตอบนั้นแสดงวรรณกรรมการเรียนรู้บางส่วนรวมถึงฮิวริสติกบางส่วน
vzn

คำตอบ:


9

ถ้าฉันต้องทำสิ่งนี้ในทางปฏิบัติฉันจะใช้ตัวแก้ SAT

คำถามที่ว่ามี DFA ที่มีฯ ที่รับxและปฏิเสธy หรือไม่นั้นสามารถแสดงเป็นอินสแตนซ์ SAT ได้อย่างง่ายดาย ยกตัวอย่างเช่นวิธีหนึ่งคือการมี2 k 2ตัวแปรบูล: Z s , , เสื้อเป็นจริงถ้าเปลี่ยน DFA จากรัฐsไปยังรัฐทีกับการป้อนข้อมูลบิตข แล้วเพิ่มคำสั่งบางอย่างในการบังคับใช้ว่านี้เป็น DFA และตัวแปรบางอย่างและการบังคับใช้คำสั่งว่าจะยอมรับxและปฏิเสธYkxy2k2zs,b,tstbxy

ตอนนี้ใช้การค้นหาแบบไบนารีบนเพื่อค้นหาk ที่เล็กที่สุดซึ่งมี DFA ประเภทนี้อยู่ จากสิ่งที่ฉันอ่านในเอกสารเกี่ยวกับปัญหาที่เกี่ยวข้องฉันคาดหวังว่าสิ่งนี้อาจมีประสิทธิภาพพอสมควรในทางปฏิบัติkk


การเข้ารหัสอื่น ๆ นี้เป็น SAT เป็นไปได้ ตัวอย่างเช่นเราสามารถใช้การเข้ารหัสการติดตาม:

  • ถ้าเป็นความยาวเมตรคุณสามารถเพิ่มเมตรLG kตัวแปรบูล: Let s 0 , s 1 , ... , s เมตรเป็นลำดับของรัฐแยบยลในการป้อนข้อมูลที่xและตัวแทนของแต่ละs ฉันใช้LG k ตัวแปรบูลxmmlgks0,s1,,smxsilgk

  • ตอนนี้สำหรับแต่ละดังกล่าวว่าx ฉัน = x เจคุณมีข้อ จำกัด ที่s ฉัน- 1 = s J - 1i,jxi=xjเจsi1=sj1si=sj

  • ถัดไปขยายนี้เพื่อจับ : ให้ที0 , ... , เสื้อnเป็นลำดับของรัฐแยบยลในการป้อนข้อมูลYและตัวแทนของแต่ละทีเจใช้LG kตัวแปรบูล สำหรับแต่ละผม, เจดังกล่าวว่าปีฉัน = Y Jเพิ่มข้อ จำกัด ที่ทีฉัน- 1 = เสื้อJ - 1yt0,,tnytjlgki,jyi=yj Jti1=tj1ti=tj

  • ในทำนองเดียวกันสำหรับแต่ละดังกล่าวว่าx ฉัน = Y Jเพิ่มข้อ จำกัด ที่s ฉัน- 1 = เสื้อJ - 1i,jxi=yj Jsi1=tj1si=tj

  • การติดตามทั้งสองจะต้องเริ่มจากจุดเริ่มต้นเดียวกันดังนั้นเพิ่มข้อกำหนดที่ (WLOG คุณสามารถต้องการs 0 = t 0 = 0 )s0=t0s0=t0=0

  • เพื่อให้แน่ใจว่า DFA ใช้เพียงรัฐจำเป็นต้องให้0 s ฉัน < kและ0 ทีเจ < kสำหรับทุกฉัน, Jk0si<k0tj<ki,j

  • สุดท้ายการเข้ารหัสความต้องการที่เป็นที่ยอมรับและy ที่ถูกปฏิเสธต้องการให้s เมตรเสื้อ nxysmtn

ข้อกำหนดทั้งหมดเหล่านี้สามารถเข้ารหัสเป็นคำสั่ง SAT

ก่อนหน้านี้คุณจะใช้การค้นหาแบบไบนารีบนเพื่อค้นหาk ที่เล็กที่สุดที่มี DFA อยู่kk


3
โปรดทราบว่านี่จะดีกว่าการค้นหากำลังดุร้ายหากมีปัญหาบางอย่างในตัวแก้ปัญหาและพวกมันได้รับการยอมรับจากผู้แก้ปัญหา แต่ในปัจจุบันอาจเป็นเรื่องยากที่จะระบุ / แยกพวกนั้นออก (สำหรับมนุษย์หรือเครื่องจักร) นอกจากนี้ยังมี "เทคโนโลยี" ที่ใหม่กว่า / เกี่ยวข้องกับทฤษฎีโมดูโลที่น่าพอใจและการตั้งค่าชุดคำตอบซึ่งบางส่วนมีภาคแสดงกราฟ "ในตัว" หรือสนับสนุนคำจำกัดความของพวกเขา
vzn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.