Проблема є NP-важкою для L = A ∗, де A - кінцева мова, що містить такі слова:L=A∗A
- х 111 , х 000 ,x111x000
- y 100 , y 010 , y 001 ,y100y010y001
- 00 c 11 , 01 c 10 , 10 c 01 і 11 c 0000c1101c1010c0111c00
Зменшення пов'язане з проблемою орієнтації на графік, яка, як відомо, є важкою для NP (див. Https://link.springer.com/article/10.1007/s00454-017-9884-9 ). У цій проблемі нам дають 3-регулярний непрямий графік, у якому кожна вершина позначена або " { 1 } ", або " { 0 , 3 } ". Мета полягає в тому, щоб спрямовувати краї графіка таким чином, щоб вибірка кожної вершини знаходилась у встановленому маркуванні цієї вершини.{1}{0,3}
Зменшення потрібно взяти за вхідний екземпляр орієнтації на графік та створити список вихідних потрій. У цьому зменшенні тричі, які ми виводимо, завжди будуть задовольняти певні обмеження. Ці обмеження перераховані нижче, і ми будемо називати перелік трійки як дійсний, якщо і лише якщо вони задовольняють цим обмеженням:
- Символам x , y і c задаються лише інтервали, що містять рівно один індекс. Іншими словами, щоразу, коли ці символи розміщуються, вони розміщуються у певних місцях.xyc
- Для кожної трійки ( i , l , r ), присутньої в екземплярі з i ∈ { 0 , 1 } , також є трійка ( 1 - i , l , r ) .(i,l,r)i∈{0,1}(1−i,l,r)
- Якщо ( α , l , r ) і ( α ′ , l ′ , r ′ ) обидві трійки є примірниками, то або l < l ′ ≤ r ′ < r , або l ′ < l ≤ r < r ′ , або { α , α ′ } = { 0 , 1 } при l = l(α,l,r)(α′,l′,r′)l<l′≤r′<rl′<l≤r<r′{α,α′}={0,1}′ < R = r ′ .l=l′<r=r′
- Якщо ( α , l , r ) є потрійним, то число трійки ( α ′ , l ′ , r ′ ) при l ≤ l ′ ≤ r ′ ≤ r є рівно r - l + 1 .(α,l,r)(α′,l′,r′)l≤l′≤r′≤rr−l+1
Зверніть увагу на наступну лему, доведену наприкінці цієї публікації.
Лему: для дійсного списку трійок, символи х , у , і з повинні бути поміщені точно так , як зазначено трійок, і для будь-якої пари трійок ( 0 , л , г ) і ( 1 , л , г ) , то два символи для цієї трійки повинні бути розміщені в індексах l і r .xyc(0,l,r)(1,l,r)lr
Тоді ідея скорочення полягає в наступному.
Для подання ребер використовуємо пари трійки ( 0 , l , r ) і ( 1 , l , r ) . Край проходить між кінцевими точками в індексі l та в індексі r . Якщо припустити, що ми створюємо дійсний список трійки, символи з цих двох трійків повинні бути розміщені на l і r , тому ми можемо трактувати порядок, в якому вони розміщені, як вказівку напрямку краю. Тут 1 - "голова" краю і 0 - "хвіст". Іншими словами, якщо 1 розміщено на r(0,l,r)(1,l,r)lrlr101rто крайові точки від l до r, а якщо 1 розміщено на l, то крайові точки від r до l .lr1lrl
Щоб представити вершини, ми розміщуємо символ x або y в індексі і використовуємо наступні три символи як кінцеві точки трьох ребер, які торкаються вершини. Зверніть увагу , що якщо ми розміщуємо х , все три ребра на вершині повинні вказувати в тому ж напрямку (всі в вершину або все з вершини) просто з рядків, які в кінцевому мовою A . Такі вершини перевищують 0 або 3 , тому розміщуємо х саме для вершин, позначених { 0 , 3 } . Якщо ми помістимо уxyxA03x{0,3}y, Рівне один з трьох ребер в вершині повинні вказувати в тому ж напрямку , з - за рядки в A . Такі вершини мають перевершення 1 , тому ми розміщуємо y саме для вершин, позначених { 1 } .A1y{1}
У якомусь сенсі ми все зробили. Зокрема, відповідність між вирішенням цього примірника та вирішенням екземпляра Graph Orientation має бути чіткою. На жаль, список трійки, який ми виробляємо, може бути неправдивим, і тому описані "краї" можуть працювати не за призначенням. Зокрема, список трійки може бути недійсним, оскільки умова, що інтервали від трійки повинні завжди містити один одного, може не дотримуватися: інтервали з двох ребер можуть перетинатися, не маючи іншого.
Для боротьби з цим ми додаємо ще трохи інфраструктури. Зокрема, ми додаємо "перехресні вершини". Перехресна вершина - це вершина ступеня 4 , краї якої спарені так, що в межах кожної пари один край повинен вказувати на вершину перехрестя, а один - назовні. Іншими словами, вершина схрещування буде поводитись так само, як і лише дві "пересічні" краї. Ми представляємо перехресну вершину, розміщуючи символ c на якомусь індексі i . Потім зауважте, що мова A обмежує символи в i - 1 і i + 2, щоб вони були протилежними (один 0 і один 1 ), а символи в i - 24ciAi−1i+201i−2і i + 1 бути протилежним. Таким чином, якщо ми використовуємо ці індекси як кінцеві точки для чотирьох ребер у вершині перехрестя, поведінка точно така, як описано: чотири ребра знаходяться в парах і серед кожної пари по одному балу і одному.i+1
Як ми насправді розміщуємо ці кросовери? Припустимо, у нас є два інтервали ( l , r ) та ( l ′ , r ′ ), які перетинаються. WLOG, l < l ′ < r < r ′ . Додаємо символ перехрестя в середину (між l ′ і r ). (Скажімо, ми весь час розставляли все так далеко, що завжди вистачає місця, і наприкінці ми видалимо будь-який невикористаний простір.) Нехай індекс символу кросовера буде i . Потім замінюємо чотири трійки ( 0(l,r)(l′,r′)l<l′<r<r′l′ri,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.