Model perhitungan mana yang "terbaik"?


41

Pada 1937 Turing menggambarkan mesin Turing. Sejak itu banyak model komputasi telah diuraikan dalam upaya untuk menemukan model yang seperti komputer nyata tetapi masih cukup sederhana untuk merancang dan menganalisis algoritma.

Akibatnya, kami memiliki selusin algoritma untuk, misalnya, masalah SORT untuk model komputasi yang berbeda. Sayangnya, kami bahkan tidak dapat memastikan bahwa implementasi suatu algoritma dengan waktu berjalan O (n) dalam RAM kata dengan operasi bit-vektor diperbolehkan akan berjalan lebih cepat daripada implementasi algoritma dengan waktu berjalan O (n⋅logn) di RAM kata (saya berbicara tentang implementasi "baik" saja, tentu saja).

Jadi, saya ingin memahami model mana yang ada adalah "yang terbaik" untuk merancang algoritma dan saya mencari survei terbaru dan terperinci tentang model perhitungan, yang memberikan pro dan kontra dari model dan kedekatan mereka dengan kenyataan.


1
Diposting silang di MathOverflow ( mathoverflow.net/questions/44558/… ), meskipun dialihkan ke sini.
Dave Clarke

@Tatiana, Pertanyaan bagus, Apa yang Anda maksud dengan "yang terbaik"? Apakah yang Anda maksud adalah model dengan run-time teoretis yang dekat dengan run-time "nyata"?
Mohammad Al-Turkistany

8
Jika Anda mencari model waktu berjalan "nyata" yang akurat, maka sepertinya penting untuk memodelkan cache secara akurat. Secara khusus, komputasi modern memiliki banyak lapisan caching (CPU, RAM, Disk, dll ...) dengan beberapa lapisan menjadi urutan besarnya lebih lambat daripada yang lain; itu tidak keluar dari pertanyaan untuk runtime "nyata" algoritma yang akan ditentukan oleh jumlah cache yang hilang. Secara anekdot, saya pernah mendengar bahwa salah satu alasan bahwa metode penghalang dalam pemrograman linier bekerja sangat baik meskipun jaminan teoretisnya yang buruk adalah karena mereka seringkali cukup efisien dalam cache.
mhum

4
Sejauh yang saya tahu, seperti yang dikatakan mhum, perbedaan terbesar dari waktu berjalan yang diprediksi dalam model RAM kata dan waktu berjalan nyata umumnya muncul karena pengambilan data ... variabel yang salah ada dalam memori cache dan waktu pengambilan melambat turun sangat karena ini. Ada beberapa upaya untuk memodelkan ini dengan model teoritis-memori hierarkis, dan saya tidak percaya bahwa salah satu dari upaya ini telah sangat berhasil, karena model-model tersebut pada akhirnya terlalu rumit untuk mudah dikerjakan.
Peter Shor

2
Jika Anda memiliki algoritme yang menurut Anda mungkin berguna dalam praktiknya, dan Anda ingin melihatnya benar-benar digunakan, hal terbaik yang dapat Anda lakukan untuk memastikan ini adalah dengan mengimplementasikannya atau meminta orang lain untuk mengimplementasikannya (walaupun itu bukan yang baik) implementasi yang cukup untuk dimasukkan ke dalam perangkat lunak praktis). Untuk studi kasus dalam hal ini, lihat sejarah algoritma kompresi data LZW. Bahkan, mungkin tidak ada gunanya mencoba mencari tahu bagaimana caching mempengaruhi algoritma kecuali itu caching yang orang tertarik untuk mengimplementasikan; jika tidak, tidak ada yang akan memperhatikan hasil Anda.
Peter Shor

Jawaban:


30

Saya selalu menganggap model RAM Word standar sebagai "yang terbaik" menurut Anda. Setiap orang yang belajar memprogram dalam bahasa seperti C (atau padanan yang longgar seperti Java, dll.) Memiliki model ini di benak ketika mereka memikirkan komputer.

Tentu saja, Anda terkadang perlu generalisasi tergantung pada rezim tempat Anda bekerja. Model memori eksternal adalah yang penting untuk diingat. Ini berlaku tidak hanya ketika Anda bekerja dengan disk, tetapi juga dalam memahami (memaksa Anda untuk peduli) cache. Tentu saja, memperlakukannya terlalu serius juga dapat menyebabkan hasil yang tidak masuk akal, karena model memori eksternal murni tidak menghitung perhitungan. Generalisasi lain dari Word RAM adalah paralelisme, tetapi di sana kita semua sedikit bingung saat ini :)

O(n)O(nlgn)nn

