일반 언어로 단어를 달성하기 위해 문자를 예약 할 수 있는지 테스트


23

내가 해결 정규 언어 L을L 알파벳에 ΣΣ , 그리고 내가 전화하는 다음과 같은 문제를 고려 편지 일정 에 대한 L을L . 비공식적으로, 입력은 각 문자에 대해 n 개의n 문자와 간격을 제공하며 (즉, 최소 및 최대 위치) 두 번째 문자가 동일한 위치에 매핑되지 않도록 각 문자를 간격에 배치하는 것이 목표입니다. 결과 nn 문자 단어는 LL 입니다. 공식적으로 :

  • 입력 : Nn 트리플 ( I , L I , r에 ) IΣ1 L I ≤은 r에 N 정수(ai,li,ri)aiΣ1lirin
  • 출력 : bi fionion f : { 1 , , n } { 1 , , n }f:{1,,n}{1,,n} 이므로 모든 i에 대해 l if ( i ) r i , a f 1 ( 1 )a f - 1 ( N )L .lif(i)riiaf1(1)af1(n)L

물론 이러한 문제는 전단 사 함수를 추측하여, NP에 F를f 하고 회원에 의하면 L을L PTIME있다. 내 질문 : L 에 대한 문자 예약 문제 가 NP-hard 와 같은 정규 언어 L 이 있습니까?LL

일부 초기 관찰 :

  • 스케줄링에서 비슷한 문제가 연구 된 것 같습니다. 시작 및 종료 날짜를 고려하면서 단일 기계에서 단가 작업을 스케줄링하는 것으로 문제를 볼 수 있습니다. 그러나이 후자의 문제는 욕심 많은 접근 방식으로 PTIME에 분명히 있으며 작업에 레이블이 지정되어 있고 대상 정규 언어로 단어를 달성하려는 경우 예약 문헌에 아무것도 보이지 않습니다.
  • 문제를 보는 또 다른 방법은 2 자릿수 최대 일치 문제 (문자와 위치 사이) 의 특별한 경우 이지만 L에 속해야한다는 제약을 표현하기는 어렵습니다 L.
  • LL 이 일부 고정 단어 u에 대해 u * 형식의 언어 인 특정 경우 (예 : ( a b ) ), L 에 대한 문자 예약 문제 는 쉬운 욕심 알고리즘으로 PTIME에 있습니다. L에 대해 정확 하고 가장 작은 시간 r i를 갖는 사용 가능한 문자 중 하나를 각 위치에 두십시오 . (올바른 사용 가능한 문자가 없으면 실패합니다.) 그러나 이러한 언어의 경우 사용할 문자 종류를 선택할 수 있기 때문에 임의의 일반 언어 L 로 일반화되지 않습니다 .uu(ab)LLriL
  • 동적 알고리즘이 작동하는 것처럼 보이지만 실제로는 그렇게 간단하지 않습니다. 지금까지 어떤 문자 세트를 암기해야 할 것 같습니다. 실제로, 왼쪽에서 오른쪽으로 단어를 만들 때, 위치 i에 도달하면 나는상태는 지금까지 사용한 문자에 따라 다릅니다. 기하 급수적으로 많은 상태가 있기 때문에 전체 세트를 기억할 수 없습니다. 그러나 사용한 "사본 수"를 사용하여 "요약"하는 것은 쉽지 않습니다. 사용한 사본을 알기 위해서는 소비 한 시점을 기억해야 할 것 같습니다 (나중에 소비했을 때) 더 많은 글자를 사용할 수있었습니다). 심지어 같은 언어 ( B | B의 ) *( a b | b a )이미 당신이 취할 선택해야하는 경우에 대한 제약이 복잡 할 수있다 B를 당신이 취할 선택해야 할 때 b를 하는 문자에 나중에 필요합니다 따라와 문자를 사용할 수있게되면합니다.a bB
  • 그러나 일반 언어 L 은 고정되어 있고 많은 정보를 기억할 수 없기 때문에 줄일 수있는 NP 어려운 문제를 찾는 데 어려움을 겪고 있습니다.

