Sehubungan dengan pertanyaan ini, terpikir oleh saya untuk bertanya-tanya: apa kompleksitas waktu untuk satu mesin single-head Turing untuk menghitung panjang inputnya? Untuk lebih spesifik, misalkan alfabet tape adalah , inputnya adalah string dalam ( 0 + 1 ) ∗ dikelilingi oleh blank, mesin dimulai pada simbol input paling kiri, dan itu harus berakhir pada simbol paling kiri dari string di ( 0 + 1 ) *(lagi-lagi dikelilingi oleh blank) yang memberikan representasi biner dari panjang input. Ini juga dapat dianggap sebagai masalah mengubah nomor dari unary ke binary.
Sangat mudah untuk menyelesaikan ini pada mesin dua-pita atau mesin dua-kepala dalam waktu linier (cukup pindai input dengan satu kepala saat menggunakan kepala lainnya untuk berulang kali menambah penghitung; peningkatan adalah operasi waktu diamortisasi konstan). Tetapi solusi single-head yang bisa saya buat hanyalah (misalnya berulang kali menambah penghitung dan kemudian menggesernya dengan satu posisi di sepanjang pita). Apakah ada batas bawah yang cocok?
Saya mencoba beberapa pencarian tetapi frasa seperti "satu kepala" dan "panjang input" sangat umum sehingga menyulitkan untuk mencari literatur untuk hasil yang diketahui tentang masalah ini.
sumber
Jawaban:
Ini tidak dapat dihitung dalam waktu .o(nlgn)
Biarkan menjadi mesin yang diberi string input x berhenti dengan ukuran x ditulis dalam biner pada kaset.M x x
Kita dapat menambahkan DFA sederhana (zero-space linear-time) ke untuk memeriksa apakah ukuran input adalah kekuatan dua: cukup periksa bahwa bit pertama adalah 1 dan sisanya nol.M
Mari kita asumsikan bahwa menjalankan waktu o ( n lg n ) . Kemudian kita dapat memutuskan dalam waktu o ( n lg n ) bahwa ukuran input adalah kekuatan dua. Dengan kata lain, bahasa berikut dapat dipilih dalam D T i m e ( n lg n ) . L = { 0 i ∣ ∃ k i = 2 k } Ini mengikuti dari D T i m e (M o(nlgn) o(nlgn) DTime(nlgn)
sumber