끈을 풀기가 얼마나 어렵습니까?


117

두 문자열의 셔플은 문자를 새 문자열로 산재하여 각 문자열의 문자를 순서대로 유지함으로써 형성됩니다. 예를 들어 및 MISSISSIPPI의 셔플입니다 . 두 개의 동일한 문자열이 섞인 문자열 사각형을 호출하겠습니다 . 예를 들어 and 는 셔플이므로 정사각형 이지만 문자열 은 정사각형이 아닙니다.MISIPPSSISIABCABDCDABCDABCDABCDDCBA

문자열이 정사각형인지 아니면 NP-hard인지 결정하는 빠른 알고리즘이 있습니까? 명백한 동적 프로그래밍 접근법이 작동하지 않는 것 같습니다.

(1) 각 문자가 최대 여섯 번 나타나는 문자열과 (2) 두 개의 고유 한 문자 만있는 문자열 은 다음과 같은 특수한 경우에도 어려운 것처럼 보입니다 . Per Austrin이 아래에 지적한 것처럼 각 문자가 최대 4 번 나타나는 특수한 경우를 2SAT로 줄일 수 있습니다.


업데이트 : 이 문제에는 경도를 쉽게 향상시킬 수있는 또 다른 공식이 있습니다.

정점이 정수 1-n 인 그래프 G를 고려하십시오. 끝점 사이의 실제 간격으로 각 모서리를 식별합니다. 한 구간에 다른 구간이 제대로 포함되면 G의 두 모서리가 중첩 됩니다. 예를 들어 가장자리 (1,5) 및 (2,3)은 중첩되지만 (1,3) 및 (5,6)은 중첩되지 않으며 (1,5) 및 (2,8)은 중첩되지 않습니다. 가장자리 쌍이 중첩 되어 있지 않으면 G에서 일치하는 부분은 중첩 되지 않습니다 . G에 중첩되지 않은 완벽한 일치가 있는지 여부를 결정하는 빠른 알고리즘이 있습니까? 아니면 문제가 NP-hard입니까?

  • 문자열을 섞지 않는 것은 분리되지 않은 파벌 조합 (같은 문자 사이의 가장자리)에서 중첩되지 않은 완벽한 일치를 찾는 것과 같습니다. 특히, 이진 문자열을 셔플 링하는 것은 두 개의 도끼 의 분리 된 결합에서 중첩되지 않은 완벽한 일치를 찾는 것과 같습니다 . 그러나이 문제가 일반 그래프에 어려운지 또는 흥미로운 그래프 클래스에 대해 쉬운 지조차 알 수 없습니다.

  • 완벽한 비 쉽게 찾을 수 다항식 시간 알고리즘이 교차 matchings은.


업데이트 (2013 년 6 월 24 일) : 문제가 해결되었습니다! 이제 정사각형 문자열을 식별하는 것이 NP- 완전하다는 두 가지 독립적 인 증거가 있습니다.

비 중첩 완벽한 matchings을 찾는 것은 인해 슈 아이 쳉 리와 "2009 페이지에 명나라 리에, NP-어렵다는 간단한 증거도있다 2 간격 패턴이 개방 문제에 ", 이론 컴퓨터 과학 (410) (24 ~ 25은 ) : 2410–2423, 2009.


2
"비트 절반이 켜져 있고 절반이 꺼져있는 2 * n 비트 이진수의 가능한 값 수"인 시퀀스가 ​​A000984가 아닙니까?
트래비스 브라운

5
@Travis, 내가 오해하지 않는 한 : n = 4의 경우, 10000111은 2 * n 비트 이진수이며, 절반은 켜져 있고 절반은 꺼져 있지만 정의 된대로 사각형은 아닙니다. 이 논리에 따르면, 제곱은 A000984를 생성하는 세트의 엄격한 부분 집합이므로 이진 알파벳에 대한 제곱의 값은 시퀀스를 통해 동일한 인덱스에서 낮아야합니다.
Daniel Apon 1

1
관찰 : 그래프 형식을 사용하여 2n을 G의 꼭짓점 수로하자. G '는 G의 중첩 된 가장자리에 해당하는 꼭짓점 사이에 가장자리를 추가하여 G의 선 그래프에서 얻은 그래프라고하자. 독립적 인 크기의 n 세트. 최대 독립 세트가 다항식 시간을 계산할 수있는 다양한 클래스의 그래프가 있습니다. 우리가이 길을 가면 문제는 : G '에는 어떤 좋은 속성이 있습니까? (more)
Tsuyoshi Ito

