Тестування, чи можна планувати букви для досягнення слова звичайною мовою


23

Я фіксуємо регулярний мову на алфавіті , і я вважаю таку проблему , яку я називаю лист планування для . Неофіційно введення дає мені літер та інтервал для кожної літери (тобто мінімальне та максимальне положення), і моя мета - розмістити кожну букву в її інтервалі таким чином, щоб жодна з двох літер не відображалася в одній позиції, і так, щоб в результаті -Пісьма слова в . Формально:L LΣΣL Ln nn nLL

  • Вхід: трійки де та 1 \ leq l_i \ leq r_i \ leq n - цілі числаn n( a i , l i , r i ) (ai,li,ri)a iΣ aiΣ1 l ir in1lirin
  • Вихід: чи існує біекція така, що для всіх , і .f : { 1 , , n } { 1 , , n } f:{1,,n}{1,,n}l if ( i ) r ilif(i)ri i ia f - 1 ( 1 )a f - 1 ( n )Laf1(1)af1(n)L

Очевидно, ця проблема є в NP, відгадуючи біекцію і перевіряючи приналежність до в PTIME. Моє запитання: Чи існує звичайна мова така, що проблема планування літер для є важкою для NP?f fL LL LLL

Деякі початкові спостереження:

  • Схоже, подібні проблеми вивчалися і при плануванні плану: ми могли бачити проблему як планування завдань на одиницю вартості на одній машині, дотримуючись дати початку та закінчення. Однак ця остання проблема, очевидно, в PTIME з жадібним підходом, і я не бачу нічого в літературі щодо планування випадку, коли завдання позначені міткою, і ми хотіли б досягти слова цільовою регулярною мовою.
  • Інший спосіб побачити проблему є як окремий випадок двудольного завдання максимальної відповідності (між буквами і позицією), але знову - таки це важко висловити обмеження , що ми повинні впасти в .LL
  • У конкретному випадку, коли є мовою форми u ^ * для деякого фіксованого слова u (наприклад, (ab) ^ * ), тоді проблема планування літер для L знаходиться в PTIME за допомогою простого жадібного алгоритму: побудуйте слово з зліва направо, і поставте в кожній позиції одну з доступних літер, яка є правильною відносно L і має найменший час r_i . (Якщо немає доступних літер, які є правильними, не виходять з ладу.) Однак це не узагальнює довільних регулярних мов L, оскільки для таких мов у нас може бути вибір, який тип букви використовувати.L Lu u u u( a b ) (ab) L LL Lr iri LL
  • Схоже, що динамічний алгоритм повинен працювати, але насправді це не так просто: здається, вам потрібно було б запам’ятати, який набір листів ви взяли досі. Справді, будуючи слово зліва направо, коли ви досягли позиції , ваш стан залежить від того, які букви ви вживали досі. Ви не можете запам'ятати весь набір, тому що тоді було б експоненціально багато станів. Але не так просто "узагальнити" це (наприклад, за кількістю копій кожного листа, що використовувалося), тому що, щоб знати, які копії ви використовували, здається, вам потрібно запам’ятати, коли ви їх спожили (чим пізніше ви спожили їх, тим більше листів було доступно). Навіть з такою мовою, як ,i ( a b | b a )i a b b a(ab|ba)ab і коли вам слід вибрати залежно від того, які букви вам знадобляться пізніше та коли букви будуть доступні.ba
  • Однак, оскільки звичайна мова є виправленою і не може запам'ятати стільки інформації, мені важко знайти NP-важку проблему, з якої я міг би зменшити.LL

Чи можете ви отримати NP-повноту для деякого L в PTIME?
Lance Fortnow

3
@LanceFortnow Звичайно. Ви можете розмістити 3CNF так, що кожна змінна зустрічається в парній кількості літералів, а кожне два послідовних події заперечується. Введіть x ixi в 0 i0i або 1 i1i , тоді в екземплярі планування літер символи ( , ) , , (,),, закріплені, а решта - половина 00 і половина 11 s. У поліном час можна перевірити, чи кодує рядок прокладений 3CNF, який оцінюється як істинний.
Віллард Жан

Ви також можете узагальнити проблему до "довільних позицій" (не обмежуючись 1..n). Можливо, простіше довести твердість (якщо важко).
Marzio De Biasi

@MarzioDeBiasi: Я не впевнений, що я розумію, ти маєш на увазі, що положення літер може бути будь-яким довільним підмножиною, а не інтервалом? Я не знаю, чи це важко (вона починає трохи нагадувати точну ідеальну проблему узгодження ), але версія з інтервалами передбачає жадібний алгоритм, коли L = u ∗, тому я маю надію, що це може бути простіше. L = u
a3nm

@ a3nm: ні, я маю на увазі, що ви могли б узагальнити скидання обмеження r in ; ви запитуєте слово в L, у якому в діапазоні є принаймні одна буква a i [ l i . . r i ] ; іншими словами, ви не "будуєте" повне слово довжиною n , а запитуєте слово довільної довжини, яке містить задані літери у дозволених діапазонах. Я не знаю, чи це змінює складність проблеми, але в цьому випадку ви повинні зіткнутися з "індексами", які, можливо, не обмежені поліноміально довжиною введення. rinаi[ лi. . ri]н
Marzio De Biasi

Відповіді:


7

Проблема є NP-важкою для L = A ∗, де A - кінцева мова, що містить такі слова:L=AA

  • х 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}(1i,l,r)
  • Якщо ( α , l , r ) і ( α , l , r ) обидві трійки є примірниками, то або l < l r < r , або l < l r < r , або { α , α } = { 0 , 1 } при l = l(α,l,r)(α,l,r)l<lr<rl<lr<r{α,α}={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

Зверніть увагу на наступну лему, доведену наприкінці цієї публікації.

Лему: для дійсного списку трійок, символи х , у , і з повинні бути поміщені точно так , як зазначено трійок, і для будь-якої пари трійок ( 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 - 24ciAi1i+201i2і i + 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)(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,i1)(l,i1), (i+2,r)(i+2,r), (l,i2)(l,i2), (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 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). 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, L 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)#u for u{0,1}k.

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

duplication gadget, repeated

As before, we could show (by induction on m) that the possible words are exactly the following: u(#˜u˜u#uu)2#˜u for u{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 u. 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 w of length n, and we ask whether the intervals can form a word u such that wu is in L.) 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 L to be the intersection of two languages. The first language enforces that the sub-word on even positions is a word in L, i.e., if we ignore the annotations then the word must be in L, so we can just use the construction of the claim and add some annotations. The second language L 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 1im, we add unit intervals to annotate by + the positions in the i-th repetition of u corresponding to variables occurring positively in clause i, and annotate by~ the positions corresponding to negatively occurring variables. We annotate everything else by~ϵ. It is now clear that L can check that the guessed valuation satisfies the formula, by verifying that, between each pair of consecutive # symbols that contain an occurrence of u (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 or of the subword 0.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.