Kesenjangan besar antara RAM dan kompleksitas mesin Turing

9

Jika kita hanya mempertimbangkan masalah dalam P, apakah ada celah besar antara algoritma kata-RAM yang paling cepat diketahui dan algoritma mesin Turing yang paling cepat diketahui untuk masalah tertentu? Saya sangat tertarik jika ada celah lebar untuk masalah alam yang menjadi perhatian umum.

Lembik
sumber
6
mesin RAM dapat disimulasikan oleh mesin Turing dengan overhead dalam runtime. Jadi tidak akan ada kesenjangan yang sangat besar. O(nlogn)
Shaull
@ Samull Apakah ada celah sebesar itu untuk masalah alami / populer?
Lembik
3
Palindrome membutuhkan waktu pada single-tape TM (dan adalah dalam RAM). eecs.yorku.ca/course_archive/2008-09/W/6115/palindrome.pdfO ( n )Ω(n2)O(n)
SamM
6
Komentar Shaull hanya berlaku untuk mesin nondeterministic dan dalam pengaturan dua-tape TM, sejauh yang saya tahu. Kutipan, Shaull?
Ryan Williams
1
@ qbt937 - Wow, ledakan dari masa lalu :) Saya percaya saya tidak menyediakan kutipan karena saya tidak punya satu (juga tidak punya sekarang), dan mungkin saja Ryan Williams benar.
Shaull

Jawaban:

6

Diketahui bahwa setiap masalah yang dapat Anda hitung pada mesin RAM dalam waktu , Anda dapat melakukannya dalam Mesin Turing paling lama dalam waktu . Anda perlu memperhatikan bahwa ukuran total memori yang digunakan tidak boleh lebih dari , karena itu berarti Anda melakukan lebih banyak operasi tulis daripada , jadi setiap kali Anda mengambil sesuatu dari memori RAM, Turing mesin akan mengambil dalam kasus terburuk waktu untuk menemukan elemen yang diinginkan secara berurutan dari rekaman itu. Selain akses memori, sisa operasi harus memakan waktu yang bersamaan. Dan dengan demikian Anda mendapatkan terikat.T ( n ) 2 T ( n ) T ( n ) T ( n )T(n)T(n)2T(n)T(n)T(n)

Javier Cano
sumber
2
RAM dapat menghitung panjang input (dan dengan demikian juga pihak dari panjang itu) dalam waktu logaritmik, tetapi Mesin Turing dasar membutuhkan waktu linier untuk menghitung paritas itu.
1

Contoh di bawah ini membuktikan bahwa algoritma yang membutuhkan untuk menyelesaikan masalah pada kata-Ram mungkin membutuhkan pada Mesin Turing 1-tape (TM) ) yang persis mengeksekusi semua perhitungan ditunjukkan oleh . Saya mengerti pertanyaan terkait dengan 1-tape TM, dan saya hanya menggunakan yang ini sebagai jawaban saya. Ini adalah suntingan untuk menanggapi pernyataan Emil Jeřábek.O ( n log ( n ) ) O ( n 2 log ( n ) 3 ) AAO(nlog(n))O(n2log(n)3)A

Kami akan menemukan kesimpulan yang lebih umum berikut . Untuk membuktikan bahwa TM dapat menyelesaikan dalam masalah yang diselesaikan dalam dengan algoritma pada RAM, tidak cukup menjalankan pada TM. Sebuah pintar algoritma mungkin diperlukan. Hal yang sama berlaku jika seseorang ingin membuktikan overhead . Membuktikan keberadaan algoritma yang pintar kapan pun dibutuhkan tampaknya jauh dari langsung, untuk sedikitnya. Ini tidak sejalan dengan tanggapan lain yang pada dasarnya hanya mengusulkan untuk mensimulasikan / mengeksekusi pada TM semua perhitungan RAM (dari algoritma ) untuk mengumumkan kompleksitas TM sepertiO(T(n)2)O(T(n))AAO(nlog(n))AO(T(n)2) atau .O(T(n)nlog(n))

Masalah: Kami diberi array / tabel dengan bilangan bulat yang masing-masing disimpan di bit. Kita diberi array kedua dengan posisi , masing-masing merekam sejumlah bit. Untuk setiap , kami mendefinisikan jika MOD MOD . Kalau tidak, . Keluaran . Saya menganggap input diberikan sebagai rekaman dengantabn=2klog(n)dlog(n)log(n)t[0..log(n)1]Xt=1tab[i]d[t]=tab[n/2+i]d[t] i[0..n/21]Xt=0t=0log(n)1Xtnlog(n)+log(n)log(n) digit biner, untuk menanggapi komentar Emil Jeřábek.

Algoritma pada RAMA A RAM dengan ukuran kata membutuhkan = untuk membaca input string biner data. Tetapi setelah membaca data, itu hanya dapat bekerja dengan kata-kata dengan ukuran . Algoritma menghitung di dengan menelusuri semua dan menguji kondisinya. Loop utama adalah UNTUK : menghitung . Kompleksitas totalnya adalah (membaca data) +w=log(n)O(nlog(n)+log(n)2)O(nlog(n))log(n)AXtO(n)i[0..n/21]At=0,1,2,log(n)1XtO(nlog(n))O(nlog(n))(melakukan perhitungan), sehingga dapat melakukan semuanya dalam pada RAM.AO(nlog(n))