2
@ Radu : 사각형의 비가 아닌 사각형 (이진 알파벳 이상)이 1/3로 수렴한다고 생각하지 않습니다. 나는 1/2로 느린 수렴을 나타내는 몬테카를로 시뮬레이션을했다. 따라서 한계에서 기본적으로 짝수 0과 1의 모든 이진 문자열은 제곱입니다. 이것은 나에게 놀랍고 알고리즘에서 악용 될 수 있습니다. 더 큰 알파벳의 경우 사각형의 분수는 0으로 빠르게 수렴하는 것으로 보입니다.
Martin Berger

8
이 질문은 오늘의 블로그 게시물에서 언급되었으므로이 문제를 해결하는 데 새로운 관심을 가질 수 있는지 살펴 보겠습니다. 이 질문이 제기 된 지 1 년이 지났으며 그 이후로 많은 새로운 사용자를 확보했습니다. 나는 그 질문에 대해 100 명의 보상 현상금을 냈다.
Alex ten Brink

답변:


66

Michael Soltys와 나는 문자열을 사각형 셔플로 쓸 수 있는지 여부를 결정하는 문제가 NP 완료임을 증명하는 데 성공했습니다. 이는 개의 고유 한 기호 만있는 유한 알파벳에도 적용 되지만 9 개의 기호가 있는 알파벳에 대해서는 증명이 작성되었습니다 . 이 질문은 여전히 작은 알파벳 열려 있습니다 만 말할 2 상징. 우리는 각 기호가 6 번만 (또는 더 일반적으로 일정한 횟수로) 나타나는 제한에서 문제를 보지 않았습니다 . 그래서 그 질문은 여전히 ​​열려 있습니다.7926

이 증명은 -Partition 의 축소를 사용합니다 . 여기에 게시하기에는 너무 길지만 웹 페이지에서 " 문자열 분리가 NP -hard" 라는 사전 인쇄본 을 다음 웹 사이트에서 사용할 수 있습니다.3NP

http://www.math.ucsd.edu/~sbuss/ResearchWeb/Shuffle/

http://www.cas.mcmaster.ca/~soltys/#Papers .

이 논문은 Journal of Computer System Sciences에 발표되었습니다.

http://www.sciencedirect.com/science/article/pii/S002200001300189X


11
대박!! (그리고 내 엄청난 구호, 심각 사소.)
Jeffε

15
감사. 이 질문의 소스는 StackExchange였습니다. 훌륭한 자료입니다!
Sam 버스

9
@SamBuss 작은 요청 : Jeff의 질문을 인용하는 동안 텍스트에는 Per Austrin의 솔루션 만 언급됩니다. 답변을 보면 답변에 대한 공식 인용을 생성하는 방법이 있습니다 (공유 버튼을 클릭하고 '인용'링크를 클릭하십시오). 이런 식으로 Per의 답변에 대한 적절한 인용을 생성 할 수 있습니다. 나는 사이트에 공식적으로 기여하는 사람들이 공식적으로 인정받을 수 있도록 이것을 언급합니다. 감사 ! 이 문제를 크래킹에 대한 축하
수레 쉬 벤 카트

2
@SureshVenkat. 팁 주셔서 감사합니다 : 유용합니다. 이것을 온라인 버전의 종이에 추가했습니다.
Sam 버스

사각형 셔플을 인식하는 문제는 이제 이진 알파벳에서도 어려운 것으로 나타났습니다. sciencedirect.com/science/article/pii/S0304397519300258
a3nm

58

각 문자가 최대 4 번 나타날 때 언급 한 특수한 경우, 다음과 같이 2-SAT가 간단하게 줄어 듭니다.

중요한 점은 각 캐릭터마다 캐릭터의 발생을 일치시키는 두 가지 유효한 방법이 있다는 것입니다 (세번째 가능성은 중첩됩니다). 부울 변수를 사용하여 두 개의 일치하는 항목을 나타냅니다. 이제이 변수에 대입하면 둘 다 선택된 것이 아니라 중첩 된 모든 모서리 쌍에 대해 문자열 iff의 유효한 셔플을 줄입니다. 이 조건은 관련된 두 문자에 해당하는 변수 (가능하면 부정)의 분리에 의해 정확하게 설명 될 수 있습니다.


