Apakah bahasa ini dikenali oleh 3 simbol TM di O (n log n)?

10

Saya bermain dengan pertanyaan yang sangat menarik dan masih terbuka " Alfabet mesin Turing single-tape " (oleh Emanuele Viola) dan muncul dengan bahasa berikut:

L={x{0,1}n s.t. |x|=n=2m and count1(x)=km;n,m,k1}

di mana adalah jumlah s dalam string x.count1(x)1

Misalnya, jika x = 01101111 maka n = 8, m = 3, k = 2; jadixL

Bisakah L dikenali oleh Mesin Turing dengan satu pita dan 3 simbol alfabet dalam langkah ? {ϵ,0,1}O(nlogn)

Jika kita menggunakan 4 simbol jawabannya adalah ya:

  • periksa apakah mengganti s dengan dan s dengan dan sekaligus simpan s di sebelah kanan;|x|=2m0ϵ12m 1
  • kemudian menghitung jumlah s modulo di .2mO(nlogn)

Sebagai contoh:

....01101111....... input x  (|x| = 8 = 2^3)
000.021.1212.0001.. div 2, first sweep (000. can safely be used as a delimiter)
000.022.1222.00011. div 2, second sweep
000.022.2222.000111 div 2, third sweep --> m = 3 (= log(n) )
000..22.2222....111 cleanup (original 1s are preserved as 2)
000..22.2221102.... start modulo m=3 calculation
000..22.2210022.... mod 3 = 2
000..22.2000222.... mod 3 = 0
000..22.0012222.... mod 3 = 1
000..20112.2222.... mod 3 = 2
000..11122.2222.... ACCEPT
Marzio De Biasi
sumber
Jika adalah bilangan alami yang diwakili oleh daripada selalu sama dengan dan ? |x|=n=2mxcount1(x)1L={10}
Marc Bury
Maaf | x | berarti panjang string x. Contoh: x = 01101111, n = 8, m = 3, k = 2, dan dengan demikianxL
Marzio De Biasi
1
Ngomong-ngomong, ini adalah kandidat yang sangat baik untuk pertanyaan Emanuele, karena itu ada di : ini tidak biasa oleh lemma pemompaan, jadi tidak mungkin , tetapi itu adalah . Θ(nlogn)o(nlogn)O(nlogn)
Joshua Grochow

Jawaban:

10

Tidak bisakah Anda menggunakan ide yang sama dengan yang Anda miliki untuk case 4 simbol , dengan modifikasi berikut:

  • Selalu proseskan sepasang simbol secara bersamaan.
  • Dalam sapuan "div 2" Anda, tandai blok dua simbol sebagai "diproses" dengan memetakan . Anda masih memiliki tersedia sebagai "pemisah" yang dapat Anda gunakan di kedua ujungnya, dan Anda dapat memulihkan data asli dengan mudah.ϵ ϵ(00,01,10,11)(ϵ0,ϵ1,0ϵ,1ϵ)ϵϵ
  • Gunakan trik serupa untuk langkah "mod 2".

Secara umum, Anda dapat memeras informasi pembukuan dalam jumlah besar secara sewenang-wenang dengan bantuan simbol ketiga dengan memroses simbol sekaligus.O(1)

Jukka Suomela
sumber
Kamu benar! ... sekarang saya curiga bahwa jawaban untuk pertanyaan Emanuele adalah ya ... tetapi masih terbuka sehingga mungkin tidak terlalu mudah untuk membuktikannya secara resmi :-( Terima kasih!
Marzio De Biasi