{ww '입니다 | HamDist (w, w ')> 1} 컨텍스트가 없습니까?


13

최근 질문을 읽은 후에 "의 보완 {www∣...} 문맥 자유?" ; 나는 반증 할 수 없었던 비슷한 문제를 기억했다.

L={ww′∣w,w′∈{0,1}∗∧|w|=|w′|∧HamDist(w,w′)>1} 입니까? ∗ ∧ | 승 | = | w ' | ∧ H a m D i s t ( w , w ′ ) > 1 } 컨텍스트가 없습니까?

여기서 우리는 두 스트링이 적어도 두 위치에서 달라야합니다 (해밍 거리는 1 보다 커야합니다 ).

만약 우리가 HamDist(w,w′)≥1 을 요구한다면 문맥이 없다 (즉, 두 줄은 단순히 달라야한다).

언어가 문맥에 맞지 않다고 생각합니다. 만약 우리가 언어를 규칙적인 0∗10∗10∗10∗ 와 교차 시키면 PDA가 줄의 절반에 도달 한 후 역순으로 두 위치를 "기억해야"하는 경우가 생깁니다.

업데이트 : 만약 우리가 L 을 규칙적인 R={0∗10∗10∗10∗} 과 교차한다면 우리 는 domotorp가 그의 답변에서 보여준 것처럼 문맥이없는 언어를 얻는다; R '' = { 0 * 10 * 10 * 10 * 10 * 10 * } (하나 이상 1 을 "추적")를 갖는 약간 더 복잡한 L∩R′ 는 여전히 L에 문맥이 없어야 함을 제안합니다 .R′={0∗10∗10∗10∗10∗10∗}1L


는 형태없는 정확히 말 그대로, 실제로 쉽게 승 w (교차 R ' ). L∩R′wwR′
— domotorp

@domotorp : 그렇습니다! 홀수 고정 변경 (응답이로에도 적용 할 수없는 한 S { ( 0 * 1 0 * ) (K) } 어떤 고정 ODD에 대한, K )1{(0∗10∗)k}k
— MARZIO 드 BIASI

마지막 의견 : 모든 종류의 순환 교대에 대해 문맥이없는 언어가 닫혀 있기 때문에 선행 0으로 시작하는 데 도움이되지 않습니다. 스택으로 밀어 넣고 마지막 심볼을 특수 기호로 표시하고 스택에서 시작하는 척하는 나머지 알고리즘을 수행하고 끝에서 비울 수 있습니다. (이 사용 -transitions,하지만 그와 같은 PDA가없는 것과 동일하다는 것을 쉽게이기도합니다.)ϵ
— domotorp

{0,1,2} 알파벳을 생각하고 정확히 두 개의 1과 2를 가진 문자열을 고려하는 것이 더 간단 할 수 있습니다. 1과 2 사이의 거리가 모두 n이면 언어가 아닙니다.
— Kaveh

답변:


4

PDA 가 어떤 방식 으로든 두 위치를 기억할 수 있기 때문에 R={0∗10∗10∗10∗∣ 짝수 단어 } 와의 교차점 은 컨텍스트가 없습니다 . 어쨌든 먼저이 언어 L 이 무엇인지 봅시다 . 그것의 보수는 R ∖ L = { 0 a 10 b 10 c 10 d ∣ b = n / 2 ∨ c = n / 2 ∨ a +LR∖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 = { 0 a 10 b 10 c 10 d ∣ b > n / 2 ∨ 로 다시 쓸 수 있습니다 L={0a10b10c10d∣b>n/2∨c>n/2∨a+d>n/2∨b,c,a+d<n/2} .

처음 3 가지 경우는 쉽게 확인할 수 있으며, 4 번째 경우도 쉽게 확인할 수 있습니다.

b>n/2 : 처음 1까지 스택을 넣은 다음 비어 있지 않을 때까지 스택에서 튀어 나오기 시작합니다. 비운 후 다시 두 번째 1에 도달 할 때까지 스택에 다시 넣습니다.

c>n/2 : 동일

a+d>n/2 : 처음 1까지 스택을 넣은 다음 비어 있지 않을 때까지 스택에서 튀어 나오기 시작합니다. 비운 후 다시 세 번째 1에 도달 할 때까지 스택에 다시 넣습니다.

b,c,a+d<n/2 : 처음 1까지 스택을 넣은 다음 비어 있지 않을 때까지 스택에서 튀어 나오기 시작합니다. 그것은 비어 후, 다시 우리가 도달 할 때까지 스택에 넣어 시작 +를 N / 2 (두 번째와 제 1 항 제 3 사이의 추측 비 결정적 어딘가에). 그런 다음 스택을 팝하십시오.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)}(왼쪽 절반에 2 개 1 개)의 반대 (오른쪽 절반에 2 개 1 개)를 결합합니다. 어떻게 을 얻 습니까? b=n/2∨c=n/2∨a+d=n/2
— Marzio De Biasi 2012 년

은 HamDist가 최대 1 인 것 입니다. 이것은 3 개의 1 중 하나가 일치하는 경우에 정확하게 발생합니다. 즉, 하나는 후반에있는 것과 같이 전반부에 동일한 위치에 있습니다. 이 두 1이 첫 번째와 두 번째 1이면 b = n / 2 이고 두 번째와 세 번째 1이면 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 : 아니요. 
— domotorp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.