การต่อกันของสองภาษาปกติไม่ชัดเจนเมื่อใด


16

ได้รับภาษาและB , ขอบอกว่าการเรียงต่อกันของพวกเขาBเป็นที่ชัดเจนถ้าสำหรับทุกคำW Bมีอีกหนึ่งการสลายตัวW = กับและBและคลุมเครืออย่างอื่น (ฉันไม่รู้ว่ามีคำศัพท์ที่สร้างขึ้นสำหรับสถานที่ให้บริการนี้หรือไม่ - ยากที่จะค้นหา!) เป็นตัวอย่างที่น่าสนใจการต่อเชื่อม{ ε , a }กับตัวเองนั้นคลุมเครือ ( w = aABABwABw=abaAbB{ε,a} ) แต่การต่อกันของ { a }กับตัวเองนั้นไม่คลุมเครือw=a=εa=aε{a}

มีอัลกอริทึมสำหรับการตัดสินใจว่าการต่อเชื่อมภาษาสองภาษาปกติไม่คลุมเครือหรือไม่?


1
ใช่นี่เป็นปัญหาครั้งแรกของ CS ใช่ไหม? สุจริตฉันไม่ได้พยายามมาก ฉันหวังว่าจะมีอัลกอริธึมที่กำหนดไว้สำหรับเรื่องนี้ที่ใดที่หนึ่งในวรรณคดีและฉันจะไม่ต้องไปสร้างใหม่ล้อ ฉันกำลังเขียนซอฟต์แวร์ตรงนี้ ฉันเพิ่งเรียนหลักสูตร CS เพียงไม่กี่ปี (หลายปีที่ผ่านมา) ดังนั้นโดยทั่วไปฉันเริ่มจากวิกิพีเดีย ฉันรู้ว่าไม่มีใครชอบใครซักคนที่ไม่ต้องการทำงานเพื่อหาคำตอบดังนั้นถ้ามีตำราหรือกระดาษหรือสิ่งที่คุณสามารถชี้ให้ฉันแทนที่จะส่งอัลกอริทึมให้ฉันนั่นจะเป็นประโยชน์! ขอบคุณ!
rstern

ฉันเพิ่มสิ่งนี้เป็นความคิดเห็นเพราะมันค่อนข้างปิดหัวข้อ แต่อาจนำคุณไปสู่ความช่วยเหลือ Unicode Consortium มีกระบวนการบางอย่างสำหรับการพิจารณาความเหมือนกันระหว่างภาษา ฉันได้อ่านลิงค์ข้อมูลบนเว็บไซต์ของพวกเขาแล้ว แต่สำหรับชีวิตของฉันฉันไม่สามารถหาได้ในวันนี้เพื่อให้คำตอบนี้แทน หากคุณมีเวลาค้นคว้าสิ่งนี้ที่นี่คือหน้าคำถามที่พบบ่อยของพวกเขาunicode.org/faq
htm11h

คำตอบ:


10

คำแนะนำ: ให้ DFA สำหรับและBสร้าง NFA ซึ่งยอมรับคำในA B ที่มีการแยกย่อยอย่างน้อยสองแบบ NFA ติดตามสำเนาที่สองของ NFA มาตรฐานB (ที่เกิดขึ้นจากการเข้าร่วม DFAs สำหรับและBกับεเปลี่ยน) เพื่อให้มั่นใจว่าสวิทช์จากเพื่อBที่เกิดขึ้นในสองจุดที่แตกต่างกันABABABABϵAB


ขอบคุณสำหรับคำใบ้! ดังนั้นถ้าฉันเข้าใจฉันสามารถสร้าง NFA สำหรับคำที่คลุมเครือในจากนั้นทดสอบออโตเมตาเพื่อหาความว่างเปล่า ส่วนที่ยุ่งยากดูเหมือนว่าจะ "สร้างความมั่นใจว่าสวิทช์จากเพื่อBที่เกิดขึ้นในสองจุดที่แตกต่างกัน" ฉันไม่แน่ใจว่าจะทำอย่างนั้นได้อย่างไรนอกจากใช้ผลิตภัณฑ์ Cross (?) ของDFA A Bสองรายการและการลบสถานะผลิตภัณฑ์ ( A -terminal, A -terminal) ทั้งหมด - ฉันกำลัง handwaving ฉันกังวลว่า การเปลี่ยนจากA B NFA เป็น A B DFA จะคลาดเคลื่อนกับแนวคิดของAABABABAAABABA-terminal เสียงเอ่อไม่มีประสิทธิภาพแม้ว่า; มีอัลกอริทึมที่รู้จักกันดีสำหรับซอฟต์แวร์หรือไม่
rstern

ใช่มันไม่ได้ฟังดูมีประสิทธิภาพเกินไปแม้ว่าจะมีตัวเลือกในการทำอย่างฉลาดอยู่เสมอ ฉันไม่ได้ตระหนักถึงอัลกอริทึมเฉพาะสำหรับปัญหานี้ แต่อาจมีอยู่
Yuval Filmus

7

อัปเดต (ขอบคุณ Yuval Filmus)

ให้สองภาษาและYของA , ให้ X - 1 YXYA ผมอ้างว่าXYเป็นที่ชัดเจนและถ้าหากภาษาX-1XYY-1+เป็นที่ว่างเปล่า

X1Y={uAthere exists xX such that xuY}YX1={uAthere exists xX such that uxY}
XYX1XYY1A+

Proof. Suppose that XY is ambiguous. Then there exists a word u which has two decompositions over XY, say u=x1y2=x2y1, where x1,x2X and y1,y2Y. Without loss of generality, we may assume that x1 is a prefix of x2, that is, x2=x1zzA+u=x1y2=x1zy1y2=zy1zX1XYY1

X1XYY1 contains some nonempty word z. Then there exist x1,x2X and y1,y2Y such that x2=x1z and y2=zy1. It follows that x2y1=x1zy1=x1y2 and hence the product XY is ambiguous.

If X and Y are regular, then both X1X and YY1 are regular and thus X1XYY1 is also regular (see Yuval's answer for an automaton accepting this language).


What if z is the empty word?
Yuval Filmus

Ooops. I update.
J.-E. Pin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.