좋은. 같은 생각은 각 문자가 최대 6 번 나타나는 문자열을 일반화하지만 결과는 5-SAT의 인스턴스입니다. :-(
Jeffε

2
이 답변은 현상금을 얻기 위해 가장 좋아하는 것입니다.
Jeffε

이것이 문제가 NPC임을 증명하고 왜 긴 회의와 저널 증거가 필요한가?
T ....

@Turbo 많은 뒤늦은, 그러나 이것은 2-SAT이기 때문에 NPC가 될 문제를 증명하지 않습니다 하지 NPC; 그것은 P.에있다
Steven Stadnicki

알파벳 크기가 제한이없는 경우이 2-SAT 축소가 작동합니까?
Mohammad Al-Turkistany

11

입증하기 까다로워 보이지만 집에 베팅하지 않을 알고리즘이 있습니다.

모든 모서리 e에 대해 e 가 사용되고 e에 포함되거나 e를 포함하는 모서리를 사용하지 않는 G에 대해 완벽하게 일치하는 경우 제거 된다고 가정 해 봅시다 .GeGee

GGGG

>1

욕심 많은 선택 후에 우리는 그래프를 다시 퍼지하는 등 그래프가 (가급적이면) 중첩되지 않는 완벽한 매칭 일 때 프로세스가 종료됩니다.

처음에는 이것이 욕심 알고리즘에서 작은 예견을 갖는 것과 같고 실제로 작동하지 않을 것이라고 생각했지만, 반례를 제시하는 것은 놀랍게도 어렵다는 것을 알았습니다.


나는 두 번째 탐욕스러운 단계에 대해 회의적이지만 그래프를 제거하는 것이 유용 해 보입니다. 그래프가 불연속 합집합 인 원래 문자열 컨텍스트에서 제거 된 그래프의 구조에 대해 말할 수 있습니까? 여전히 분리 된 파벌의 연합입니까? (즉, 입력 문자열에서 각 문자의 발생을 분할하여 다른 부분의 문자를 일치시킬 수 없습니까?)
Jeffε

2
두 번째 질문은 문자열 'aaaa'를 고려하십시오. 제거하면 가장자리 1-4와 2-3이 제거되어 4 사이클이 제공됩니다. 두 번째 탐욕스런 단계의 두 가지 변형으로도 충분하고 반례를 찾을 수 없었습니다. 1) 제거 된 그래프는 완벽하게 일치하는 경우 중첩되지 않은 완벽하게 일치합니다 (욕심없는 단계와 비교할 수없는 것으로 보입니다) . 2) 비 중첩 완벽한 매칭 제거 된 그래프에서, 모든 에지에 사용되는 일부 (반증 쉽게되어야하므로이 그리 디 단계 및 첫 번째 항목 모두보다 강한) 비 중첩 완벽한 정합.
Austrin 당

11

Sam Buss와 내가 2012 년 11 월에 제안한 솔루션 (3- 파티션 축소로 NP-hard의 사각형을 풀 수 있음)은 이제 Journal of Computer System Sciences에 발표 된 기사입니다.

http://www.sciencedirect.com/science/article/pii/S002200001300189X


2
이것은 실제로 별도의 답변이 아닌 Sam Buss의 이전 답변을 수정 한 것이어야합니다. '수정'을 클릭하면 다른 사람의 답변에 대한 수정 사항을 제안 할 수 있으며 사이트의 다른 사용자가 편집 한 내용을 검토합니다.
DW

11

Romeo Rizzi와 Stéphane Vialette 는 가장 긴 이진 서브 시퀀스 문제를 줄임 으로써 2013 년 논문“ 셔플 제품에 대해 사각형 인 단어를 인식하는 것 ”에서 정사각형 문자열을 인식하는 것이 NP- 완전 함을 증명합니다 . 그들은 바이너리 문자열을 섞는 복잡성이 여전히 열려 있다고 말합니다.

Shunes Cheng Li와 Ming Li는 2009 년의 " 2 간격 패턴의 두 가지 개방 된 문제에 대해 "중첩되지 않은 완벽한 매칭을 찾는 것이 NP- 완전이라는 사실을 더욱 간단하게 증명합니다 . 그러나 그들은 생물 정보학에서 상속 된 용어를 사용합니다. "완벽한 중첩되지 않은 일치"대신 "DIS-2-IP- 문제"라고합니다. 두 문제의 동등성은 Blin, Fertin 및 Vialette에 의해 설명됩니다 .{<,}

