오래된 게시물에 답장을 보내서 죄송합니다.
나는 그것에 대해 생각하고 있으며 고정 알파벳의 문제는 NP 완료라고 생각합니다.
이 단어 문제에 대해 긍정적 인 1-in-3 SAT를 줄 이겠습니다.
어제 나는 문제를 해결하기위한 아이디어를 얻는 데 어려움을 겪고있었습니다. 질문을 다시 볼 때까지 각 변수를 다르게 만드는 데 어려움이 있었고 심은 기호가있는 사각형을 사용할 수 있음을 깨달았습니다. 이것은 감소를 많이 단순화했습니다. 내 다른 아이디어는 각 변수마다 길이가 다른 단어를 사용하는 것이 었습니다.
감소
이제 우리가 사용할 가제트에 대해 설명하겠습니다.
가변 가제트
각 변수에 다른 숫자 인덱스를 레이블링하고 각 변수마다 다른 숫자를 갖습니다. 가장 큰 인덱스를 선택하고 이진수로 숫자를 나타내면이 이진 체인 호출합니다 .n
그런 다음 각 변수에 대해 서로 다른 두 개의 수직 단어를 만듭니다. 모든 단어의 길이는(단어 목록에서 중복 단어를 허용하는 경우에만), 여기서이진 체인 의 길이입니다 .3+|n||n|n
예를 들어, 가장 큰 색인을 숫자 . 이 숫자를 이진수로 변환 할 때 이진수로 체인 을 얻습니다 .이 체인의 길이는 3입니다. 따라서이 예에서 각 변수 단어의 길이는 입니다.41006
이제 각 변수에 대해 서로 다른 두 단어를 만듭니다. 한마디 심볼 것 , 처음에 다음 기호 그래서 동일한 길이를 가지고 체인 제로와 변수 인덱스 우리는 패드를 나타내는 아래의 다음 이진 체인을 그 체인 마지막 심볼 끝에. 물론 기호를 변경할 수 있습니다.32n3
다른 단어는 거의 동일하지만 기호 대신 기호 를 갖습니다 .43
예를 들어, 가장 큰 색인을 숫자 . 인덱스 의 변수에 대해 다음 두 단어가 있습니다 .41
320013 및420014
보시다시피 우리 는 길이가 이되도록 숫자 의 이진 반복을 0으로 채웠 습니다.1|n|
우리는이 단어들을 여러 번 복사해야하며, SAT 인스턴스에서 변수가 발생할 때마다 각 단어의 사본이 필요합니다. 단어 목록에 중복이 만들어집니다. 변수를 고유하게 식별하는 이진 체인에 다른 이진 체인을 추가하여 중복을 제거 할 수 있습니다. 이 새로운 체인은 변수의 각 발생을 고유하게 식별합니다.
이를 위해 변수의 각 발생에 다른 이진 체인을 할당하고 변수의 이진 표현 끝에 해당 체인을 배치합니다.
이 새로운 이진 체인을 만들려면 먼저 각 변수마다 다른 인덱스를 만들어야합니다. 각 인덱스 에서 가장 큰 숫자를 호출합니다. 여기서 는 각 변수의 식별자입니다. 그런 다음 숫자 를 이진 체인으로 변환 한 다음 체인의 길이를 이 숫자를. 그런 다음 각 인덱스에 대해 변수의 각 발생에 대해 서로 다른 이진수를 만듭니다. 이진 체인의 길이가 가 될 때까지 0으로 숫자를 채변수의 각 발생에 속하는 모든 단어의 길이가 동일합니다.niini|ni||ni|
변수 단어 내부의 중복을 제거합니다.
예를 들어, 변수 가 SAT 인스턴스에 세 번 나타나는 것으로 가정하십시오 . 우리는 다음과 같은 단어를 만듭니다.x2
32010013 42010014 , 및32010103 4201010432010113 42010114
조항 가제트
각 조항 가젯에 대해 3 개의 새로운 수평 단어를 작성하고 각 조항 단어의 길이는 제곱입니다 (단어 목록에서 중복 단어를 허용하는 경우에만). 각 절에 대해 생성 할 단어는 다음과 같습니다.6
535354 , 및535453545353
우리는 절을 만족시키는 각각의 가능한 방법에 대해 다른 절 단어를 가지고 있으며, 기호 는 리터럴 세트를 true로 나타내고 기호 은 리터럴 세트를 false로 나타냅니다. 숫자 는 절 단어임을 나타내는 데 사용됩니다.435
단어 목록에 단어가 반복적으로 표시되므로 변수 단어를 고유하게 식별하는 데 사용한 절차를 사용하여 반복을 제거 할 수 있습니다. 즉, 각 절에 대해 서로 다른 이진 체인을 만들고 각 절에 해당하는 절 단어에 각 체인을 추가합니다. 이를 위해 절에 대한 새 색인을 작성하고 가장 많은 색인을 선택하기 위해이 번호를 이라고합니다 . 우리는 표현 진 체인 등을 우리가 같이 바이너리 체인의 길이를 호출. 이제 숫자 1부터 시작하여 각 절에 대해 서로 다른 이진 숫자를 만들고 길이를 이진 체인을 만들기 위해 숫자를 0으로 채 웁니다.mm|m||m|. 각 이진 체인을 절에 속하는 절 단어에 추가합니다.
이제 칠판에 조항 가제트의 그림을 보자.
이 예는 절을 나타내고 축소되는 3 in 1 인스턴스는(x2∨x3∨x4)(x1∨x2∨x3)∧(x2∨x3∨x4)
보시다시피, 정사각형이 있습니다. 세로 열에는 절 안에 어떤 리터럴이 있는지 나타내는 기호가 기록되어 있습니다. 열의 끝과 시작은 빈 사각형입니다. 이를 통해 플레이어는 변수 값을 선택할 수 있습니다. 가로 행에 표시된 기호는 플레이어가 해당 행에 절 단어를 넣도록합니다. 모든 절 단어에는 단일 기호 만 있기 때문에 절 가젯 안에있는 리터럴 중 하나만 "true"로 설정할 수 있습니다.4
단어 목록 내에서 중복을 허용하지 않으면 이미지를 수정해야합니다.
이미지의 절은 이되고 리터럴 열은 왼쪽에서 오른쪽으로 나타납니다.5b5b5b10
b201010b , 및b201110bb21001b
기호 빈 사각형을 의미하는 경우b
예를보십시오 :
가변 일관성 가젯
이 변수는 플레이어가 변수의 모든 리터럴 열에 대해 동일한 값만 할당 할 수 있도록하는 가제트입니다.
각 변수마다 새로운 가제트가 생깁니다
각 가제트마다 두 개의 새 단어를 만듭니다.
단어의 길이는 변수의 발생 횟수에 따라 다릅니다. 단어의 길이는 여기서 는 변수의 발생 횟수입니다. 따라서 sat 인스턴스에서 변수 가 두 번 나타나면 단어의 길이는 4입니다. 두 단어 중 하나는 체인의 반복에 의해 형성되는 k는 변수의 발생 횟수이고, 회. 다른 단어들은 체인의 반복에 의해 형성되는 K가 감소되는 SAT 인스턴스 변수의 발생 횟수이고, 회.2∗kkx263 k64 k
예를 들어 변수 에 두 개의 발생이있는 경우 해당 변수 할당 가젯에 속하는 단어는 다음과 같습니다.x2
6363 및6464
반복되는 단어를 피하려면 각 일관성 가젯이 다른 변수에 속합니다. 따라서이 가젯을 위해 만든 두 단어에 각 변수를 식별하는 이진 체인을 추가 할 수 있습니다.
이제이 가제트의 예제 사진을 보자 :
이 가제트는 변수 이며 축소되는 3 in 1 인스턴스는 입니다.x2(x1∨x2∨x3)∧(x2∨x3∨x4)
보시다시피, 두 개의 가로 행이 있습니다. 행 안에 쓰여진 기호는 해당 기호가 포함 된 단어 만 배치 할 수 있도록합니다.이 단어는이 가젯에 대해 만든 단어입니다. 행 중 하나에서 열에 배치 된 기호로 인해 변수 단어 만 배치 할 수 있는지 확인하는 두 개의 열이 있음을 알 수 있습니다. 변수 일관성 행에만 배치 할 수있는 유일한 단어에는 기호 만 있거나 기호 만 있기 때문에 플레이어는 해당 기호가있는 모든 가변 단어를 가제트 내에 배치해야합니다. 이는 조항 가젯 내에 배치 할 수있는 유일한 변수 단어에는 기호 만 있거나 기호 만 있음을 의미합니다.3434. 이 gagdet의 나머지 단어를 다른 줄에 넣을 수 있습니다
단어 목록에서 중복을 허용하지 않으면 예제 그림 내의 단어는 다음과 같습니다.
행의 경우 :
6b6b010 및6b6b010
열의 경우 :
b201001b 및b201010b
기호 빈 사각형을 의미하는 경우b
예를보십시오 :
조항 덤프 가젯
사용되지 않는 절 단어를 배치하기 위해 작성된 가제트입니다. 그렇게하기 위해, 우리는 보드의 빈 부분에 각 절 단어에 대해 두 개의 행만 배치하면됩니다. 이 행은 다른 행이나 열에 연결되어 있지 않습니다.
이것으로 축소를 마칩니다. 축소를 위해 6 개의 기호 만 필요하다고 주장했습니다.
예
이전의 설명이 혼란 스러우면 다음은이 단어 문제로 축소 된 3 SAT에서 1의 양수의 예를 보여줍니다.
반복되는 단어가 허용되지 않는 경우 :
축소 된 인스턴스는 다음과 같습니다.
(x1∨x2∨x3)∧(x2∨x3∨x4)