Problem jest trudny NP dla gdzie jest skończonym językiem zawierającym następujące słowa:L = A ∗ AL=A∗A
- x 111x111 , ,x 000x000
- y 100y100 , , ,Y 010 Y 001y010y001
- 00 c 1100c11 , , i01 c 10 10 c 01 11 c 0001c1010c0111c00
Zmniejszenie wynika z problemu Orientacja grafów, która jest znana z NP-trudnych (patrz https://link.springer.com/article/10.1007/s00454-017-9884-9 ). W tym problemie otrzymujemy 3-regularny niekierowany wykres, na którym każdy wierzchołek jest oznaczony „ ” lub „ ”. Celem jest takie ukierunkowanie krawędzi wykresu, aby wierzchołek każdego wierzchołka znajdował się w zestawie oznaczającym ten wierzchołek.{ 1 } { 0 , 3 }{1}{0,3}
Redukcja musi przyjąć jako dane wejściowe instancję Graph Orientation i utworzyć listę potrójnych danych wyjściowych. W tej redukcji, trzykrotności, które wyprowadzamy, zawsze spełniają pewne ograniczenia. Te ograniczenia są wymienione poniżej, a my odniesiemy się do listy potrójnych jako ważnych wtedy i tylko wtedy, gdy spełniają one te ograniczenia:
- Znaki , i mają tylko interwały zawierające dokładnie jeden indeks. Innymi słowy, za każdym razem, gdy te postacie są umieszczane, są one umieszczane w określonych lokalizacjach.xxyycc
- Dla każdej potrójnej obecnej w instancji z również potrójna .(i,l,r)(i,l,r)i∈{0,1}i∈{0,1}(1−i,l,r)(1−i,l,r)
- Jeśli oba i są w tej instancji trójkami, wówczas albo , albo lub z .(α,l,r)(α,l,r)(α′,l′,r′)(α′,l′,r′)l<l′≤r′<rl<l′≤r′<rl′<l≤r<r′l′<l≤r<r′{α,α′}={0,1}{α,α′}={0,1}l=l′<r=r′l=l′<r=r′
- Jeśli jest potrójne, to liczba trójek z wynosi dokładnie r - l + 1 .(α,l,r)(α,l,r)(α′,l′,r′)(α′,l′,r′)l≤l′≤r′≤rl≤l′≤r′≤rr−l+1
Zwróć uwagę na następujący lemat, udowodniony na końcu tego postu.
Lemat: dla prawidłowej listy potrójnych znaki x , i muszą być umieszczone dokładnie tak, jak wskazano przez potrójne, i dla dowolnej pary potrójnych ( 0 , l , r ) i ( 1 , l , rxyycc(0,l,r) ) The dwa znaki dla tej potrójnej muszą być umieszczone przy indeksach l i r .(1,l,r)lr
Zatem idea redukcji jest następująca.
Używamy par potrójnych ( 0 , l , r ) i ( 1 , l , r ) do reprezentowania krawędzi. Krawędź przechodzi między punktami końcowymi o indeksie 1 i indeksie r . Zakładając, że wytwarzają ważne listę trójek, postacie z tych trójek muszą być umieszczone na L i R , więc można traktować kolejność, w jakiej umieszczone są jako wskazanie kierunku krawędzi. Tutaj 1 to „głowa” krawędzi, a 0 to „ogon”. Innymi słowy, jeśli 1 jest umieszczone na r(0,l,r)(1,l,r)lrlr101rwtedy krawędź wskazuje od l do r, a jeśli 1 jest umieszczona w l, wówczas krawędź wskazuje od r do l .lr1lrl
Aby przedstawić wierzchołki, umieszczamy znak x lub y w indeksie i używamy trzech kolejnych znaków jako punktów końcowych trzech krawędzi, które dotykają wierzchołka. Zauważ, że jeśli umieścić X , wszystkie trzy krawędzie na wierzchołku musi zwrócić się w tym samym kierunku (wszystko na wierzchołku lub wszystko z wierzchołka), po prostu ze względu na ciągi znaków, które są w skończonej języka A . Takie wierzchołki mają outdegree 0 lub 3 , więc umieścić X dokładnie do wierzchołków oznaczonych { 0xyxA03x , 3 } . Jeśli umieścimy y{0,3}yDokładnie jeden z trzech krawędziach w punkcie vertex musi w tym samym kierunku, ze względu na ciągi w A . Takie wierzchołki mają przeciążenie 1 , więc umieszczamy y dokładnie dla wierzchołków oznaczonych { 1 } .A1y{1}
W pewnym sensie jesteśmy skończeni. W szczególności zgodność między rozwiązaniem tego wystąpienia a rozwiązaniem wystąpienia Orientacja graficzna powinna być jasna. Niestety lista produkowanych przez nas trójek może być nieprawidłowa, dlatego opisane „krawędzie” mogą nie działać zgodnie z przeznaczeniem. W szczególności lista potrójnych może nie być ważna, ponieważ warunek, że odstępy od potrójnych zawsze muszą się wzajemnie zawierać, może się nie utrzymywać: odstępy między dwiema krawędziami mogą zachodzić na siebie bez jednego zawierającego drugie.
Aby temu przeciwdziałać, dodajemy trochę infrastruktury. W szczególności dodajemy „wierzchołki skrzyżowane”. Krzyżujący się wierzchołek to wierzchołek stopnia 4, którego krawędzie są sparowane tak, że w obrębie każdej pary jedna krawędź musi wskazywać na wierzchołek krzyżujący się, a druga na zewnątrz. Innymi słowy, wierzchołek skrzyżowania będzie zachowywał się tak samo, jak tylko dwie „krzyżujące się” krawędzie. Reprezentujemy wierzchołek skrzyżowania, umieszczając znak c w pewnym indeksie i . Następnie zauważ, że język A ogranicza znaki w i - 1 i i + 2, aby były przeciwne (jeden 0 i jeden 1 oraz i4ciAi−1i+201 ) oraz znaki w i - 2i−2 + 1, aby być odwrotnie. Tak więc, jeśli użyjemy tych wskaźników jako punktów końcowych dla czterech krawędzi w wierzchołku skrzyżowania, zachowanie będzie dokładnie takie, jak opisano: cztery krawędzie są w parach, a pomiędzy każdą parą jeden wskazuje i jeden wskazuje.i+1
Jak faktycznie umieszczamy te zwrotnice? Załóżmy, że mamy dwa przedziały ( l , r ) i ( l ' , r ' ), które się nakładają. WLOG, l < l ′ < r < r ′ . Dodajemy znak crossover na środku (między l ′ i r ). (Powiedzmy, że cały czas rozmieszczaliśmy wszystko tak daleko, że zawsze jest wystarczająco dużo miejsca, a na końcu usuwamy wszelkie niewykorzystane miejsce.) Niech indeks znaku skrzyżowania będzie równy i(l,r)(l′,r′)l<l′<r<r′l′ri . Następnie zastępujemy cztery tróje ( 0, l , r ) , ( 1 , l , r ) , ( 0 , l ′ , r ′ ) , i ( 1 , l ′ , r ′ ), z ośmioma potrójnymi liczbami po dwie (każda o znaku 0 i jedna o znaku 1 ) dla następujących czterech przedziałów ( l , i - 1 ) , ( i + 2 , r )(0,l,r)(1,l,r)(0,l′,r′)(1,l′,r′)01(l,i−1)(i+2,r) , ( l ′ , i -2 ) , ( i + 1 , r ' ) . Zauważ, że interwały nie pokrywają się już w zły sposób! (Po tej zmianie, jeśli dwa przedziały nachodzą na siebie, jeden jest ściśle wewnątrz drugiego.) Ponadto krawędź od l do r jest zastępowana krawędzią od l(l′,i−2)(i+1,r′)lrl do wierzchołka skrzyżowania, a następnie krawędzią stamtąd do r ; te dwie krawędzie są sparowane na wierzchołku skrzyżowania w taki sposób, że jedna jest skierowana do drugiej, a druga wskazana; innymi słowy, dwie krawędzie razem zachowują się tak samo jak jedna, którą zastępują.r
W pewnym sensie umieszczenie w tym skrzyżowanym wierzchołku „nie skrzyżowanych” dwóch krawędzi (których przedziały zachodziły na siebie). Łatwo zauważyć, że dodanie wierzchołka skrzyżowania nie może spowodować skrzyżowania dodatkowych krawędzi. W ten sposób możemy odkryć każdą parę przecinających się krawędzi, wstawiając wystarczającą liczbę skrzyżowanych wierzchołków. Wynik końcowy nadal odpowiada instancji Graph Orientation, ale teraz lista potrójnych jest poprawna (wszystkie właściwości są łatwe do zweryfikowania teraz, gdy „nie skrzyżowaliśmy” żadnych przecinających się krawędzi), więc zastosowanie ma lemat, krawędzie muszą zachowywać się zgodnie z opisem , a korespondencja jest tak naprawdę równoważnością. Innymi słowy, ta redukcja jest poprawna.
dowód lematu
Lemat: dla prawidłowej listy trójek, znaki x , y i C musi być umieszczony tak, jak wskazano przez trójek, a dla dowolnej pary trójek ( 0 , l , r ) i ( 1 , l , r ) The dwa znaki dla tej potrójnej muszą być umieszczone przy indeksach l i r .xyc(0,l,r)(1,l,r)lr
dowód:
Kontynuujemy przez indukcję potrójnej długości przedziału. W szczególności nasze stwierdzenie jest następujące: dla każdego k, jeśli jakiś potrójny ma przedział długości k, znak w tej potrójnej musi być umieszczony zgodnie z opisem w lemacie.kk
Przypadek podstawowy: dla k = 0 potrójne musi umieszczać znak x , y lub c pod jednym indeksem w przedziale. Jest to dokładnie tak, jak opisano w lemacie.k=0xyc
Przypadek indukcyjny: załóżmy, że wyrażenie zachowuje dla dowolnego k mniejszego niż niektóre k ′ . Teraz rozważmy trzykrotnie o długości przedziału k ′ . Wtedy ta potrójna musi być w postaci ( i , l , r ) z r = l + k ′ - 1 i i ∈ { 0 , 1 } . Potrójne ( 1 - i , l , r ) również muszą być obecne. Liczba trójek ( αkk′k′(i,l,r)r=l+k′−1i∈{0,1}(1−i,l,r) ′ , L ′ , r ′ ) przy l ≤ l ′ ≤ r ′ ≤ r wynosi dokładnie r - l + 1 = k ′ . Te tróje obejmują tróje ( 0 , 1 , r ) i ( 1 , 1 , r ), ale także k - - 2 inne tróje postaci ( α ′ , l ′(α′,l′,r′)l≤l′≤r′≤rr−l+1=k′(0,l,r)(1,l,r)k′−2, r ′ ) przy l < l ′ ≤ r ′ < r . Te wszystkie trzy tróje mają długość przedziału mniejszą niż k ′ , więc wszyscy muszą umieścić swoje znaki, jak określono w lemacie. Jedynym sposobem na to jest to, że te potrójne umieszczają znaki w każdym indeksie, zaczynając od indeksu l + 1 i kończąc na indeksie r + 1 . Zatem nasze dwie trzy ( 0 , 1 , r ) i ( 1 , 1 , r )(α′,l′,r′)l<l′≤r′<rk′l+1r+1(0,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.