2-IP-지워질 문제는 일반적인 그래프 제약 matchings 환산 즉시 제형 가지고 그래프 주어 선형 순서 함께 의 정점 , 2-IP를 -DIS- 문제는 에서 과 일치하는 최대 카디널리티를 찾은 것과 동일한 두 개의 고유 한 모서리 및 에 해당하는 특성 을 찾는 것과 같습니다. 도 및 또는{<,}GπG{<,}MG{u,v}{u,v}Mmin{π(u),π(v)}<min{π(u),π(v)}max{π(u),π(v)<max{π(u),π(v)}min{π(u),π(v)}<min{π(u),π(v)} 및 발생합니다.max{π(u),π(v)}<max{π(u),π(v)}

업데이트 (2019 년 2 월 25 일) : Bulteau와 Vialette는 이진 문자열 셔플 링의 결정 문제가 논문에서 NP- 완료이며 이진 셔플 사각형 인식은 NP-hard 임을 보여주었습니다 .


나는 연결을 보지 못하고 저자가 문자열을 섞지 않는 것이 문제와 동일하다고 주장하는 곳을 보지 못했습니다.
Suresh Venkat

2
그들은 그것이 셔플 링과 같다고 말하지는 않는다. 더 일반적인 문제입니다.
Jeffε

@SureshVenkat 내 답변을 편집했는데 더 명확하기를 바랍니다. 기본적으로, 그들이 각주에서 말하는 것은 일치하는 ( ) 의 두 가장자리가 중첩되지 않는다는 것 입니다. M
Mohammad Al-Turkistany 2016 년

실제 게시 된 버전에서는 동등성이 320 페이지에 나와 있습니다. books.google.com/…
Mohammad Al-Turkistany

lede를 묻히지 않도록 편집했습니다 .
Jeffε

9

7
좋은 참조. 결과가 내 문제에 어떻게 적용되는지 알기는 어렵지만 기술이 도움이 될 수 있습니다. 주어진 문자열 X가 다른 주어진 문자열 Y의 두 사본의 셔플인지 쉽게 알 수 있습니다. 첨부 된 종이는 주어진 문자열 X가 다른 주어진 문자열 Y 사본 수의 셔플인지 여부를 결정하기가 NP-hard임을 증명 합니다. 주어진 문자열 X가 어떤 알 수없는 문자열 Y의 두 복사본을 섞은 것인지 알고 싶습니다.
Jeffε

5

마음에 들지 마십시오.이 답변은 잘못되었습니다. 입력 "AABAAB"에서 실패합니다. 처음 두 A를 서로 탐욕스럽게 일치 시키면 나머지 기호를 일치시킬 수 없습니다. 다른 사람들이 같은 실수를 피하는 것을 돕기 위해 삭제하지 않고 그대로 둡니다.

정사각형의 각 연속 문자를 가능한 한 빨리 위치에있는 다른 동등한 문자와 일치시키는 것이 항상 안전한 것처럼 보입니다. 즉, 다음 선형 시간 알고리즘이 작동해야한다고 생각합니다.

입력 문자열에서 각 위치 i를 반복합니다. i = 0, 1, 2, ... n. 각 위치 i에 대해 해당 위치가 문자열의 이전 위치와 이미 일치하는지 확인하십시오. 그렇지 않은 경우, 마지막으로 일치 한 위치 다음에 오는 동일한 문자와 일치하고 그렇지 않으면 문자열에서 가능한 한 빨리 일치합니다. 일부 문자와 일치하는 것이 없으면 입력이 사각형이 아니라고 선언하십시오. 그렇지 않으면, 각 일치하는 첫 번째 쌍의 문자 세트입니다.

다음은 파이썬입니다.

데프 sqrt (S) :
    일치 = []
    i, j = 0, 0
    i <len (S) 동안 :
        j <len (일치) 및 일치하는 경우 [j] [1] == i :
            나는 + = 1
            j + = 1
            계속하다
        일치하는 경우 :
            k = 일치 [-1] [1] + 1
        그밖에:
            k = 1
        k <len (S) 및 S [k]! = S [i] :
            k + = 1
        k> = len (S) 인 경우 :
            예외 발생 ( "사각형 아님")
        matches.append ((i, k))
        나는 + = 1
    "".join (a, b가 일치하는 경우 S [a] 반환)

sqrt ( "ABCABDCD") 인쇄

여기서 나는 주 루프 변수 (우리가 일치시키려는 위치)이고, j는 일치하는 쌍의 배열에 대한 포인터이며, 위치 i가 이미 일치하는지 확인하는 속도를 높이고, k는 검색하는 데 사용되는 색인입니다 위치 i의 문자와 일치하는 문자 i, j 및 k가 문자열을 통해 단조 증가하고 각 내부 루프 반복이 그중 하나를 증가시키기 때문에 선형 시간입니다.


4
거기에 있었다. 했어요 :-)
Jeffε

