คือ {ww '| HamDist (w, w ')> 1} ไม่มีบริบทหรือ


13

หลังจากอ่านคำถามล่าสุด"เป็นส่วนเติมเต็มของบริบทหรือไม่" {www∣...}; ฉันจำปัญหาที่คล้ายกันฉันไม่สามารถพิสูจน์ได้ว่า:

คือบริบทฟรีL={ww′∣w,w′∈{0,1}∗∧|w|=|w′|∧HamDist(w,w′)>1}

ที่นี่เราต้องการให้ทั้งสองสายแตกต่างกันอย่างน้อยสองตำแหน่ง (ระยะ Hamming จะต้องมากกว่า )1

ไม่มีบริบทหากเราต้องการ (นั่นคือทั้งสองสตริงจะต้องแตกต่างกัน)HamDist(w,w′)≥1

ฉันสงสัยว่าภาษานั้นไม่มีบริบท: ถ้าเราตัดมันด้วยค่าปกติ เราจะได้รับกรณีที่ PDA ควร "จดจำ" สองตำแหน่งในลำดับย้อนหลังหลังจากถึงครึ่ง ของสตริง0∗10∗10∗10∗

อัปเดต:หากเราตัดด้วยค่าปกติเราจะได้รับภาษาที่ไม่มีบริบทตามที่แสดงโดย domotorp ในคำตอบของเขา; ที่ซับซ้อนกว่าเล็กน้อยด้วย (อีกถึง "ติดตาม" ของ) ยังแนะนำไม่ควรเป็นแบบไม่มีบริบทLR={0∗10∗10∗10∗}L∩R′R′={0∗10∗10∗10∗10∗10∗}1L


w w R ′L∩R′ง่ายกว่าจริง ๆ เพราะมันเป็นคำที่ไม่ตรงกับรูปแบบ (ตัดด้วย ) wwR′
— domotorp

@domotorp: ถูกต้อง! เปลี่ยนไปเป็นคี่คงที่ s (ถ้าคำตอบของคุณอาจจะดัดแปลงยัง สำหรับแปลกคงที่ ){ ( 0 ∗ 1 0 ∗ ) k } k1{(0∗10∗)k}k
— Marzio De Biasi

หนึ่งความคิดเห็นสุดท้าย: มันไม่ได้ช่วยเริ่มต้นด้วยศูนย์นำเนื่องจากภาษาปลอดบริบทถูกปิดสำหรับวงจรกะทุกประเภท คุณสามารถผลักมันไปที่สแต็กทำเครื่องหมายสัญลักษณ์สุดท้ายด้วยสัญลักษณ์พิเศษทำส่วนที่เหลือของอัลกอริทึมที่แสร้งทำเป็นว่าสแต็กเริ่มต้นที่นั่นและท้ายที่สุดจะว่างเปล่า (ใช้นี้ -transitions แต่ที่ยังง่ายต่อว่าเช่น PDA เทียบเท่ากับคนที่ไม่มี.)ϵ
— domotorp

มันอาจจะง่ายกว่าที่จะคิดเกี่ยวกับตัวอักษร {0,1,2} และพิจารณาสตริงที่มีสอง 1 วินาทีและ 2 วินาที มันไม่ได้อยู่ในภาษาของคุณหากระยะห่างระหว่าง 1s และระยะห่างระหว่าง 2s ทั้งคู่เป็น n
— Kaveh

คำตอบ:


4

จุดตัดที่มีR={0∗10∗10∗10∗∣แม้กระทั่งคำที่มีความยาว}จะไม่มีบริบทเนื่องจาก PDA สามารถจดจำตำแหน่งที่สองได้ ก่อนอื่นเรามาดูกันว่าภาษานี้Lคืออะไร ส่วนประกอบของมันคือ R∖L={0a10b10c10d∣b=n/2∨c=n/2∨a+d=n/2} } ดังนั้น L={0a10b10c10d∣b≠n/2∧c≠n/2∧a+d≠n/2} } เราสามารถเขียนสิ่งนี้เป็น L={0a10b10c10d∣b>n/2∨c>n/2∨a+d>n/2∨b,c,a+d<n/2} }

3กรณีแรกสามารถตรวจสอบได้ง่ายและกรณีที่สี่ก็สามารถทำได้

b>n/2 : เริ่มวางในสแต็กจนกระทั่ง 1 แรกจากนั้นเริ่ม popping จากสแต็กจนกว่าจะไม่ว่างเปล่า หลังจากที่ว่างเปล่าอีกครั้งเริ่มวางในสแต็กจนกว่าเราจะถึงที่สอง 1 จากนั้นในกองป๊อปอัพ

c>n/2 : เหมือนกัน

a+d>n/2 : เริ่มวางในสแต็กจนกระทั่ง 1 แรกจากนั้นเริ่ม popping จากสแต็กจนกว่าจะไม่ว่างเปล่า หลังจากที่ว่างเปล่าอีกครั้งเริ่มวางในสแต็กจนกว่าเราจะถึง 1 ที่สามจากนั้นในกองป๊อปอัพ

b,c,a+d<n/2 : เริ่มใส่ในกองจนกระทั่ง 1 แรกจากนั้นเริ่ม popping จากกองจนกว่าจะไม่ว่างเปล่า หลังจากที่มันว่างเปล่าอีกครั้งเริ่มวางในกองจนกว่าจะถึง + n / 2 (เดาไม่ใช่ deterministically บางระหว่างสองและสาม 1) จากนั้นป๊อปอัพสแต็คa+n/2


ขอบคุณ domotorp ฉันกำลังอ่านความคิดของคุณ ฉันคิดว่าคือ{ 0 a 1 0 b 1 0 c ′ 0 c ″ 1 0 d ∣ ( n / 2 = a + b + c ′ = c ″ + d + 1 ) ∧ [ ( a = c ″ ) ∨ ( c ′ = d ) }R∖L{0a10b10c′0c″10d∣ (n/2=a+b+c′=c″+d+1)∧[(a=c″)∨(c′=d)}(สองครึ่งทางซ้าย) รวมตัวกลับด้าน (สองครึ่งทางขวา) ดังนั้นคุณจะได้รับอย่างไร b=n/2∨c=n/2∨a+d=n/2
— Marzio De Biasi

เป็นที่ HamDist ที่มากที่สุด1 สิ่งนี้จะเกิดขึ้นอย่างแน่นอนหากการแข่งขันสองในสามครั้งคือหนึ่งอยู่ในตำแหน่งเดียวกันในครึ่งแรกเช่นเดียวกับอีกครึ่งหนึ่ง ถ้า 1 สองตัวนี้เป็น 1 ตัวแรกและตัวที่สองเราจะได้ b = n / 2ถ้าพวกมันเป็นอันดับสองและสามเราจะได้ c = n / 2และถ้าพวกมันเป็น 1 และสามอันดับแรกเราจะได้ b + c = n / 2หรือเทียบเท่า a + d = n / 2R⊂L1b=n/2c=n/2b+c=n/2a+d=n/2(ที่ฉันโกงนิดหน่อยด้วยค่าคงที่ ) ±1
— domotorp

นี่ตอบคำถามเต็มหรือไม่?
— Michaël Cadilhac

L∩R={...b≠n/2∧c≠n/2...}L∩R={...b>n/2∨c>n/2∨b,c<n/2}L∩R={...(b<n/2∨b>n/2)∧(c<n/2∨c>n/2)}a+d

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