Le problème est NP-difficile pour L = A ∗ où A est le langage fini contenant les mots suivants:L=A∗A
- x 111 , x 000 ,x111x000
- y 100 , y 010 , y 001 ,y100y010y001
- 00 c 11 , 01 c 10 , 10 c 01 et 11 c 0000c1101c1010c0111c00
La réduction provient du problème d'orientation du graphique, qui est connu pour être NP-difficile (voir https://link.springer.com/article/10.1007/s00454-017-9884-9 ). Dans ce problème, on nous donne un graphe non orienté à 3 régularités dans lequel chaque sommet est étiqueté " { 1 } " ou " { 0 , 3 } ". Le but est de diriger les bords du graphe de sorte que le degré extérieur de chaque sommet soit dans l'ensemble étiquetant ce sommet.{1}{0,3}
La réduction doit prendre en entrée une instance d'orientation graphique et produire une liste de triplets en sortie. Dans cette réduction, les triplets que nous produisons satisferont toujours certaines contraintes. Ces contraintes sont répertoriées ci-dessous, et nous ferons référence à une liste de triplets comme valides si et seulement s'ils satisfont à ces contraintes:
- Les caractères x , y et c ne reçoivent que des intervalles contenant exactement un index. En d'autres termes, chaque fois que ces personnages sont placés, ils sont placés dans des emplacements spécifiques.xyc
- Pour chaque triple ( i , l , r ) présent dans l'instance avec i ∈ { 0 ,(i,l,r) 1 } , le triple ( 1 - i , l , r ) est également présent.i∈{0,1}(1−i,l,r)
- Si ( α , l , r ) et ( α ′ , l ′ , r ′ ) sont tous les deux des triplets présents dans l'instance, alors soit l < l ′ ≤ r ′ < r , soit l ′ < l ≤ r < r ′ , soit { α , α ′ } = { 0 , 1 } avec l = l(α,l,r)(α′,l′,r′)l<l′≤r′<rl′<l≤r<r′{α,α′}={0,1}′ < R = r ′ .l=l′<r=r′
- Si ( α , l , r ) est un triple alors le nombre de triplets ( α ′ , l ′ , r ′ ) avec l ≤ l ′ ≤ r ′ ≤ r est exactement r - l + 1 .(α,l,r)(α′,l′,r′)l≤l′≤r′≤rr−l+1
Notez le lemme suivant, prouvé à la fin de ce post.
Lemme: pour une liste valide de triplets, les caractères x , y et c doivent être placés exactement comme indiqué par les triplets, et pour toute paire de triplets ( 0 , l , r ) et ( 1 , l , r ) , le deux caractères pour ce triple doivent être placés aux indices l et r .xyc(0,l,r)(1,l,r)lr
L'idée de la réduction est alors la suivante.
Nous utilisons des paires de triplets ( 0 , l , r ) et ( 1 , l , r ) pour représenter les arêtes. Le bord va entre les points d'extrémité à l'indice l et à l'indice r . En supposant que nous produisions une liste valide de triplets, les caractères de ces deux triplets doivent être placés à l et r , afin que nous puissions traiter l'ordre dans lequel ils sont placés comme indiquant la direction du bord. Ici 1 est la "tête" du bord et 0 est la "queue". En d'autres termes, si le 1 est placé à r(0,l,r)(1,l,r)lrlr101ralors le bord pointe de l à r et si le 1 est placé à l alors le bord pointe de r à l .lr1lrl
Pour représenter les sommets, nous plaçons un caractère x ou y à un index et utilisons les trois caractères suivants comme extrémités des trois arêtes qui touchent le sommet. Notez que si l' on place un x , les trois arêtes au sommet doivent pointer dans la même direction (tous dans le sommet ou tous du sommet) simplement en raison des chaînes qui sont dans un langage fini A . Ces sommets ont un degré 0 ou 3 , nous plaçons donc un x exactement pour les sommets étiquetés { 0 , 3 } . Si nous plaçons un yxyxA03x{0,3}y, exactly one of the three edges at the vertex must point in the same direction due to the strings in AA. Such vertices have outdegree 11, so we place a yy exactly for the vertices labeled {1}{1}.
In some sense, we are done. In particular, the correspondence between solving this instance and solving the Graph Orientation instance should be clear. Unfortunately, the list of triples we produce may not be valid, and so the "edges" described may not work as intended. In particular, the list of triples might not be valid because the condition that the intervals from the triples must always contain each other might not hold: the intervals from two edges may overlap without one containing the other.
Pour lutter contre cela, nous ajoutons quelques infrastructures supplémentaires. En particulier, nous ajoutons des "sommets croisés". Un sommet croisé est un sommet de degré 4 dont les bords sont appariés de telle sorte que dans chaque paire, un bord doit pointer vers le sommet croisé et un vers l'extérieur. En d'autres termes, un sommet croisé se comportera de la même manière que deux arêtes "croisées". Nous représentons un sommet croisé en plaçant le caractère c à un certain indice i . Notez ensuite que le langage A contraint les caractères en i - 1 et i + 2 à être opposés (un 0 et un 1 ) et les caractères en i - 24ciAi−1i+201i−2et i + 1 pour être opposé. Ainsi, si nous utilisons ces indices comme points de terminaison pour les quatre arêtes au sommet du croisement, le comportement est exactement comme décrit: les quatre arêtes sont par paires et parmi chaque paire, un point d'entrée et un point de sortie.i+1
How do we actually place these crossovers? Well suppose we have two intervals (l,r)(l,r) and (l′,r′)(l′,r′) which overlap. WLOG, l<l′<r<r′l<l′<r<r′. We add the crossover character into the middle (between l′l′ and rr). (Let's say that all along we spaced everything out so far that there's always enough space, and at the end we will remove any unused space.) Let the index of the crossover character be ii. Then we replace the four triples (0,l,r)(0,l,r), (1,l,r)(1,l,r), (0,l′,r′)(0,l′,r′), and (1,l′,r′)(1,l′,r′) with eight triples with two each (one with character 00 and one with character 11) for the following four intervals (l,i−1)(l,i−1), (i+2,r)(i+2,r), (l′,i−2)(l′,i−2), (i+1,r′)(i+1,r′). Notice that the intervals don't overlap in the bad way anymore! (After this change, if two intervals overlap, one is strictly inside the other.) Furthermore, the edge from ll to rr is replaced by an edge from ll to the crossover vertex followed by the edge from there to rr; these two edges are paired at the crossover vertex in such a way that one is pointed in and one is pointed out; in other words, the two edges together behave just like the one edge they are replacing.
In some sense, putting in this crossover vertex "uncrossed" two edges (whose intervals were overlapping). It is easy to see that adding the crossover vertex can't cause any additional edges to become crossed. Thus, we can uncross every pair of crossing edges by inserting enough crossover vertices. The end result still corresponds to the Graph Orientation instance, but now the list of triples is valid (the properties are all easy to verify now that we have "uncrossed" any crossing edges), so the lemma applies, the edges must behave as described, and the correspondence is actually an equivalence. In other words, this reduction is correct.
proof of lemma
Lemma: for a valid list of triples, the characters xx, yy, and cc must be placed exactly as indicated by the triples, and for any pair of triples (0,l,r)(0,l,r) and (1,l,r)(1,l,r), the two characters for that triple must be placed at indices ll and rr.
proof:
We proceed by induction on the triples by interval length. In particular, our statement is the following: for any kk if some triple has interval length kk then the character in that triple must be placed as described in the lemma.
Base case: for k=0k=0, the triple must be placing a character xx, yy, or cc at the single index inside the interval. This is exactly as described in the lemma.
Inductive case: assume the statement holds for any kk less than some k′k′. Now consider some triple with interval length k′k′. Then that triple must be of the form (i,l,r)(i,l,r) with r=l+k′−1r=l+k′−1 and i∈{0,1}i∈{0,1}. The triple (1−i,l,r)(1−i,l,r) must also be present. The number of triples (α′,l′,r′)(α′,l′,r′) with l≤l′≤r′≤rl≤l′≤r′≤r is exactly r−l+1=k′r−l+1=k′. These triples include triples (0,l,r)(0,l,r) and (1,l,r)(1,l,r) but also k′−2k′−2 other triples of the form (α′,l′,r′)(α′,l′,r′) with l<l′≤r′<rl<l′≤r′<r. These other triples all have interval length smaller than k′k′, 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.