5

업데이트 : 그것은 발견의 어려움에 대해 얘기하고 이해가되지 않는 완벽한 비 중첩입니다 일치 하고 그러한 일이 있기 때문에, 라벨은 1에서 n으로 할 때, 비 횡단. (예, 나 자신을 차고 있습니다.) 그러나 레이블에 더 넓은 범위가 주어지면 의미가 있습니다 ... 그래서 나는 여전히 희망을 보지만 결국 의미가 없을 수 있습니다. 나는 확실히 이것을 더 따라야 할 것입니다.


나는 비 중첩하는 일치 찾기 어려운 이유를 생각할 수 비 횡단. 그런 매칭을 불연속적인 매칭 이라고 부르겠습니다 . 이것이 어느 정도 도움이되는지 모르겠지만 어쨌든 추론을 제시하겠습니다. (내 주장이 여기에있는 것처럼 완전하지 않으며, 나가는 세부 사항이 중요 할 수 있음을 지적해야한다. 그러나 나는 그것이 시작의 무언가라고 생각한다.)

약간 다른 문제로 시작하겠습니다. 가장자리가 색으로 표시되고 꼭지점이 에서 표시 되는 그래프 가 주어지면 각 색상의 가장자리가 정확히 하나 포함 된 불연속 일치가 있습니까? 문제는 NP-hard 인 것으로 보입니다 (이에 대한 논쟁은 완전하고 간단합니다. 감소는 분리 된 파편의 결합 인 그래프를 분출합니다.Gk1n

감소는 [1]에 도입 된 NP- 완전 문제인 Disjoint Factors 에서 비롯된 것 입니다. 불연속 인자의 인스턴스는 크기의 알파벳에 걸쳐 문자열로 주어지며 문제는 불연속 인자 가 있는지 여부입니다 . 여기서 인자는 동일한 문자로 시작하고 끝나는 하위 문자열입니다. 그리고 두 요소가 문자열에서 겹치지 않으면 분리됩니다 (특히 '중첩'도 허용되지 않습니다).kk

Disjoint Factors 인스턴스와 관련된 크기의 알파벳 요소 인 표시하겠습니다 .a1,,akk

길이가 인 문자열과 같은 불연속 요인의 인스턴스가 주어지면 에서 까지의 정점 레이블을 가진 개의 정점 이있는 그래프를 만듭니다 . 해당 위치에 동일한 문자 (예 : ) 가있는 경우 꼭지점 와 사이에 모서리를 추가 하고 모서리 에 색상 로 색상을 지정하십시오 .nn1nuvai(u,v)i

축소의 증거는 본질적으로 정의에서 따릅니다. 분리 된 요소가 주어지면 , 우리는 결합 된 화려한 일치를 가지며, 단지 분리 된 요소에 의해 주어진 가장자리를 고르고, 결과적인 일치는 다채롭고 분리 된 것을 쉽게 알 수 있습니다. 반대로, 연관 색상 일치 가있는 경우 , 우리는 일치하는 색상이 다양하고 (따라서 글자 당 하나의 인자를 선택), 분리되어 (해당 인자가 겹치지 않기 때문에) 모든 글자마다 하나씩 k 연속 인자를 갖습니다. ).kkk

색상을 없애고 범위를 넓히더라도 완벽하게 일치 시키려면 생성 된 그래프를 다음과 같이 수정하십시오.

하자 문자와 관련된 위치에있는 라벨이 정점의 집합 나타내는 . 에 꼭짓점 이 있으면 새 꼭짓점을 추가하고 와 새로 추가 된 꼭짓점 사이에 완전한 이분 그래프를 유도하십시오 . 물론 모든 편지에 대해 반복하십시오.UaaUaA(A2)Ua