Algoritma pada 1-tape TM:A Saya berpendapat bahwa TM satu-tape membutuhkan waktu untuk tetap . Dari sudut pandang TM, menentukan sama dengan menguji kesetaraan dua string biner dengan panjang . Misalnya, operasi MOD MOD mungkin sama dengan menghapus bit dari . Dalam kasus seperti itu, menentukan setara dengan pengujian kesetaraan pada string bit dengan panjang . Diketahui bahwa pengujian kesetaraan dua untaian panjangO(n2log(n)2)tAtO(nlog(n))tab[i]d[t]0tab[i]Atn(log(n)1)/2mmembutuhkan pada 1-tape TM, tapi saya tidak bisa menemukan referensi sekarang. Namun, saya memberikan bukti dalam ps. Jika TM mengeksekusi loop utama dari , itu harus menghabiskan setidaknya untuk setiap , berakhir di .O(m2)AO((nlogn)2)t=0,1,2,log(n)1O(n2log(n)3)


ps. Saya menunjukkan bahwa pengujian kesetaraan pada string bit dengan bit tidak bisa lebih cepat daripada pengujian palyndrome pada string dengan bit (palyndrome dikenal untuk mengambil setidaknya waktu). Kami dapat memodifikasi algoritma TM apa pun untuk pengujian kesetaraan untuk menyelesaikan palindrome. Asumsikan pengujian-persamaan TM dimulai dengan dua bilangan bulat: satu di kiri kepala, satu di kanan (ini adalah formulir input paling sederhana untuk TM). Setiap gerakan di atas posisi kiri dapat dicerminkan (tercermin) di atas posisi yang tepat. Kami membangun TM cermin: setiap kali TM awal berada di posisi (di sebelah kiri), TM cermin di posisi (di kanan). Jika TM menyelesaikan pengujian kesetaraan dalam waktu kurang darimmO(m2)x<0xO(m2), TM cermin yang dimodifikasi ini akan menyelesaikan palindrom dalam waktu kurang dari .O(m2)

Juga, ada beberapa algoritma TM pengujian kesetaraan di luar sana dan semuanya membutuhkan waktu kuadrat karena mereka membutuhkan zig-zag, lihat misalnya Mesin Turing Contoh 2 di courses.cs.washington.edu/courses/cse431/14sp/scribes/ lec3.pdf

Daniel Porumbel
sumber
Batas bawah untuk palindrom hanya berlaku untuk model pita tunggal yang tidak alami. Sangat mudah untuk menguji kesetaraan dua string pada TM dalam waktu linier. Hal yang sama berlaku untuk kesetaraan dua urutan entri yang lebih panjang. Juga, agar pertanyaan masuk akal sama sekali, input untuk kedua model mesin harus identik, yaitu, ditulis sebagai string di atas alfabet terbatas. Jadi, RAM Anda akan membutuhkan waktu O (log n) untuk membaca setiap entri dan mengubahnya menjadi sebuah kata, menjadikan operasi ini sia-sia.
Emil Jeřábek
@Emil Jeřábek, saya akan mengedit balasan saya untuk menunjukkan bahwa saya hanya memikirkan TM 1-tape. Ketika Anda mengatakan TM dapat menguji kesetaraan dalam waktu linier, saya kira Anda berpikir untuk TM 2-tape. Namun, saya mengerti bahwa seluruh pertanyaannya adalah tentang TM 1-tape. Mengenai formulir input, saya harus mengakui Anda mungkin benar, setidaknya untuk beberapa RAM kata. Tapi sejauh yang saya tahu, sebuah array int C ++ menyimpan bilangan bulat satu demi satu tanpa pemisah, seolah-olah mereka disimpan bersama urutan bit. 10 int pada 16 bit menempati 160 bit, bukan? Bahkan jika ini tidak terjadi, seseorang dapat membangun mesin yang bekerja dengan cara ini.
Daniel Porumbel
3
Model mesin Turing standar dalam teori kompleksitas adalah multi-tape. Saya gagal melihat bagaimana C ++ memiliki relevansi di sini, kami tidak membahas C ++, tetapi model RAM. Dalam model ini, masing-masing lokasi memori dapat menyimpan jumlah panjang , tetapi kami masih dapat beroperasi hanya pada satu (atau ) lokasi memori sekaligus. Secara khusus, kami hanya dapat mengakses input satu lokasi pada satu waktu: tidak ada operasi yang memungkinkan Anda untuk melakukan "baca lokasi input dan pisahkan mereka menjadi satu kata" dalam waktu yang konstan. O(logn)O(1)logn
Emil Jeřábek
Ada dua kemungkinan: (1) Lokasi input [0] berisi bit pertama dari angka pertama, lokasi [1] berisi bit kedua dari angka pertama, dan seterusnya. Maka perlu waktu untuk membaca di RAM, seperti untuk mesin Turing. Jadi, bahkan dengan TM single-tape, Anda hanya mendapatkan kecepatan kuadratik. (2) Lokasi input [0] berisi angka pertama, lokasi [1] angka kedua, dan sebagainya. Maka masalahnya tidak ada artinya pada TM, karena tidak dapat memproses input dari formulir ini. Dengan demikian, Anda tidak mendapatkan kecepatan sama sekali, tetapi masalah yang hanya bisa diekspresikan di salah satu model mesin. O(nlogn)
Emil Jeřábek
@Emil Jeřábek, Mengikuti komentar Anda, saya mengedit pertanyaan untuk mengajukan masalah dan algoritma RAM yang secara eksplisit membutuhkan untuk membaca data (dari kaset). Saya menghapus beberapa komentar saya yang tidak lagi relevan. Saya harap ini menyelesaikan masalah yang Anda tunjukkan. O(nlog(n))
Daniel Porumbel