PTIME에서 일부 L에 대해 NP- 완전성을 얻을 수 있습니까?
랜스 포트 노우

3
@LanceFortnow는 물론입니다. 3CNF를 패딩하여 모든 변수가 짝수의 리터럴로 발생하고 두 번의 연속 발생이 모두 무시되도록 할 수 있습니다. 인코딩은 X I를0 I 또는 1 후 문자 스케줄링 인스턴스의 기호 ( , ) , , xi0i1i( , ) , , 나머지 절반 동안 고정되고 0 의 절반 1 집. 다항식 시간에 문자열이 채워진 3CNF를 true로 인코딩하는지 확인할 수 있습니다. 01
Willard Zhan

문제를 "임의 위치"(1.n으로 제한되지 않음)로 일반화 할 수도 있습니다. 어쩌면 경도를 증명하는 것이 더 쉽습니다 (어려울 경우).
Marzio De Biasi

@ MarzioDeBiasi : 잘 모르겠습니다. 글자의 위치가 간격이 아닌 임의의 하위 집합이 될 수 있음을 의미합니까? 이 어려운 경우 나는 (그것이이 비트 닮은 시작 모른다 정확한 완벽하게 일치하는 문제 ), 그러나 때 간격 버전은 욕심 알고리즘을 허용 L은 = * 내가 쉽게 할 수 있다는 희망을 가질 수 있도록. L = U
a3nm

@ a3nm : 아니, 난 평균 당신이 제약 떨어 일반화 수 있다는 연구 N을 ; [ l i 범위 내에서 하나 이상의 문자 a i 가있는 L의 단어를 요청합니다 . . R I ] ; 즉 , 길이 n 의 전체 단어를 "빌드"하지 않지만 허용 된 범위 내에서 주어진 문자를 포함하는 임의 길이의 단어를 요청하십시오. 이것이 문제의 복잡성을 변화시키는지는 모르겠지만,이 경우 입력 길이에 의해 다항식으로 묶이지 않은 "인덱스"에 직면해야합니다. 아르 자형나는N에이나는[ l나는. . 아르 자형나는]
Marzio De Biasi

답변:


7

문제는 L = A에 대해 NP-hard입니다 . * 여기서 A 는 다음 단어를 포함하는 유한 언어입니다.L=AA

  • x 111 , x 000 ,x111x000
  • y 100 , y 010 , y 001 ,y100y010y001
  • 00 c 11 , 01 c 10 , 10 c 01 11 c 0000c1101c1010c0111c00