대략적으로 말하면 그래프가 완벽한 일치를 유도하는 경우 새로 도입 된 정점은 의 정점과 일치해야하며 정점 쌍을 제외한 모든 정점을 포화시키고 나머지 정점 사이의 가장자리는 분리 된 요인에 해당합니다. . 나는 새로 추가 된 정점과 연관시켜야하는 숫자를 계산하지 않았습니다 ... 결과 일치가 분리되도록해야합니다. 나는 단지 '할 수있다'는 느낌 (읽기 : 희망)을 가지고 있습니다!Ua

[1] 다항식 커널이없는 문제 에서 Hans L. Bodlaender, Rodney G. Downey, Michael R. Fellows 및 Danny Hermelin, J. Comput. 시스. 공상 과학


3
혼란 스러워요. (1,2), (3,4), (5,6), ..., (n-1, n)만이 완벽한 분리형 매칭이 아닙니까?
Jeffε

'완벽한 일치'시나리오로 넘어 가면 구성을 수정하고 많은 새로운 정점을 추가합니다 (알파벳의 모든 a에 대해 | U_a | -2 새로운 정점을 추가합니다). 따라서 k 크기의 알파벳의 경우 n은 대략 2n-2k로 폭발합니다. 새로운 정점에 할당되는 숫자를 지정하지 않았기 때문에 축소가 불완전하다는 것을 분명히하기를 희망했지만 너무 어려움없이 확장 할 수 있기를 바랍니다. 그러나 나는 더 많은 것을 말하기 전에 분명히 그것에 대해 생각해야합니다.
Neeldhara

1
JeffE의 의견의 요점은 하나의 가능성이 있기 때문에 비 중첩 및 비 교차 (또는 그 부재를보고)하는 완벽한 일치를 쉽게 찾을 수 있다는 것입니다.
이토 쓰요시

2
나는 당신의 증거 아이디어의 내용에 대해 이야기하는 것이 아니라 당신의 대답의 첫 문장에 대해 이야기하고 있습니다. 이 작업은 JeffE가 작성한 이유에 따라 쉽습니다.
이토 쓰요시

2
불연속 인자 문제 (각 색상의 최대 한 가장자리)에 의해 부과되는 색상 제약이 없으면 최대 불연속 일치도 쉽게 찾을 수 있습니다.
Jeffε

1

이 방법은 효과가 없습니다. 일치하는 두 글자를 가져와 섞인 사각형을 분해해도 섞인 사각형이되지는 않습니다. 아래 Radu의 설명을 참조하십시오.


사용하는 제안 범위 병합 문법 (RCGs는 참조 http://hal.inria.fr/inria-00073347/en/을 ) : 나는 해요 ' 다음과 같은 간단한 RCG 당신은 유한을 통해 언어를 "사각형을 단행"인식 인상이었다 알파벳 , Radu의 첫 번째 주석 후 편집 : 어디에 위에 범위 와 빈을 나타내고 끈.Σ

S(XY)A(X,Y)(1)A(aX1,aX2Y1Y2)A(X1,Y1)A(X2,Y2)(2)A(ε,ε)ε(3)
aΣε

문법은 두 번째 술어를 통해 첫 번째 단어 어커런스의 문자가 두 번째 단어 어커런스의 동일한 문자와 일치하는지 확인합니다. 그런 다음 나머지 첫 번째 단어 문자의 나머지, 즉 을 나머지의 하위 문자열, 즉 과 일치시키는 방법을 추측합니다 . 따라서 이전의 모든 것은 첫 단어 인스턴스에 속합니다. 우리는 그것을 라고 부르며 에서 시작하는 접미사와 일치한다고 생각합니다 . 참고 및 단어의 두 경우 모두에서 문자를 포함 할 수 있지만 및 첫 번째 인스턴스에서 문자가 포함되어 있습니다.X1Y1Y1X2Y2Y1Y2X1X2

예를 들어, 다음은 문자열 의 가능한 파생입니다 . abcabdcd

S(abcabdcd)A(abc,abdcd)(by 1,X=abc,Y=abdcd)A(bc,bdcd)A(ε,ε)(by 2,X1=bc,Y1=bdcd,X2=Y2=ε)A(c,c)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(ε,ε)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(d,d)A(ε,ε)(by 3)A(d,d)A(ε,ε)(by 3)A(ε,ε)A(ε,ε)A(ε,ε)(by 2)3εi.e. success

용 , 0011

S(0011)A(0,011)A(ε,ε)A(1,1)A(1,1)ε

이제 Boullier는 이전에 링크 된 논문에서 RCG에 대한 동적 프로그래밍 다항식 시간 알고리즘이 있음을 보여줍니다. 위의 문법 올바른 경우 질문에 대답합니다 . 아이디어는 변수 , 등 의 인스턴스 를 문자열로 제시했지만 실제로는 입력 문자열 내부의 간격이며 올바르게 표시 될 수 있다는 것입니다.XY


S (0011)를 으로 유도하는 파생물이 있습니까? (하나가 있어야합니다.)ϵ
Radu GRIGore

나는 그렇게 생각하지 않습니다.
가스 퍼지

또한 A (10,011010)-> A (0,101) A (0,0)-> 이지만 10011010은 사각형이 아니라고 생각합니다. ϵ
Radu GRIGore

반품 주셔서 감사합니다. 나는 문법을 조금 바꾸었고, 심지어 그것이 작동 할 수있는 작은 직관력을 가지고 있습니다.
Sylvain

3
천만에요. 업데이트 된 문법에 대한 자세한 내용은 다음과 같습니다.) A (00,000110)-> A (0,011) A (0,0)-> 이지만 00000110은 정사각형이 아닙니다. 또한 100110101010에 대한 파생은없는 것 같습니다. ϵ
Radu GRIGore

