Bagi orang-orang seperti saya yang mempelajari algoritma untuk mencari nafkah, model komputasi standar abad ke-21 adalah integer RAM . Model ini dimaksudkan untuk mencerminkan perilaku komputer nyata lebih akurat daripada model mesin Turing. Komputer dunia nyata memproses bilangan bulat banyak-bit dalam waktu konstan menggunakan perangkat keras paralel; bukan bilangan bulat sembarang , tetapi (karena ukuran kata tumbuh dengan mantap dari waktu ke waktu) juga bukan bilangan bulat ukuran tetap .
Model tergantung pada satu parameter , yang disebut ukuran kata . Setiap alamat memori memiliki integer bit tunggal , atau kata . Dalam model ini, ukuran input adalah jumlah kata dalam input, dan waktu berjalan suatu algoritma adalah jumlah operasi pada kata-kata . Operasi aritmatika standar (penambahan, pengurangan, perkalian, pembagian bilangan bulat, sisanya, perbandingan) dan operasi boolean (bitwise dan, atau, xor, shift, rotate) pada kata-kata memerlukan waktu menurut definisi .w n O ( 1 )wwnO ( 1 )
Secara formal, ukuran kata adalah TIDAK konstanw untuk tujuan menganalisis algoritma dalam model ini. Untuk membuat model konsisten dengan intuisi, kita memerlukan , karena jika tidak kita bahkan tidak dapat menyimpan integer dalam satu kata. Namun demikian, untuk sebagian besar algoritma non-numerik, waktu berjalan sebenarnya independen dari , karena algoritma tersebut tidak peduli dengan representasi biner yang mendasari input mereka. Mergesort dan heapsort keduanya berjalan dalam waktu ; median-of-3-quicksort berjalan dalam waktu dalam kasus terburuk. Satu pengecualian penting adalah jenis radix biner, yang berjalan dalam waktu .n w O ( n log n ) O ( n 2 ) O ( n w )w ≥ log2nnwO(nlogn)O(n2)O(nw)
Pengaturan memberi kita model RAM biaya logaritmik tradisional. Tetapi beberapa algoritma integer RAM dirancang untuk ukuran kata yang lebih besar, seperti algoritma pengurutan integer linear-waktu dari Andersson et al. , yang membutuhkan .w = Ω ( log 2 + ε n )w=Θ(logn)w=Ω(log2+εn)
Untuk banyak algoritme yang muncul dalam praktiknya, ukuran kata sama sekali bukan masalah, dan kita dapat (dan memang) kembali pada model RAM seragam yang jauh lebih sederhana. Satu-satunya kesulitan yang serius berasal dari perkalian bersarang, yang dapat digunakan untuk membangun sangat bilangan bulat besar sangat cepat. Jika kita dapat melakukan aritmatika pada bilangan bulat sewenang-wenang dalam waktu konstan, kita dapat menyelesaikan masalah di PSPACE dalam waktu polinomial .w
Pembaruan: Saya juga harus menyebutkan bahwa ada pengecualian pada "model standar", seperti algoritma pengganda integer Fürer , yang menggunakan mesin Turing multitape (atau setara, "bit RAM"), dan sebagian besar algoritma geometris, yang dianalisis secara teoritis model "RAM nyata" yang bersih namun ideal .
Ya, ini adalah sekaleng cacing.