Ini hanya komentar panjang. Beberapa kali yang lalu saya bertanya (sendiri :-) seberapa cepat NTM multitape yang menerima bahasa NP-complete (cukup dikodekan). Saya datang dengan ide ini:
3-SAT tetap NP-lengkap bahkan jika variabel diwakili dalam unary. Secara khusus kita dapat mengkonversi klausul - kira - dari 3-SAT rumus sewenang-wenang φ pada n variabel dan m klausa dalam urutan karakter lebih alfabet Σ = { + , - , 1 } di mana setiap kejadian variabel diwakili dalam unary:(xi∨¬xj∨xk)φnmΣ={+,−,1}
+ 1saya0 , - 1j, + 1k
Misalnya, dapat dikonversi menjadi:( x2∨ - x 3 ∨ + 4 )
+110-1110+11110
Jadi kita dapat mengonversi rumus 3-SAT dalam string ekuivalen U ( φ i ) yang menyatukan klausa-klausa. Bahasa L U = { U ( φ i ) ∣ φ i ∈ 3 - S A T } adalah NP-complete.φsayaU( φsaya)LU= { U( φsaya) ∣ φsaya∈ 3 - SA T}
2-tape NTM dapat memutuskan apakah string dalam waktu 2 | x | lewat sini.x ∈ LU2 | x |
- kepala pertama memindai input dari kiri ke kanan dan dengan logika internal, ia melacak ketika masuk atau keluar klausa atau mencapai akhir rumus. Setiap kali ia menemukan atau - , head kedua mulai bergerak ke kanan dengan itu pada 1 i yang mewakili x i . Pada akhir 1 i , jika head kedua pada 0 maka ia menebak nilai kebenaran + atau - (itu membuat tugas) dan menulisnya di kaset kedua; jika ia menemukan + atau - maka variabel tersebut telah diberi nilai;+-1sayaxsaya1saya0+-+-
- dalam kedua kasus, menggunakan logika internal, NTM cocok dengan nilai kebenaran di bawah kepala kedua (penugasan) dengan terakhir terlihat - atau - ; jika mereka cocok maka klausa terpenuhi;+-
- kemudian kepala kedua dapat kembali ke sel paling kanan;
- dengan logika internal NTM dapat melacak jika semua klausa terpenuhi sementara kepala pertama bergerak ke akhir input.
Contoh:
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)
Waktu dapat dikurangi menjadi jika kita menambahkan beberapa simbol berlebihan ke representasi klausa:| x |
+ 1saya0saya,−1j0j,+1k0k...+++
( menandai akhir formula)+++
Dengan cara ini kepala kedua dapat kembali ke sel paling kiri sementara yang pertama memindai bagian . Menggunakan ++ sebagai pembatas klausa dan +++ sebagai penanda untuk akhir rumus kita bisa menggunakan representasi yang sama untuk rumus CNF dengan jumlah literal per klausa yang sewenang-wenang.0i+++++