1

업데이트 : 이토 츠요시 (Tsuyoshi Ito)가 의견에서 지적 했듯이이 알고리즘에는 지수 실행 시간이 있습니다.

원본 게시물 :

현실 세계에서 이것을 프로그래밍하는 방법이 여기 있습니다.

문자열 S = (S [1], ..., S [n])이 제공됩니다. 각 접두사 S_r = (S [1], ..., S [r])에 대해 문자열 쌍의 {(T_i, U_i)} 집합이 있으므로 S_r은 (T_i, U_i)의 셔플입니다. 그리고 T_i는 U_i의 접두사이다 (즉, U_i는 T로 시작한다). S_r 자체는이 세트가 T_i = U_i 인 쌍 (T_i, U_i)을 포함하는 경우에만 제곱입니다.

이제이 모든 쌍을 생성 할 필요는 없습니다. T_i의 복사본을 제거하여 얻은 각 문자열 U_i의 접미사 V_i를 생성하면됩니다. 이것은 (아마도 기하 급수적 인) 수의 관련없는 중복을 제거합니다. 이제이 접미사 세트에 빈 문자열이 포함 된 경우에만 S_r은 제곱입니다. 따라서 알고리즘은 다음과 같습니다.

Initialise: SuffixSet = {<empty string>} ; r = 0
Loop: while (r < n) {
  r = r + 1
  NextSuffixSet = {}
  for each V in SuffixSet {
    if (V[1] == S[r]) Add V[2...] to NextSuffixSet // Remove first character of V
    Add V||S[r] to NextSuffixSet // Append character S[r] to V
    }
  SuffixSet = NextSuffixSet
  }
Now S is a square if and only if SuffixSet contains the empty string.

예를 들어 S가 AABAAB 인 경우 :

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB, AABA}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA, AABAA}
r=6: S[r] = B; SuffixSet = {AA, BAAB, <empty string>, BB, ABAB, AABAAB}

입력 문자열 길이의 절반보다 긴 접미사를 모두 버릴 수 있으므로 다음과 같이 단순화됩니다.

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA}
r=6: S[r] = B; SuffixSet = {AA, <empty string>, BB}

나는 이것을 C ++로 프로그래밍했으며 여기에 주어진 모든 예제에서 작동합니다. 누군가 관심이 있다면 코드를 게시 할 수 있습니다. 문제는 SuffixSet의 크기가 polynomially보다 빠르게 커질 수 있습니까?


3
나도 이것을 시도했지만 실험에 따르면 원래 문자열이 (AB) ^ n이면 SuffixSet의 크기가 n에서 기하 급수적으로 증가하는 것으로 보입니다.
이토 쓰요시

1

편집 : 이것은 잘못된 답변입니다.


Sylvain은 불행히도이 "셔플 스퀘어"에는 적합하지 않은 RCG를 제안했습니다. 그러나, 나는 다음과 같이 보이는 (편집 : RCG가 아니라, 커트의 의견을 참조하십시오!) 라고 생각합니다.

S(Y)A(ϵ,Y)(1)A(X,ZY)A(XZ,Y)(2)A(aX,aY)A(X,Y) for every aΣ(3)A(ϵ,ϵ)ϵ(4)

