Saya pikir ahelwer
jawaban itu menyentuh beberapa cara yang kita pikirkan tentang kompleksitas algoritma. Namun - karena kita tidak benar-benar memiliki "ramalan" di dunia nyata yang ingin kita tanyakan, Anda mungkin bertanya-tanya mengapa kita akan khawatir tentang kerumitan permintaan, atau gagasan tentang ramalan sama sekali. Saya akan mencoba memberikan beberapa perspektif tentang ini, dan khususnya untuk menggambarkan bagaimana Anda mungkin mencoba memikirkan cara untuk membangun "oracle Deutsch – Josza" dengan cara yang Anda tidak merasa seolah-olah Anda selingkuh.
(Sebagai Norbert Schuch
ditunjukkan, untuk masalah Deutsch yang merupakan kasus dasar dari Deutsch-Josza, tidak ada banyak ruang untuk wawasan, tapi saya berharap pertanyaan Anda tentang nubuat berlaku lebih umum juga. Itulah yang akan saya bicarakan di sini.)
Intuisi tentang nubuat
Konsep oracle adalah cara untuk memungkinkan diri kita menyederhanakan cara kita berbicara tentang masalah komputasi.
Aplikasi asli dari konsep oracle adalah mempertimbangkan secara hipotetis apa yang bisa kita lakukan jika kita bisa menyelesaikan masalah yang sulit, bahkan masalah yang mustahil, tanpa berkomitmen bagaimana kita bisa melakukannya bahkan secara prinsip. Tetapi dalam kompleksitas komputasi akhir-akhir ini - khususnya dalam perhitungan kuantum, misalnya dalam kasus Deutsch-Josza, Bernstein-Vazirani, dan masalah oracle lainnya - situasinya berbeda: oracle menggambarkan fungsi yang merupakan dasar dari masalah. Fakta bahwa itu adalah 'oracle' adalah cara untuk menyusun bagaimana kita menggambarkan fungsi yang menjadi pusat masalah: bukan berarti kita tidak boleh merenungkan bagaimana fungsi dihitung, tetapi informasi ini tidak disediakan sebagai bagian masalah, dan bahwa kami tidak peduli dengan waktu atau kompleksitas lain yang terkait dengan fungsi itu.
Ketika kita mengambil pendekatan ini, kita sebenarnya dapat memperoleh jawaban yang terkait dengan pertanyaan yang sangat sulit dalam perhitungan. Misalnya, Anda mungkin tahu bahwa kita tidak tahu bagaimana untuk membuktikan baik P ≠ NP atau P = NP , tetapi bahwa kita dapat menunjukkan bahwa ada nubuat Sebuah sehingga kita dapat menunjukkan bahwa P A ≠ NP A . Apa yang dilakukan oracle A di sini adalah tidak membantu komputer (lebih tepatnya, mesin Turing deterministik atau mesin Turing nondeterministik) untuk menyelesaikan masalah - itu mewakili masalah yang harus dipecahkan oleh komputer. Fakta bahwa kita dapat menunjukkan dalam beberapa kasus bahwa P A ≠ NP A , tidak berarti bahwa P benar - benar berbeda dari NP : itu hanya berarti bahwa hanya menggunakan nondeterminisme benar-benar sumber daya yang signifikan untuk dimiliki model komputasi - ini memungkinkan Anda untuk menyelesaikan beberapa masalah secara efisien, dan tidak ada cara secara umum untuk mensimulasikan nondeterminisme secara efisien pada komputer deterministik. Jadi jika Anda ingin memecahkan masalah terkait dengan apa A melakukan komputasi, Anda benar-benar akan membutuhkan beberapa informasi tentang struktur fungsi apapun yang bisa efisien menghitung A .
Ini adalah salah satu hal utama tentang nubuat: mereka memungkinkan Anda untuk berbicara tentang cara model komputasi dapat atau tidak bisa menyelesaikan masalah, ketika Anda diberikan informasi terbatas tentang masalah tersebut.
Menggunakan algoritma oracle untuk menyelesaikan masalah non-oracle
Algoritme Deutsch-Josza, atau algoritma Bernstein-Vazirani, pada prinsipnya bukan algoritma yang dilakukan seseorang untuk kepentingan mereka sendiri. (Yah, tidak benar - benar - lihat Bagian berikutnya.) Mereka berdiri untuk cara yang Anda dapat memecahkan masalah . Masalah apa yang mereka pecahkan? Mereka memungkinkan Anda untuk menemukan fitur tertentu dari fungsi yang Anda minati - apakah itu konstan / seimbang, atau vektor apa yang terkait dalam beberapa fungsi linear skalar-dihargai pada vektor.
Fungsi apa yang Anda jalankan? - Anda menjalankannya pada fungsi apa pun yang Anda minati jawabannya.
Penjelasan tentang ini sebagai algoritma berbasis oracle tidak penting. Masalah oracle pada dasarnya memungkinkan Anda untuk mengetahui bahwa, dengan komputer kuantum yang ideal, Anda dapat menyelesaikan masalah bahkan jika Anda tahu sedikit tentang fungsi tersebut , asalkan Anda benar-benar dapat mengevaluasi fungsi secara efisien dalam praktek. Untuk benar-benar mengevaluasi fungsi seperti itu, tentu saja Anda akan memerlukan beberapa deskripsi tentang bagaimana melakukannya, sehingga Anda memiliki lebih banyak informasi daripada di pengaturan oracle; tapi itu tidak mencegah Anda menggunakan algoritma yang sama.
Apa yang terjadi ketika Anda memiliki lebih banyak informasi daripada di pengaturan oracle, adalah bahwa tiba-tiba ada cara lain yang mungkin dapat Anda selesaikan. Secara khusus, mungkin menjadi mungkin untuk menyelesaikan masalah secara efisien secara klasik . (Ini adalah pengamatan yang sama dengan P A ≠ NP A : ini membuktikan bahwa ada masalah yang ada di NP , yang mana algoritma deterministik efisien setidaknya akan memerlukan informasi struktural aktual untuk dapat menyelesaikan - sehingga ketika Anda memberikan deskripsi dari fungsi yang dapat dihitung secara efisien daripada 'oracle', ada kemungkinan bahwa masalahnya akan munculP. ) Ini berarti bahwa algoritma kuantum mungkin tidak memiliki keunggulan yang sama atas algoritma klasik dalam memecahkan masalah tertentu yang Anda sajikan - dan pada kenyataannya mungkin bahwa pendekatan klasik lebih baik (terutama dengan perangkat yang kami miliki saat ini).
Pada akhirnya, hanya karena Anda memiliki algoritma kuantum untuk menyelesaikan sesuatu, tidak berarti bahwa itu selalu cara terbaik untuk menyelesaikan sesuatu. Ini tentu saja benar untuk algoritma Deutsch-Josza: bahkan dalam pengaturan oracle, menggunakan keacakan hampir sama baiknya, dan itu jauh lebih baik mengingat bahwa kita belum memiliki komputer kuantum besar yang dapat diandalkan! Tapi sekali lagi ...
"Menerapkan" oracle
Tujuan penerapan algoritma Deutsch-Josza sama dengan menerapkan " Hello, World! " - bukan untuk memecahkan masalah yang belum terpecahkan, tetapi untuk berlatih menggunakan alat yang Anda harapkan akan berguna untuk melakukan hal-hal lain.
Untuk mempraktikkan pengkodean, Anda harus merasa benar-benar santai dan nyaman dengan gagasan menerapkan oracle, dan dengan gagasan komputer yang mengevaluasi oracle. Pada prinsipnya, inilah yang ingin Anda lakukan. Bahkan jika Anda menggunakan emulator klasik, di mana komputer klasik sebenarnya mengevaluasi semua cabang superposisi dan secara eksplisit menemukan jawaban untuk masalah untuk berpura-pura bahwa itu adalah komputer kuantum yang bertindak dengan cara yang sedikit lebih bundaran, jadi baik itu - Anda sedang berlatih bagaimana menggunakan alat yang mungkin berguna untuk hal-hal lain, dan yang suatu hari tidak akan berjalan di komputer klasik.
Jadi bagaimana Anda sebaiknya menerapkan oracle Anda?
(i) Jika Anda benar-benar berkomitmen pada gagasan bahwa Anda baru saja berlatih, Anda tidak perlu berpura-pura melakukan sesuatu yang ajaib. Datang dengan cara apa pun untuk menerapkan fungsi oracle, bahkan jika itu jelas bagi pengamat kasual apakah hasilnya konstan atau seimbang. Anda hanya mencoba berlatih mewujudkan suatu algoritma - jangan khawatir bahwa seseorang akan menuduh Anda sebagai penipu, bahwa Anda berpura-pura menyembuhkan kanker tetapi sebenarnya bermain dengan Lego. Anda tidak pernah yang berpura-pura untuk menyembuhkan kanker, dan Anda sedang bermain dengan Lego oleh pilihan yang disengaja. Rangkul itu dan lakukan saja.
f(x)=g(x,r)rg(x,r)xr, dan di mana tidak jelas bagaimana menyelesaikannya secara klasik, tidak sepele.
g(x,r)=x⋅rx,r∈{0,1}ng(x,r)f(x)f(x)r≠0
Dapat dibayangkan bahwa konstruksi di atas dapat dielaborasi / dikaburkan sedikit, untuk mendapatkan konstruksi yang dijamin untuk mengevaluasi baik fungsi konstan atau fungsi seimbang, dan di mana mana dari dua ini terjadi tidak jelas atau bahkan sulit - tetapi saya bisa ' t pikirkan bagaimana, saat ini.
Ingatlah bahwa ini sebenarnya sangat sulit dilakukan - tetapi jika Anda dapat melihat cara untuk melakukannya, itu bisa sangat berharga: Bravyi, Gossett, dan Koening melakukan sesuatu seperti ini untuk masalah Bernstein-Vazirani, dan itu memungkinkan mereka untuk menunjukkan pemisahan kecil tapi tanpa syarat antara kompleksitas kuantum dan klasik, yang merupakan salah satu hal yang lebih menarik terjadi dalam kompleksitas kuantum dalam beberapa tahun terakhir.
TL; DR
Jangan memusingkan fakta bahwa Anda sedang 'mengevaluasi' oracle.
Jika Anda memikirkan sesuatu, hanya khawatir bahwa deskripsi aktual dari fungsi tersebut memungkinkan untuk menyelesaikan masalah yang sama dengan mudah tanpa komputer kuantum.
Jika motivasi Anda hanya untuk berlatih dengan pemrograman kuantum, jangan khawatir tentang itu. Simpan kekhawatiran Anda untuk masalah yang lebih berharga, seperti pemanasan global. Sementara itu, nikmati bermain dengan Lego saat Anda membangun sesuatu yang lebih.