Komentar akhir tentang algoritme dan "kenyataan": selalu ingat apa yang ingin Anda capai. Saat kami bekerja dalam algoritme, kami mencoba menyelesaikan masalah tersulit di luar sana (misalnya SAT pada 50 variabel, atau mengurutkan satu miliar angka). Jika Anda mencoba mengurutkan 200 angka atau menyelesaikan SAT pada 20 variabel, Anda tidak memerlukan algoritma yang bagus. Itu sebabnya sebagian besar algoritma pada kenyataannya agak sepele. Ini tidak mengatakan hal buruk tentang penelitian algoritmik - kita hanya tertarik pada 1/1000 masalah nyata yang terjadi menjadi sulit ...


Terima kasih atas jawaban Anda. Saya ingin mengerti, generalisasi mana yang layak ditambahkan ke kata RAM. Bisakah kita menggambarkan model, yang akan mencakup semua trik ini seperti operasi bit-vektor, paralelisme, cache, dan masih sederhana?
Tatiana Starikovskaya

10

Tidak ada satu model komputasi yang benar-benar memuaskan di mana untuk menganalisis algoritma sedih, bahkan dalam apa yang mungkin dianggap sebagai pengaturan tradisional. Itu dengan asumsi semua data mudah diakses dan ruang kerja tidak terikat secara efektif.

Mesin Turing multi-tape, secara teoritis ditentukan dengan baik dan banyak algoritma telah dirancang dan dianalisis dalam model ini selama bertahun-tahun. Namun, bagi sebagian orang itu tidak cukup erat kaitannya dengan bagaimana komputer nyata bekerja untuk benar-benar menjadi model yang baik untuk digunakan di abad ke-21. Di sisi lain, model kata-RAM telah menjadi populer dan tampaknya menangkap lebih akurat kerja komputer modern (operasi kata-kata bukan bit, akses waktu yang konstan ke lokasi memori). Namun, ada aspek yang kurang ideal. Misalnya, tidak ada model RAM satu kata. Pertama-tama kita harus menentukan operasi kata mana yang diizinkan dalam waktu konstan. Ada banyak opsi untuk ini tanpa jawaban tunggal yang diterima. Kedua, ukuran kata w biasanya diatur untuk tumbuh dengan ukuran input (yang setidaknya secepat log (n)) untuk memungkinkan setiap item dalam memori ditangani dengan menggunakan jumlah kata yang konstan. Ini berarti bahwa seseorang harus membayangkan kelas mesin tanpa batas di mana algoritma Anda dijalankan atau bahkan lebih buruk, bahwa mesin berubah ketika Anda memberinya lebih banyak data. Setidaknya ini adalah pemikiran yang paling membingungkan di antara murid-murid saya. Akhirnya, Anda mendapatkan hasil kompleksitas yang agak mengejutkan dengan model word-RAM yang mungkin tidak cocok dengan yang dipelajari sebagai siswa. Sebagai contoh, perkalian dua angka n-bit adalah O (n) waktu dalam model ini dan hanya membaca dalam string n-bit adalah operasi waktu sublinear secara tiba-tiba. Ini berarti bahwa seseorang harus membayangkan kelas mesin tanpa batas di mana algoritma Anda dijalankan atau bahkan lebih buruk, bahwa mesin berubah ketika Anda memberinya lebih banyak data. Setidaknya ini adalah pemikiran yang paling membingungkan di antara murid-murid saya. Akhirnya, Anda mendapatkan hasil kompleksitas yang agak mengejutkan dengan model word-RAM yang mungkin tidak cocok dengan yang dipelajari sebagai siswa. Misalnya, perkalian dua angka n-bit adalah O (n) waktu dalam model ini dan hanya membaca dalam string n-bit adalah operasi waktu sublinear tiba-tiba. Ini berarti bahwa seseorang harus membayangkan kelas mesin tanpa batas di mana algoritma Anda dijalankan atau bahkan lebih buruk, bahwa mesin berubah ketika Anda memberinya lebih banyak data. Setidaknya ini adalah pemikiran yang paling membingungkan di antara murid-murid saya. Akhirnya, Anda mendapatkan hasil kompleksitas yang agak mengejutkan dengan model word-RAM yang mungkin tidak cocok dengan yang dipelajari sebagai siswa. Sebagai contoh, perkalian dua angka n-bit adalah O (n) waktu dalam model ini dan hanya membaca dalam string n-bit adalah operasi waktu sublinear secara tiba-tiba.

Setelah mengatakan semua itu, jika Anda hanya ingin tahu apakah algoritme Anda kemungkinan akan berjalan cepat, kemungkinan besar akan dilakukan :-)


2
Saya pikir jika Anda menghindari operasi aritmatika bitwise atau kata-model dalam upaya untuk menghindari masalah "mesin tumbuh dengan ukuran input", tetapi masih menggunakan RAM atau mesin penunjuk yang seragam, maka Anda hanya membodohi diri sendiri: model-model lain memiliki masalah yang sama. Bagaimana mereka mengindeks input mereka? Jawabannya adalah: komputer nyata kehabisan memori, tetapi meskipun demikian itu masih lebih mudah untuk merancang algoritma untuk mereka dengan asumsi mereka adalah RAM (atau mungkin lebih baik menggunakan model yang memperhitungkan biaya hirarki memori) daripada mengasumsikan mereka sebuah DFA.
David Eppstein

