Apakah penggunaan Ilmu Komputer umum 'mengabaikan konstanta' berguna ketika membandingkan komputasi klasik dengan komputasi kuantum?


13

Daniel Sank disebutkan dalam komentar , menanggapi pendapat (saya) bahwa percepatan konstan pada masalah mengakui algoritma waktu polinomial sedikit, bahwa108

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:

  1. Tidak membandingkan dua algoritma yang berjalan pada komputer yang sama, tetapi dua (sedikit) algoritma berbeda pada dua komputer yang sangat berbeda .
  2. 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?


Mengabaikan konstanta bahkan tidak selalu merupakan ide bagus dalam komputasi klasik. Bagaimana ini pertanyaan komputasi kuantum dan bukan pertanyaan tentang bagaimana berpikir tentang penskalaan sumber daya algoritma? Dengan kata lain, ketika berbicara tentang waktu atau sumber daya lain yang diperlukan untuk menjalankan perhitungan, apakah perhitungan itu kuantum atau klasik tampaknya tidak relevan dengan pertanyaan apakah Anda peduli dengan faktor kecepatan seratus juta.
DanielSank

1
@DanielSank Seperti yang saya sebutkan, mengabaikan konstanta dalam analisis algoritma telah bekerja dengan baik untuk komputasi klasik. Ini juga merupakan standar de-facto untuk para peneliti algoritma . Saya cukup tertarik mendengar tentang semua peneliti algoritma yang tampaknya tidak setuju. Alasan utama saya mengajukan pertanyaan ini adalah bahwa 'mengabaikan konstanta' lebih merupakan aturan daripada tidak untuk hampir semua peneliti algoritma. Karena saya yakin situs ini akan memiliki orang-orang seperti kontributor yang berguna, mungkin menarik untuk mengetahui apakah pemikiran seperti itu harus disesuaikan ketika membandingkan kuantum dengan klasik.
Kadal diskrit

3
Obrolan menarik tentang pertanyaan ini ada di sini .
DanielSank

Jawaban:


9

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

  • Yang satu berada dalam kondisi kematangan teknologi (komputasi klasik); dan
  • Seseorang dalam keadaan yang sangat tidak dewasa, tetapi berusaha untuk mewujudkan model teoritis yang dapat mengarah pada perbaikan asimptotik yang signifikan (perhitungan kuantum).

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.


Jadi, sebagai kesimpulan, Anda tampaknya mendukung 'tidak membuang konstanta', untuk saat ini , sementara kami masih dalam tahap di mana implementasi sangat penting. Menarik. Saya suka alur pemikiran Anda, tapi saya sedikit tidak setuju. Saya akan segera memperluas ini dalam jawaban saya sendiri.
Kadal diskrit

1
@ Discretelizard: Saya mendukung tidak membuang konstanta, dalam situasi di mana konstanta membuat perbedaan praktis. Jelas konstanta seperti 1e8 juga penting secara praktis dalam perhitungan klasik; tetapi kita dapat mengabaikan konstanta seperti itu untuk mencoba menemukan detail lain yang mungkin juga sangat menarik. Tetapi juga benar bahwa 1e8 lebih penting dalam perbandingan antara teknologi kuantum dan klasik seperti yang ada sekarang, daripada penting dalam komputasi klasik.
Niel de Beaudrap

5

HAI(f[N])N

1010

300


2

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:

kuantum dan gerbang

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:

N>1010NN>1020

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.


1

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?

106

  1. P
  2. P2P
  3. P2, cukup lihat faktorisasi dalam tabel kami dan laporkan. Kalau tidak, laporkan 'kesalahan'

Saya harap jelas bahwa algoritma ini adalah sampah, karena hanya berfungsi dengan benar ketika input kami masuk P2. 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 kami HAI(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.

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.