Я думаю, що ahelwer
відповідь стосується деяких способів, які ми думаємо про складність алгоритмів. Однак, враховуючи, що в реальному світі у нас буквально немає «оракул», до яких ми хочемо запитати, ви можете задатися питанням, чому ми б турбувалися про складність запиту чи про ідею оракул взагалі. Я спробую дати певну точку зору на це, зокрема, щоб описати, як ви можете спробувати придумати способи побудови «оракула Deutsch – Josza» таким чином, щоб ви не відчували себе так, ніби ви обманюєте.
(Як Norbert Schuch
зазначається, для німецької проблеми, що є елементарним випадком Deutsch – Josza, існує не так багато можливостей для розуміння, але я думаю, що ваше питання про оракули стосується і більш загального характеру. Про це я і поговорю тут.)
Інтуїція про оракул
Поняття оракула - це спосіб дозволити собі спростити те, як ми говоримо про обчислювальні проблеми.
Первісне застосування концепції оракула полягало в тому, щоб гіпотетично розглянути, що ми можемо зробити, якщо зможемо вирішити складні проблеми, навіть неможливі проблеми, не беручи на себе зобов'язання, як це можна зробити навіть в принципі. Але в обчислювальній складності в наші дні - особливо в квантових обчисленнях, наприклад, у випадках Німца-Йоси, Бернштейна-Вазірані та інших проблем з оракулом - ситуація інша: оракул описує функцію, яка є основою проблеми.. Той факт, що це «оракул» - це спосіб структурувати те, як ми описуємо функцію, яка знаходиться в центрі проблеми: не те, що ми ніколи не повинні замислюватися над тим, як функція обчислюється, а що ця інформація просто не надається як частина проблеми, і що ми не переймаємося часом або іншими складностями, пов'язаними з цією функцією.
Використовуючи такий підхід, ми можемо отримати відповіді, які пов'язані з дуже складними питаннями в обчисленні. Наприклад, ви знаєте , що ми не знаємо , як довести або P ≠ NP або P = NP , але що ми можемо показати , що є оракулів таким чином, що ми можемо показати , що P A ≠ NP A . Що тут робить оракул А , це не допомогти комп'ютеру (точніше детермінованій машині Тьюрінга або недетермінованій машині Тьюрінга) вирішити проблему - це репрезентує проблему, яку повинен вирішити комп'ютер. Той факт , що ми можемо показати в деяких випадках , що P ≠ NP , не означає , що P є дійсно відрізняється від НП : це просто означає , що тільки з допомогою недетермінізма дійсно значимий ресурс для моделі обчислень , щоб мати - це дозволяє ефективно вирішити деякі проблеми, і немає ніякого способу , загалом для ефективного моделювання недетермінізму на детермінованому комп'ютері. Так що якщо ви хочете , щоб вирішити проблему , пов'язану з якими А , що обчислюються, ви абсолютно буде потрібно деяка інформація про структуру який - небудь функції , які могли б ефективно обчислити A .
Це одне з головних речей, про які йдеться в оракулах: вони дозволяють говорити про способи, за допомогою яких моделей обчислень можуть вирішити проблеми чи не можуть їх отримати , коли вам надають обмежену інформацію про проблему.
Використання алгоритмів Oracle для вирішення проблем, що не стосуються оракул
Алгоритм Deutsch – Josza або алгоритм Бернштейна – Вазірані в принципі - це не алгоритми, які кожен виконує заради себе. (Ну, не дуже - дивіться наступний Розділ.) Вони виступають за шляхи вирішення проблеми . Які проблеми вони вирішують? Вони дозволяють виявити певні особливості функції, яка вас цікавить - чи вона є постійною / врівноваженою, чи який вектор пов'язаний з деякою скалярною лінійною функцією на векторах.
На яких функціях ви їх виконуєте? - Ви виконуєте їх на будь-якій функції, на яку вас цікавить відповідь.
Опис цих алгоритмів на основі оракул знаходиться поруч. Проблеми з Oracle в основному дозволяють вам знати, що за допомогою ідеального квантового комп'ютера ви можете вирішити проблему, навіть якщо ви знаєте надзвичайно мало про цю функцію , за умови, що ви можете фактично ефективно оцінити функцію на практиці. Щоб насправді оцінити таку функцію, звичайно, вам знадобиться деякий опис того, як це зробити, і таким чином у вас є більше інформації, ніж у налаштуваннях oracle; але це не заважає вам використовувати той же алгоритм.
Що відбувається, коли у вас є більше інформації, ніж у налаштуваннях оракула, це те, що раптом з’являються інші способи вирішити проблему. Зокрема, можливо, можливо, ефективно вирішити проблему класично . (Це те саме спостереження, що і для P A ≠ NP A : це доводить, що в NP існують проблеми , для яких будь-який ефективний детермінований алгоритм потребує хоча б фактичної структурної інформації, щоб мати можливість вирішити - так що коли ви надаєте опис ефективно обчислюваної функції, а не «оракул», можливо, проблема буде в цьомуП. ) Це означає, що квантовий алгоритм може не мати однакової переваги перед класичними алгоритмами при вирішенні конкретної проблеми, яку ви представляєте, - і насправді може бути, що класичний підхід кращий (особливо з пристроями, які ми маємо на даний момент).
Зрештою, те, що у вас є квантовий алгоритм, щоб щось вирішити, не означає, що це обов'язково найкращий спосіб вирішити щось. Це, безумовно, стосується алгоритму Deutsch – Josza: навіть у налаштуваннях Oracle використання випадковості майже так само добре, і це набагато краще, враховуючи, що у нас ще немає великих надійних квантових комп'ютерів! Але потім знову ...
"Реалізація" оракула
Мета реалізації алгоритму Deutsch – Josza така ж, як і реалізація " Привіт, світ! " - не для вирішення нагальної невирішеної проблеми, а для того, щоб використовувати інструмент, який, на вашу думку, буде корисним для інших дій.
Щоб практикувати кодування, ви повинні відчувати себе абсолютно розслаблено і комфортно як з ідеєю реалізації оракула, так і з ідеєю комп'ютера, що оцінює оракул. В принципі, це сенс того, що ви хочете зробити. Навіть якщо ви використовуєте класичний емулятор, в якому класичний комп'ютер насправді оцінює всі гілки суперпозиції і так явно знаходить відповідь на проблему, щоб зробити вигляд, що це квантовий комп'ютер, який діє дещо більш круговим способом, будь то - ви практикуєте, як використовувати інструмент, який може бути корисним для інших речей, і який одного дня не буде працювати на класичному комп’ютері.
Тож як вам слід займатися реалізацією свого оракула?
(i) Якщо ви справді прихильні до думки, що ви просто практикуєтесь, вам не доведеться робити вигляд, що ви робите щось магічне. Придумайте будь-який спосіб реалізувати функцію oracle, навіть якщо випадковому спостерігачеві очевидно, чи результат постійний чи збалансований. Ви просто намагаєтеся реалізувати алгоритм - не переживайте, що хтось звинуватить вас у самозванці, що ви робите вигляд, що вилікуєте рак, але насправді граєте з Лего. Ви ніколи були прикидатися , щоб вилікувати рак, і ви будете грати з Льім навмисним вибором. Прийміть це і просто зробіть це.
f(x)=g(x,r)rg(x,r)xr, і де не очевидно, як вирішити це класично, нетривіально.
g(x,r)=x⋅rx,r∈{0,1}ng(x,r)f(x)f(x)r≠0
Можливо, що вищезазначена конструкція може бути дещо розроблена / затуманена, щоб отримати конструкцію, яка гарантовано оцінює або постійну функцію, або врівноважену функцію, і де те, що відбувається з цих двох, не є очевидним або навіть важким - але я можу ' Не думаю, як, на даний момент.
Майте на увазі, що це насправді зробити дуже важко - але якщо ви можете знайти спосіб це зробити, це може бути дуже вартим: Бравій, Госсет та Конінг зробили щось подібне для проблеми Бернштейн-Вазірані, і це дозволило їм показати невеликий, але безумовний поділ між квантовою та класичною складністю, що було однією з найцікавіших речей, що мали місце в квантовій складності за останні кілька років.
TL; DR
Не співайте над тим, що ви «оцінюєте» оракул.
Якщо ви поперєтеся над чим-небудь, хвилюйтесь, що фактичний опис функції може легко вирішити ту саму проблему без квантового комп'ютера.
Якщо ваша мотивація полягає лише в тому, щоб практикувати квантове програмування, навіть не турбуйтеся про це. Збережіть свою турботу про гідніші проблеми, як-от глобальне потепління. Тим часом насолоджуйтеся грою з Легосом, поки ви будуєте щось більше.