Daniel Sank disebutkan dalam komentar , menanggapi pendapat (saya) bahwa percepatan konstan pada masalah mengakui algoritma waktu polinomial sedikit, bahwa
Teori kompleksitas terlalu terobsesi dengan batas skala ukuran tak terbatas. Yang penting dalam kehidupan nyata adalah seberapa cepat Anda mendapatkan jawaban untuk masalah Anda.
Dalam Ilmu Komputer, adalah umum untuk mengabaikan konstanta dalam algoritma, dan secara keseluruhan, ini ternyata bekerja dengan baik. (Maksud saya, ada algoritma yang baik dan praktis . Saya harap Anda akan memberikan saya algoritma (teoretis) yang telah dimiliki oleh para peneliti dalam hal ini!)
Tapi, saya mengerti bahwa ini adalah situasi yang sedikit berbeda seperti kita sekarang:
- Tidak membandingkan dua algoritma yang berjalan pada komputer yang sama, tetapi dua (sedikit) algoritma berbeda pada dua komputer yang sangat berbeda .
- Kami sekarang bekerja dengan komputer kuantum , yang mungkin pengukuran kinerjanya secara tradisional tidak cukup.
Secara khusus, metode analisis algoritma hanyalah metode . Saya pikir metode komputasi yang baru secara radikal membutuhkan tinjauan kritis terhadap metode evaluasi kinerja kami saat ini!
Jadi, pertanyaan saya adalah:
Ketika membandingkan kinerja algoritma pada komputer kuantum versus algoritma pada komputer klasik, apakah praktik 'mengabaikan' konstanta adalah praktik yang baik?
sumber
Jawaban:
Penggunaan Ilmu Komputer yang umum dari 'konstanta pengabaian' hanya berguna di mana perbedaan kinerja berbagai jenis arsitektur perangkat keras atau perangkat lunak dapat diabaikan dengan sedikit pemijatan. Tetapi bahkan dalam komputasi klasik, penting untuk mewaspadai dampak arsitektur (perilaku caching, penggunaan hard disk) jika Anda ingin menyelesaikan masalah yang sulit, atau masalah besar.
Praktek mengabaikan konstanta bukanlah praktik yang dimotivasi (dalam arti terus-menerus ditegaskan) dari sudut pandang implementasi. Ini sebagian besar didorong oleh minat dalam pendekatan untuk mempelajari algoritma yang berperilaku baik di bawah komposisi dan mengakui karakterisasi sederhana, dengan cara yang dekat dengan matematika murni. Teorema percepatan untuk Mesin Turing berarti bahwa setiap definisi yang masuk akal tidak dapat mencoba untuk menjabarkan kompleksitas masalah terlalu tepat untuk sampai pada teori yang masuk akal; dan selain itu, dalam perjuangan untuk menemukan algoritma yang baik untuk masalah sulit, faktor konstan bukanlah bagian yang menarik secara matematis ...
Pendekatan yang lebih abstrak untuk mempelajari algoritma ini sangat bermanfaat. Tetapi sekarang kita dihadapkan dengan situasi di mana kita memiliki dua model perhitungan, di mana
Dalam hal ini, kita dapat bertanya apakah masuk akal untuk mempertimbangkan manfaat asimptotik, dengan atau tanpa perhitungan faktor-faktor konstan. Karena upaya ekstra yang mungkin diperlukan untuk melakukan komputasi kuantum scalable, tidak hanya faktor skalar tetapi "percepatan" polinomial dalam kinerja teoretis dapat terhapus begitu semua overhead dalam mewujudkan algoritma kuantum diperhitungkan.
Pada hari-hari awal ini, mungkin ada juga perbedaan yang signifikan dalam kinerja untuk berbagai pendekatan arsitektur kuantum. Ini bisa membuat pilihan arsitektur sebagai penting (jika tidak lebih penting) untuk seberapa baik kinerja sebuah algoritma daripada analisis asimptotik - sama pentingnya bagi Anda apakah Anda melakukan perhitungan konvensional pada mesin von Neumann atau jaringan yang sangat terdistribusi dengan latensi yang signifikan.
Hal yang sebenarnya penting untuk perhitungan praktis adalah - dan selalu - bukan hanya algoritma, tetapi implementasi algoritma : sebuah algoritma yang direalisasikan dengan cara tertentu, pada arsitektur tertentu. Praktik umum analisis asimptotik yang mengabaikan faktor konstan memungkinkan kita untuk memperhatikan alasan sistematis, matematis untuk perbedaan dalam kinerja algoritma, dan secara praktis termotivasi pada saat-saat ketika perbedaan arsitektur tidak begitu besar sehingga mendominasi kinerja praktis .
Sehubungan dengan teknologi kuantum, kita tidak berada dalam situasi bahagia di mana kita dapat dengan aman mengabaikan faktor-faktor konstan dalam konteks praktis apa pun. Tetapi mungkin suatu hari kita akan dapat melakukannya. Ini adalah permainan panjang teknologi informasi kuantum - sampai sekarang, hampir satu-satunya permainan yang pernah dimainkan oleh para ilmuwan komputer akademik, sejauh menyangkut teknologi informasi kuantum. Mengantisipasi hari itu ketika teknologi kuantum menemukan pijakannya, akan baik bagi kita untuk terus mengejar analisis asimptotik, sebagai satu baris penyelidikan dalam kinerja algoritma kuantum.
sumber
sumber
Anda tidak dapat mengabaikan faktor konstan ketika membandingkan perhitungan kuantum dengan perhitungan klasik. Mereka terlalu besar.
Sebagai contoh, berikut adalah gambar dari beberapa slide yang saya sajikan tahun lalu:
Hal-hal di sepanjang bagian bawah adalah pabrik negara sihir. Mereka memiliki jejak 150 ribu qubit fisik. Karena gerbang AND menggunakan 150K qubit selama 0,6 milidetik, kami menduga bahwa volume ruangwaktu dari sebuah gerbang AND kuantum berada di urutan 90 detik qubit.
Salah satu tujuan rekan kerja saya adalah menggunakan 1 cpu per 100 qubit saat melakukan koreksi kesalahan. Jadi kita dapat mengatakan bahwa 90 detik qubit membutuhkan kerja 0,9 cpu detik. Kami telah membuat konstruksi kuantum beberapa kali lebih efisien sejak gambar di atas dibuat, jadi mari kita sebut saja 0,1 cpu detik saja.
(Ada banyak asumsi yang masuk ke dalam perkiraan ini. Seperti apa arsitektur, tingkat kesalahan, dll. Saya hanya mencoba menyampaikan urutan ide besarnya.)
Dibutuhkan 63 gerbang AND untuk melakukan penambahan 64 bit. 63 * 0,1 cpu detik ~ = 6 cpu detik. Secara kuantitatif, penambahan 64 bit membutuhkan biaya lebih dari satu CPU. Secara klasik, tambahan 64 bit membutuhkan biaya kurang dari satu nanosecond CPU. Mudah ada perbedaan faktor konstan 10 miliar di sini. Jika Anda membandingkannya dengan mesin klasik paralel, seperti GPU, angkanya semakin buruk. Anda tidak dapat mengabaikan faktor konstan dengan banyak digit itu.
Sebagai contoh, pertimbangkan algoritma Grover, yang memungkinkan kita untuk mencari input yang memuaskan ke fungsi dalam sqrt (N) evaluasi fungsi alih-alih evaluasi N. Tambahkan faktor konstan 10 miliar, dan selesaikan dari mana komputer kuantum mulai membutuhkan lebih sedikit evaluasi:
Algoritma Grover tidak dapat memaralelkan evaluasi, dan evaluasi memerlukan setidaknya satu gerbang AND, jadi pada dasarnya Anda hanya mulai melihat manfaat waktu CPU ketika pencarian membutuhkan waktu puluhan juta tahun.
Kecuali kita membuat faktor konstan jauh lebih baik, tidak ada yang akan menggunakan pencarian Grover untuk sesuatu yang bermanfaat. Saat ini situasi kuantum-vs-klasik adalah keuntungan atau kegagalan eksponensial.
sumber
Sementara jawaban lain memberikan poin bagus, saya merasa bahwa saya masih sedikit tidak setuju. Jadi, saya akan membagikan pemikiran saya sendiri tentang hal ini.
Singkatnya, saya pikir menampilkan konstanta 'apa adanya' adalah kesempatan yang sia-sia. Mungkin itu yang terbaik yang bisa kita dapatkan untuk saat ini, tetapi itu jauh dari ideal.
Tapi pertama-tama, saya pikir perjalanan singkat itu perlu.
Kapan kita memiliki algoritma yang efektif?
Saya harap jelas bahwa algoritma ini adalah sampah, karena hanya berfungsi dengan benar ketika input kami masukP2 . Namun, dapatkah kita melihat ini ketika diberi algoritma sebagai kotak hitam dan "secara bersamaan" hanya menguji dengan input dariP ? Tentu, kami dapat mencoba untuk menguji banyak contoh, tetapi sangat mudah dibuatP sangat besar tanpa algoritma menjadi tidak efektif pada input dari P2 (mungkin kita ingin menggunakan peta-hash atau sesuatu).
Jadi, tidak masuk akal bahwa algoritma sampah kami mungkin kebetulan memiliki speedup 'ajaib'. Sekarang, tentu saja ada banyak teknik desain eksperimen yang dapat mengurangi risiko, tetapi mungkin algoritma 'cepat' yang lebih cerdik yang masih gagal dalam banyak hal, tetapi tidak cukup contoh yang dapat menipu kita! (perhatikan juga bahwa saya berasumsi tidak ada peneliti yang berbahaya , yang memperburuk keadaan!)
Jadi, sekarang saya akan menjawab: "Bangunkan saya ketika ada metrik kinerja yang lebih baik".
Bagaimana kita bisa berbuat lebih baik?
Jika kami mampu menguji algoritme 'kotak hitam' kami untuk semua kasus, kami tidak dapat tertipu oleh hal di atas. Namun, ini tidak mungkin untuk situasi praktis. (Ini dapat dilakukan dalam model teoritis!)
Apa yang kita dapat bukan lakukan adalah untuk membuat statistik hipotesis untuk beberapa diparameterisasi waktu berjalan (biasanya untuk ukuran input) untuk menguji ini, mungkin beradaptasi hipotesis dan uji kami lagi, sampai kita mendapatkan hipotesis kami seperti dan menolak null tampaknya masuk akal. (Perhatikan bahwa kemungkinan ada faktor-faktor lain yang terlibat yang saya abaikan. Saya bisa dibilang ahli matematika. Desain percobaan bukan sesuatu yang sesuai dengan keahlian saya)
Keuntungan dari pengujian statistik pada parameterisasi (mis. Adalah algoritma kamiO ( n3) ? ) adalah bahwa model lebih umum dan karenanya lebih sulit untuk 'ditipu' seperti pada bagian sebelumnya. Bukan tidak mungkin, tetapi setidaknya klaim statistik tentang apakah ini masuk akal dapat dibenarkan.
Jadi, apa yang harus dilakukan dengan konstanta?
Saya pikir hanya menyatakan "109 speedup, wow! "adalah cara yang buruk dalam menangani kasus ini. Tapi saya juga berpikir sepenuhnya mengabaikan hasil ini juga buruk.
Saya pikir paling berguna untuk menganggap konstanta aneh sebagai anomali , yaitu klaim yang dengan sendirinya menjamin penyelidikan lebih lanjut. Saya pikir membuat hipotesis berdasarkan model yang lebih umum daripada sekadar 'algoritma kami membutuhkan waktu X' adalah alat yang baik untuk melakukan ini. Jadi, sementara saya tidak berpikir kita bisa mengambil alih konvensi CS di sini, sepenuhnya mengabaikan 'penghinaan' untuk konstanta adalah ide yang buruk juga.
sumber