Це лише розширений коментар. Кілька разів тому я запитав (себе :-) наскільки швидко може бути багатотактна NTM, яка приймає (розумно закодовану) NP-повну мову. Я придумав таку ідею:
3-SAT залишається NP-повним навіть у тому випадку, якщо змінні представлені уніарно. Зокрема, ми можемо перетворити пункт - припустимо, - довільної 3-SAT формули φ на n змінних і m застережень у послідовності символів над алфавітом Σ = { + , - , 1 }, у якому кожне виникнення змінної представлено унарними:(xi∨¬xj∨xk)φnmΣ={+,−,1}
+ 1i0 , - 1j, + 1к
Наприклад, можна перетворити на:( х2∨ - x 3 ∨ + 4 )
+110-1110+11110
Таким чином, ми можемо перетворити формулу 3-SAT в еквівалентну рядок U ( φ i ), що поєднує її пункти. Мова L U = { U ( φ i ) ∣ φ i ∈ 3 - S A T } повна NP.φiU( φi)LU= { U( φi) ∣ φi∈ 3 - SА Т}
2-стрічковий NTM може вирішити, чи є рядок у часі 2 | х | таким чином.x ∈ LU2|x|
- перша голова сканує введення зліва направо і за допомогою внутрішньої логіки відстежує, коли вона вводить або виходить із пункту або доходить до кінця формули. Кожного разу, коли він знаходить або - , друга голова починає рухатись правою на ній 1 i, що являє собою x i . Наприкінці 1 i , якщо друга голова знаходиться на 0, то вона відгадує значення істини + або - (робить завдання) і записує її на другу стрічку; якщо він знаходить + або - тоді цій змінній вже було призначено значення;+−1iхi1i0+-+-
- в обох випадках, використовуючи внутрішню логіку, NTM співставляє значення істинності під другою головою (призначення) з останнім побаченим або - ; якщо вони збігаються, тоді умова виконується;+-
- тоді друга голова може повернутися до крайньої правої клітини;
- за допомогою внутрішньої логіки NTM може відслідковувати, якщо всі пропозиції виконуються, поки перша голова рухається до кінця вводу.
Приклад:
Tape 1 (formula) Tape 2 (variable assignments)
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0000000000000...
^ ^
+110-1110+11110... 0+00000000000... first guess set x2=T; matches +
^ ^ so remember that current clause is satisfied
+110-1110+11110... 0+00000000000...
^ ^
...
+110-1110+11110... 0+00000000000...
^ ^
...
+110-1110+11110... 0++0000000000... second guess set x3=T
^ ^ don't reject because current
clause is satisfied (and in every
case another literal must be parsed)
Час може бути скорочено до якщо ми додамо кілька зайвих символів до подання пропозиції:| х |
+ 1i0i, - 1j0j, + 1к0к. . .+++
( позначає кінець формули)+++
Таким чином, друга голівка може повернутися до крайньої лівої комірки, а перша сканує частину . Використовуючи ++ як роздільник пункту та +++ як маркер для кінця формули, ми можемо використовувати те саме представлення для формул CNF з довільною кількістю буквених значень на пункт.0i+++++