감소는 NP-hard로 알려진 문제인 그래프 방향에서 발생합니다 ( https://link.springer.com/article/10.1007/s00454-017-9884-9 참조 ). 이 문제에서는 모든 정점에 " { 1 } "또는 " { 0 , 3 } " 이라는 레이블이 붙은 3 개의 정규 무 방향 그래프가 제공됩니다 . 목표는 모든 정점의 외곽이 해당 정점에 레이블을 설정하도록 그래프의 가장자리를 지시하는 것입니다.{1}{0,3}

축소는 그래프 방향 인스턴스를 입력으로 사용하고 출력으로 트리플 목록을 생성해야합니다. 이 축소에서 우리가 출력하는 트리플은 항상 특정 제약 조건을 충족시킵니다. 이러한 제약 조건은 아래에 나열되어 있으며, 이러한 제약 조건을 만족하는 경우에만 트리플 목록을 유효한 것으로 간주합니다.

  • 문자 x , yc 에는 정확히 하나의 인덱스를 포함하는 간격 만 제공됩니다. 즉, 이러한 문자를 배치 할 때마다 특정 위치에 배치됩니다.xyc
  • i { 0 , 1 } 과 함께 인스턴스에 존재하는 모든 트리플 ( i , l , r ) 에 대해 트리플 ( 1 - i , l , r ) 도 존재합니다.(i,l,r)i{0,1}(1i,l,r)
  • 경우 ( α , L , R )( α ' , L ' , R은 ' ) 모두 다음 예에서 본 루타 중입니다 L < L 'R ' < R 또는 L ' < L R < R ' , 또는 { α , α '(α,l,r)(α,l,r)l<lr<rl<lr<r } = { 0 , 1 } L = 리터{α,α}={0,1}'' < r = r ' .l=l<r=r
  • 경우 ( α , L , R는 ) 삼중 인 후 트리플 번호 ( α ' , L ' , R ' )L L 'R 'r은 정확히 R - L + 1 .(α,l,r)(α,l,r)llrrrl+1

이 글의 끝에서 입증 된 다음의 정리는주의하십시오.

Lemma : 유효한 트리플 목록의 경우 문자 x , yc 는 트리플로 표시된대로 정확하게 배치해야하며 트리플 ( 0 , l , r )( 1 , l , r ) 쌍 에는 해당 트리플의 두 문자는 인덱스 lr에 배치해야합니다 .xyc(0,l,r)(1,l,r)lr

그런 다음 축소의 아이디어는 다음과 같습니다.

가장자리를 나타 내기 위해 트리플 ( 0 , l , r )( 1 , l , r ) 쌍을 사용 합니다. 가장자리는 인덱스 l 과 인덱스 r 에서 끝점 사이를 이동합니다 . 유효한 트리플 목록을 생성한다고 가정하면,이 두 트리플의 문자는 lr에 위치해야합니다 . 따라서 순서가 가장자리의 방향을 나타내는 것으로 간주 할 수 있습니다. 여기서 1 은 가장자리의 "머리"이고 0 은 "꼬리"입니다. 즉, 1r에 있으면(0,l,r)(1,l,r)lrlr101r 은 가장자리가 l 에서 r을 가리키고 1l에 있으면lr1l 에서 그 에지 점을 RL .rl

꼭짓점을 나타 내기 위해 인덱스에 x 또는 y 문자를 배치 하고 다음 세 문자를 정점에 닿는 세 모서리의 끝점으로 사용합니다. x를 배치하면 유한 언어 A 의 문자열로 인해 꼭짓점의 세 모서리가 모두 같은 방향을 향해야합니다 (모두 꼭짓점 또는 모두 꼭짓점 바깥 쪽) . 이러한 꼭짓점은 0 또는 3보다 다르므로 { 0 , 3 }으로 표시된 꼭짓점에 정확히 x를 배치합니다 . 우리가 y를 놓으면xyxA03x{0,3}y꼭짓점의 세 모서리 중 하나는 A 의 문자열로 인해 같은 방향을 가리켜 야합니다 . 이러한 꼭짓점은 1보다 다르므로 { 1 } 이라고 표시된 꼭짓점에 정확히 y를 배치합니다 .A1y{1}

어떤 의미에서 우리는 끝났습니다. 특히,이 인스턴스를 해결하는 것과 그래프 방향 인스턴스를 해결하는 것 사이의 대응 관계가 명확해야합니다. 불행하게도, 우리가 생성 한 트리플의 목록이 유효하지 않을 수 있으므로 설명 된 "가장자리"가 의도 한대로 작동하지 않을 수 있습니다. 특히, 트리플의 간격이 항상 서로를 포함해야하는 조건이 유지되지 않을 수 있기 때문에 트리플의 목록이 유효하지 않을 수 있습니다. 두 가장자리의 간격이 서로를 포함하지 않고 겹칠 수 있습니다.

이를 방지하기 위해 인프라를 추가했습니다. 특히 "교차 정점"을 추가합니다. 크로스 오버 버텍스는 각 쌍 내에서 한 에지가 크로스 오버 버텍스를 가리키고 하나를 가리 키도록 에지가 짝을 이루는 정도 4 의 버텍스입니다 . 다시 말해, 크로스 오버 버텍스는 두 개의 "크로싱"에지와 동일하게 동작합니다. 우리는 문자 배치하여 크로스 오버의 정점을 나타내는 C를 일부 인덱스에서 . 그런 언어 유의 A가 있는 문자를 구속 I - 1I + 2 대향 (하나가 0 과 하나의 1 에서) 및 문자 I - 24ciAi1i+201i2그리고 + 1 대향한다. 따라서이 지수를 교차 정점에서 4 개의 모서리에 대한 종점으로 사용하는 경우 동작은 정확히 설명 된 것입니다. 4 개의 모서리는 쌍으로되어 있고 모든 쌍 중에서 1 점, 1 점입니다.i+1

이 크로스 오버를 실제로 어떻게 배치합니까? 겹치는 두 간격 ( l , r )( l ' , r ' ) 이 있다고 가정 해 봅시다 . WLOG, l < l ' < r < r ' . 교차 문자를 중간에 추가합니다 ( l 'r 사이 ). (따라서 우리는 항상 충분한 공간이 있도록 모든 것을 분리했다고 말하고 결국에는 사용되지 않는 공간을 제거 할 것입니다.) 크로스 오버 문자의 색인을 i로하십시오 . 그런 다음 네 개의 트리플을 대체합니다 ( 0(l,r)(l,r)l<l<r<rlri , L , R ) ,(0,l,r) ( 1 , l , r ) , ( 0 , l ' , r ' ) ( 1 , l ' , r ' ) 및 2 개의 각각 3 개 (문자 0 및 문자 1) ) 다음 네 구간 ( l , i - 1 ) , ( i + 2 , r )(1,l,r)(0,l,r)(1,l,r)01(l,i1)(i+2,r), ( l ' , i - 2 ) , ( i + 1 , r ' ) . 간격이 더 이상 잘못된 방식으로 겹치지 않습니다. (이 변경 후, 두 간격이 겹치면 하나는 다른 하나의 내부에 엄격하게 위치합니다.) 또한 l 에서 r 까지의 가장자리는 l 에서 교차 정점 까지의 가장자리로 대체되고 그 다음부터 r 까지의 가장자리 로 대체됩니다 . 이 두 모서리는 하나가 지적되고 하나가 지적되는 방식으로 교차 정점에서 쌍을 이룹니다. 다시 말해, 두 모서리는 함께 교체하는 한쪽 모서리처럼 작동합니다.(l,i2)(i+1,r)lrlr

어떤 의미에서,이 교차 정점에 두 개의 모서리 (간격이 겹치는)를 "교차하지 않은"상태로 두십시오. 교차 정점을 추가해도 추가 모서리가 교차되지는 않습니다. 따라서 충분한 교차 정점을 삽입하여 모든 교차 모서리 쌍을 교차 해제 할 수 있습니다. 최종 결과는 여전히 Graph Orientation 인스턴스에 해당하지만 이제는 트리플 목록이 유효합니다. 이제 교차 모서리를 "교차"했으므로 속성을 쉽게 확인할 수 있습니다. 따라서 보조 표가 적용됩니다. 대응 관계는 실제로 동등성입니다. 즉,이 감소는 정확합니다.


정리의 증거

Lemma : 유효한 트리플 목록의 경우 문자 x , yc 는 트리플로 표시된대로 정확하게 배치해야하며 트리플 ( 0 , l , r )( 1 , l , r ) 쌍 에는 해당 트리플의 두 문자는 인덱스 lr에 배치해야합니다 .xyc(0,l,r)(1,l,r)lr

증명:

우리는 간격 길이로 트리플에 유도를 진행합니다. 특히, 우리의 진술은 다음과 같습니다. 일부 트리플의 간격 길이가있는 경우 모든 kk K를 표제어에 설명 된 바와 같이 그 배에서 문자를 배치해야합니다.k

기본 사례 : k = 0 의 경우 트리플은 간격 내 단일 인덱스에 문자 x , y 또는 c 를 배치해야합니다 . 이것은 정확히 정리대로 설명되어 있습니다.k=0xyc

Inductive case: assume the statement holds for any kk less than some kk. Now consider some triple with interval length kk. Then that triple must be of the form (i,l,r)(i,l,r) with r=l+k1r=l+k1 and i{0,1}i{0,1}. The triple (1i,l,r)(1i,l,r) must also be present. The number of triples (α,l,r)(α,l,r) with llrrllrr is exactly rl+1=krl+1=k. These triples include triples (0,l,r)(0,l,r) and (1,l,r)(1,l,r) but also k2k2 other triples of the form (α,l,r)(α,l,r) with l<lr<rl<lr<r. These other triples all have interval length smaller than kk, so they all must place their characters as specified in the lemma. The only way for this to occur is if these triples place characters in every index starting at index l+1l+1 and ending at index r+1r+1. Thus, our two triples (0,l,r)(0,l,r) and (1,l,r)(1,l,r) must place their characters at indices ll and rr, as described in the lemma, concluding the inductive case.

By induction, the lemma is correct.


Thanks a lot for this elaborate proof, and with a very simple language! I think it is correct, the only thing I'm not sure about is the claim that "adding the crossover vertex can't cause any additional edges to become crossed". Couldn't it be the case that the interval (l,r)(l,r) included some other interval (l,r)(l′′,r′′) with llrrll′′r′′r, and now one of (l,i1)(l,i1) and (i+2,r)(i+2,r) crosses it? It seems like the process still has to converge because the intervals get smaller, but that's not completely clear either because of the insertion of crossover vertices. How should I see it?
a3nm

If l<l<r<rl<l<r<r, then you can insert the new indices for the new crossover vertex immediately to the right of ll. This causes the new indices (i±i± a bit) to be in exactly those intervals that used to contain ll. It should be easy to see that adding a crossover vertex can add a new crossing with some other interval only if the new indices fall in the other interval. If l<l<r<rl<l′′<r′′<r then the new indices do not fall into the interval (l,r)(l′′,r′′). If l<l<r<rl<l′′<r′′<r then the new indices might fall into the interval (l,r)(l′′,r′′), but only if ll already fell into that
Mikhail Rudoy

(continued) interval. In this case, you aren't actually creating a new crossing, just turning an old crossing with the old interval (l,r)(l,r) into a new crossing with the interval (i+something,r)(i+something,r)
Mikhail Rudoy

I guess in your second message you meant "with the old interval (l,r)(l,r)" rather than "(l,r)(l,r)"? But OK, I see it: when you add the crossing vertex, the only bad case would be an interval II that overlap with a new interval without overlapping with the corresponding interval. This cannot happen for supersets of (l,r)(l,r) or of (l,r)(l,r): if they overlap with a new interval then they overlapped with the old one. Likewise for subsets of (l,r)(l,r) or (l,r)(l,r) for the reason that you explain. So I agree that this proof looks correct to me. Thanks again!
a3nm

2

@MikhailRudoy was the first to show NP-hardness, but Louis and I had a different idea, which I thought I could outline here since it works somewhat differently. We reduce directly from CNF-SAT, the Boolean satisfiability problem for CNFs. In exchange for this, the regular language LL that we use is more complicated.

The key to show hardness is to design a language LL that allows us to guess a word and repeat it multiple times. Specifically, for any number kk of variables and number mm of clauses, we will build intervals that ensure that all words ww of LL that we can form must start with an arbitrary word uu of length kk on alphabet {0,1}{0,1} (intuitively encoding a guess of the valuation of variables), and then this word uu is repeated mm times (which we will later use to test that each clause is satisfied by the guessed valuation).

To achieve this, we will fix the alphabet A={0,1,#,0,1}A={0,1,#,0,1} and the language: L:=(0|1)(#(00|11))#(0|1)L:=(0|1)(#(00|11))#(0|1). The formal claim is a bit more complicated:

Claim: For any numbers k,mNk,mN, we can build in PTIME a set of intervals such that the words in LL that can be formed with these intervals are precisely:

{u(#(˜u˜u)#(uu))m#˜uu{0,1}k}

{u(#(u~u~)#(uu))m#u~u{0,1}k}

where ˜uu~ denotes the result of reversing the order of uu and swapping 00's and 11's, where uu denotes the result of adding a prime to all letters in uu, and where xyxy for two words xx of yy of length pp is the word of length 2p2p formed by taking alternatively one letter from xx and one letter from yy.

Here's an intuitive explanation of the construction that we use to prove this. We start with intervals that encode the initial guess of uu. Here is the gadget for n=4n=4 (left), and a possible solution (right):

choice gadget

It's easy to show the following observation (ignoring LL for now): the possible words that we can form with these intervals are exactly u#˜uu#u~ for u{0,1}ku{0,1}k. This is shown essentially like the Lemma in @MikhailRudoy's answer, by induction from the shortest intervals to the longest ones: the center position must contain ##, the two neighboring positions must contain one 00 and one 11, etc.

We have seen how to make a guess, now let's see how to duplicate it. For this, we will rely on LL, and add more intervals. Here's an illustration for k=3k=3:

duplication gadget

For now take L:=(0|1)(#(00|11))#(0|1)L:=(0|1)(#(00|11))#(0|1). Observe how, past the first ##, we must enumerate alternatively an unprimed and a primed letter. So, on the un-dashed triangle of intervals, our observation above still stands: even though it seems like these intervals have more space to the right of the first ##, only one position out of two can be used. The same claim holds for the dashed intervals. Now, LL further enforces that, when we enumerate an unprimed letter, the primed letter that follows must be the same. So it is easy to see that the possible words are exactly: u#(˜u˜u)#uu#(u~u~)#u for u{0,1}ku{0,1}k.

Now, to show the claim, we simply repeat this construction mm times. Here's an example for k=3k=3 and m=2m=2, using now the real definition of LL above the statement of the claim:

duplication gadget, repeated

As before, we could show (by induction on mm) that the possible words are exactly the following: u(#˜u˜u#uu)2#˜uu(#u~u~#uu)2#u~ for u{0,1}ku{0,1}k. So this construction achieves what was promised by the claim.

Thanks to the claim we know that we can encode a guess of a valuation for the variables, and repeat the valuation multiple times. The only missing thing is to explain how to check that the valuation satisfies the formula. We will do this by checking one clause per occurrence of uu. To do this, we observe that without loss of generality we can assume that each letter of the word is annotated by some symbol provided as input. (More formally: we could assume that in the problem we also provide as input a word ww of length nn, and we ask whether the intervals can form a word uu such that wuwu is in LL.) The reason why we can assume this is because we can double the size of each interval, and add unit intervals (at the bottom of the picture) at odd positions to carry the annotation of the corresponding even position:

unit annotations

Thanks to this observation, to check clauses, we will define our regular language LL to be the intersection of two languages. The first language enforces that the sub-word on even positions is a word in LL, i.e., if we ignore the annotations then the word must be in LL, so we can just use the construction of the claim and add some annotations. The second language LL′′ will check that the clauses are satisfied. To do this, we will add three letters in our alphabet, to be used as annotations: ++, , and ϵϵ. At clause 1im1im, we add unit intervals to annotate by ++ the positions in the ii-th repetition of uu corresponding to variables occurring positively in clause ii, and annotate by~ the positions corresponding to negatively occurring variables. We annotate everything else by~ϵϵ. It is now clear that LL′′ can check that the guessed valuation satisfies the formula, by verifying that, between each pair of consecutive ## symbols that contain an occurrence of uu (i.e., one pair out of two), there is some literal that satisfies the clause, i.e., there must be one occurrence of the subword +1+1 or of the subword 00.

This concludes the reduction from CNF-SAT and shows NP-hardness of the letter scheduling problem for the language LL.

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