설명 : 우리는 일치 일단 우리가 문자열에 어디서든 나타날 수있는 문자와 일치한다는 것을 기억하지만, 및 , 우리는 일치시킬 수 있습니다 와 경우 의미 ( 선형 우선 순위를 의미). 아이디어는 반쪽의 접두사를 비교하기 위해 문자열 을 나누는 것 입니다. 두 개의 하위 문자열의 시작이 일치하면 문제를 나머지 문자열로 줄일 수 있습니다 . 그렇지 않은 경우 오른쪽의 일부를 왼쪽으로 옮길 수 있습니다aabbabab(1,2)(3)(2)나중에 위치에 일치하는 것이 있는지 확인하십시오. 중요한 것은 이것이 한 방향으로 만 허용된다는 것입니다!

다음은 대한 파생입니다 (실뱅의 RCG에 대한 반대 예).100110101010

S(100110101010)A(ϵ,100110101010)(1)A(1001,10101010)(2)A(01,101010)(3)A(011,01010)(2)A(1,010)(3)A(10,10)(2)A(ϵ,ϵ)(3)ϵ(4)

나는이 문법이 실제로 "셔플 스퀘어"를 정확히 포착한다는 공식적인 증거를 제시하지는 않았지만 너무 어렵지 않아야합니다. Sylvain은 이미 RCG의 결정 문제가 다항식이라고 언급했습니다.


어떻게 다항식 시간에 구현할 수 있는지 모르겠습니다. 000102030에서 시작 하면 다음 문자열 123, 01230, 01203 중 하나와 동일한 x에 대해 에 도달 할 수 있습니다 . 0012030, 01023, 0010230, 0010203, 000102030. (예, 나는 Sylvain이 링크 한 문서를 보았지만 모두 프랑스어로 2 3A(x,ϵ)23
보였습니다

5
@DaniCL, 두 번째 생각에 ... 생산 규칙의 RHS에있는 매개 변수가 입력 범위에 인접해야합니까? Boullier 논문의 정의에 명시 적으로 언급 된 것을 보지 못했지만 그것이 사용되는 방식 인 것 같습니다. 구문 분석 알고리즘의 실행 시간 분석에서 절에 대한 가능한 인수 수는 O (n ^ 2h)이며 여기서 h는 절의 최대 길이이고 n은 입력 길이입니다. 문법에서 일반적으로 XZ는 원래 입력에서 연속적이지 않습니다.
커트

3
@ 커트, 당신은 결함을 발견했다고 생각합니다. 다른 논문 ( "중국어 숫자, MIX, 스크램블링 및 범위 연결 문법")에서 Boullier는 다음과 같이 명시 적으로 말합니다. "물론 연속 범위 만 새로운 범위로 연결될 수 있습니다. 대체 메커니즘에 의해 범위에 묶여 있어야합니다. " 이것은 아마도 내 문법이 유효한 RCG가 아니며 Radu의 의심이 합리적이며이 방법이 효과가 없다는 것을 의미합니다.
DaniCL

2
@ 커트가 맞습니다. 연속성 제한이 없으면 NP- 완료 언어 UNARY 3PARTITION을 인식하는 일련의 생산 규칙을 ​​만들 수 있다고 확신합니다. 음이 아닌 정수는 언어 (1 * 0) ^ *의 문자열로 단항으로 인코딩 할 수 있습니다. UNARY 3PARTITION은 인코딩 된 세트를 모두 같은 합으로 3 요소 서브 세트로 분할 할 수있는 모든 문자열 세트입니다. ( en.wikipedia.org/wiki/3-partition_problem 참조 )
Jeffε

1
UNARY 3PARTITION에 대한 문법 : S (X0Y0Z)-> A (e, X0, Y0, Z); A (W, 1X, Y, Z), A (W, X, 1Y, Z), A (W, X, Y, 1Z)-> A (W1, X, Y, Z); A (W, 0X, 0Y, 0Z)-> B (W, XYZ); B (W, e)-> e; B (W, X0Y0Z)-> C (W, W, X0, Y0, Z); C (W, 1V, 1X, Y, Z), C (W, 1V, X, 1Y, Z), C (W, 1V, X, Y, 1Z)-> C (W, V, X, Y, 지); C (W, e, X, Y, Z)-> B (W, XYZ)
Radu GRIGore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.