4
Model RAM yang dibahas Knuth, misalnya, menghabiskan waktu untuk mencari alamat dengan bit-bit dan juga waktu untuk menambahkan dua angka bit (ini adalah bagaimana ia mendapatkan Theta (log n) untuk waktu mengalikan dua n angka-bit dalam model RAM tanpa operasi waktu yang konstan pada kata-kata). Sangat menarik bagaimana model yang paling banyak diterima telah berubah dalam 20 tahun terakhir dan berapa banyak model yang tidak pernah dibahas sama sekali.
Raphael

8

Model hanyalah model. Saya tidak akan mendorongnya terlalu jauh; mereka mengatakan sesuatu tentang beberapa aspek dari algoritma Anda, tetapi tidak sepenuhnya benar.

Saya menyarankan agar Anda cukup menggunakan model RAM kata standar dalam analisis Anda dan mengimplementasikan algoritma dan melihat seberapa baik kinerjanya dalam praktik.

(Sebenarnya hanya menerapkan algoritma Anda tanpa pernah menjalankannya memberitahu Anda sudah banyak tentang hal itu ... Untuk satu hal, itu kemudian terbukti dapat diimplementasikan.)


3
Yah, saya punya dua keberatan. Pertama, tidak banyak ahli teori yang mengimplementasikan algoritma, namun kita harus membandingkannya. Kedua, saya ingin memahami fitur apa dari komputer yang dapat kita tambahkan ke model yang tidak kehilangan kesederhanaannya.
Tatiana Starikovskaya

11
Solusi yang diusulkan David Johnson untuk ini adalah memiliki lebih banyak orang menerapkan algoritma - dia memulai ALENEX dan DIMACS Tantangan untuk mengatasi ini. Saya memiliki beberapa pengalaman dengan ini juga. Dengan Ken Clarkson, saya membuat algoritma lambung cembung acak yang kami pikir akan bekerja dengan baik dalam praktik. Clarkson memiliki siswa musim panas di Bell Labs yang mengimplementasikannya. Berdasarkan janji implementasi ini, ide-ide itu dikerjakan ke dalam program qhull (ditulis di Geometry Center), tetapi dengan beberapa percepatan heuristik yang berarti algoritma tidak lagi memiliki jaminan teoretis bahwa ia berjalan dengan cepat.
Peter Shor

5

Jika tugas komputasi Anda lebih banyak tentang memindahkan data daripada melakukan operasi (aritmatika), (kumpulan data sangat besar sehingga mereka bahkan tidak masuk ke memori utama), maka model I / O (diperkenalkan oleh Aggarwal dan Vitter pada 1988 ) bisa sangat akurat. Untuk tugas-tugas seperti permutasi array elemen besar di memori utama, dapat membantu untuk menggunakan algoritma yang I / O-optimal (dalam implementasi yang hati-hati).

Untuk komputer multi-core modern, varian paralel yang diperkenalkan oleh Arge, Goodrich, Nelson dan Sitchinava pada 2008 dapat menjadi model yang akurat.


5

Jika Anda memaksudkan model komputasi "terbaik" untuk membuat hidup Anda lebih rumit, maka Anda dapat menggunakan mesin turing universal 2-simbol, 3-simbol Wolfram.

PROS : tidak ada kecuali sensasi berjalan di garis tipis antara akal dan kegilaan;

CONS : ton ...

:-D (hanya bercanda, pada dasarnya saya setuju dengan jawaban sebelumnya ...)


1

Pada catatan yang lebih teoretis: Artikel Ultimate teoretis model nanocomputers berpendapat bahwa model mesh 3D reversibel adalah model fisik optimal dari komputasi, dalam arti bahwa tidak ada model fisik lain yang bisa secara asimptot lebih cepat. Pertimbangan fisik seperti kecepatan cahaya, prinsip Landauer , dan ikatan Bekenstein dibahas.

Mengutip dari abstrak:

Kami menemukan bahwa menggunakan teknologi saat ini, mesin reversibel yang hanya berisi beberapa ratus lapisan sirkuit dapat mengungguli semua mesin yang ada, dan bahwa komputer yang dapat dibalik berdasarkan nanoteknologi hanya perlu beberapa mikron saja untuk mengungguli segala teknologi ireversibel yang mungkin.

Kami berpendapat bahwa implementasi silikon mesh 3D reversibel dapat berharga hari ini untuk mempercepat perhitungan ilmiah dan teknik tertentu, dan mengusulkan bahwa model harus menjadi fokus studi masa depan dalam teori algoritma paralel untuk berbagai masalah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.