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


13

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

L={www,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 을 요구한다면 문맥이 없다 (즉, 두 줄은 단순히 달라야한다).

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

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


는 형태없는 정확히 말 그대로, 실제로 쉽게w (교차 R ' ). LRwwR
domotorp

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

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

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

답변:


4

PDA 어떤 방식 으로든 두 위치를 기억할 있기 때문에 R={0101010 짝수 단어 } 와의 교차점 은 컨텍스트가 없습니다 . 어쨌든 먼저이 언어 L 이 무엇인지 봅시다 . 그것의 보수는 R L = { 0 a 10 b 10 c 10 db = n / 2 c = n / 2 a +LRL={0a10b10c10db=n/2c=n/2a+d=n/2} . 따라서 L={0a10b10c10dbn/2cn/2a+dn/2} 입니다. 이것을 L = { 0 a 10 b 10 c 10 db > n / 2 로 다시 쓸 수 있습니다 L={0a10b10c10db>n/2c>n/2a+d>n/2b,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 ) }RL{0a10b10c0c10d (n/2=a+b+c=c+d+1)[(a=c)(c=d)}(왼쪽 절반에 2 개 1 개)의 반대 (오른쪽 절반에 2 개 1 개)를 결합합니다. 어떻게 을 얻 습니까? b=n/2c=n/2a+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 / 2RL1b=n/2c=n/2b+c=n/2a+d=n/2(여기서 나는 일정한 로 약간의 부정 행위를하고 있습니다) ±1
domotorp

이것이 전체 질문에 대한 답변입니까?
Michaël Cadilhac

LR={...bn/2cn/2...}LR={...b>n/2c>n/2b,c<n/2}LR={...(b<n/2b>n/2)(c<n/2c>n/2)}a+d

@Michael : 아니요. 
domotorp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.