Я думаю, что этот ahelwer
ответ затрагивает некоторые способы, которыми мы думаем о сложности алгоритмов. Однако, учитывая, что у нас нет буквальных «оракулов» в реальном мире, к которым мы хотим обращаться, вы можете задаться вопросом, почему мы вообще беспокоимся о сложности запросов или о идее оракулов. Я попытаюсь дать некоторую точку зрения на это, и, в частности, описать, как вы можете попытаться придумать способы создания «оракула Дойча-Йоша» таким образом, чтобы вы не чувствовали себя так, как будто вы обманываете.
(Как Norbert Schuch
указывается, для проблемы Дойча, которая является элементарным случаем Дойча – Йоша, мало возможностей для проникновения в суть, но я ожидаю, что ваш вопрос о оракулах применим и в более общем плане. Об этом я и расскажу здесь.)
Интуиция о оракулах
Концепция оракула - это способ позволить нам упростить разговор о вычислительных проблемах.
Первоначальное применение концепции оракула заключалось в гипотетическом рассмотрении того, что мы могли бы сделать, если бы могли решать сложные проблемы, даже невозможные, без принятия того, как мы могли бы сделать это даже в принципе. Но в вычислительной сложности в наши дни - особенно в квантовых вычислениях, например, в случаях Дойча – Йоша, Бернштейна – Вазирани и других проблем оракула - ситуация иная: оракул описывает функцию, которая является основой проблемы, Тот факт, что это «оракул», является способом структурирования того, как мы описываем функцию, которая находится в центре проблемы: не то, что мы никогда не должны размышлять о том, как вычисляется функция, но эта информация просто не предоставляется как часть проблемы, и что мы не обеспокоены временем или другой сложностью, связанной с этой функцией.
Используя этот подход, мы можем получить ответы, которые связаны с очень сложными вопросами в вычислениях. Например, вы знаете , что мы не знаем , как доказать либо P ≠ NP или P = NP , но что мы можем показать , что есть оракулов таким образом, что мы можем показать , что P A ≠ NP A . То, что здесь делает оракул А , не помогает компьютеру (точнее, детерминированной машине Тьюринга или недетерминированной машине Тьюринга) решить проблему - он представляет собой проблему, которую должен решить компьютер. Тот факт, что мы можем показать в некоторых случаях, что P A ≠ NP , не означает , что P является действительно отличается от НП : это просто означает , что только с помощью недетерминизма действительно значимый ресурс для модели вычислений , чтобы иметь - это позволяет эффективно решить некоторые проблемы, и нет никакого способа , в общем, для эффективного моделирования недетерминизма на детерминированном компьютере. Так что если вы хотите , чтобы решить проблему , связанную с какими А , вычисляемых, вы абсолютно потребуется некоторая информация о структуре какой - либо функции , которые могли бы эффективно вычислить A .
Это одна из основных тем, о которых говорят оракулы: они позволяют вам говорить о способах, которыми модели вычислений могут или не могут решать проблемы, когда вам предоставляется ограниченная информация о проблеме.
Использование алгоритмов оракула для решения проблем без оракула
Алгоритм Дойча – Йосзы или алгоритм Бернштейна – Вазирани в принципе не являются алгоритмами, которые выполняются ради самих себя. (Ну, не совсем - см. Следующий раздел.) Они обозначают способы решения проблемы . Какие проблемы они решают? Они позволяют вам обнаружить определенные особенности интересующей вас функции - является ли она постоянной / сбалансированной или какой вектор связан с некоторой скалярной линейной функцией на векторах.
Какие функции вы выполняете их? - Вы выполняете их по любой функции, для которой вас интересует ответ.
Описание их как алгоритмов на основе оракула не относится к делу. Проблемы оракула в основном позволяют вам знать, что с идеальным квантовым компьютером вы можете решить проблему, даже если вы очень мало знаете о функции , при условии, что вы можете реально оценить функцию на практике. Чтобы реально оценить такую функцию, вам, конечно, понадобится некоторое описание того, как это сделать, и поэтому у вас есть больше информации, чем в настройке оракула; но это не мешает вам использовать тот же алгоритм.
Когда у вас больше информации, чем в настройках оракула, происходит то, что неожиданно появляются другие способы решения проблемы. В частности, может стать возможным эффективное решение проблемы классическим способом . (Это то же самое наблюдение, что и для P A ≠ NP A : оно доказывает, что существуют проблемы, которые есть в NP , которые любой эффективный детерминистический алгоритм, по крайней мере, потребует, чтобы фактическая структурная информация могла быть решена - так что, когда вы предоставляете описание эффективно вычисляемой функции, а не «оракула», возможно, что проблема будет вP. ) Это означает, что квантовый алгоритм может не иметь такого же преимущества по сравнению с классическими алгоритмами при решении конкретной проблемы, которую вы представляете - и на самом деле может оказаться, что классический подход лучше (особенно с устройствами, которые у нас есть в данный момент).
В конце концов, если у вас есть квантовый алгоритм для решения чего-либо, это не значит, что это лучший способ решить что-то. Это, безусловно, верно для алгоритма Дойча – Йосзы: даже в условиях оракула использование случайности почти так же хорошо, и это намного лучше, учитывая, что у нас еще нет больших надежных квантовых компьютеров! Но затем снова...
«Реализация» оракула
Цель реализации алгоритма Дойча – Йосзы такая же, как и реализация « Hello, World! » - не для решения насущной нерешенной проблемы, а для практики использования инструмента, который, как вы ожидаете, будет полезен для выполнения других задач.
Чтобы попрактиковаться в кодировании, вы должны чувствовать себя абсолютно расслабленно и комфортно с идеей реализации оракула и с идеей компьютера, оценивающего оракула. В принципе, это то, что вы хотите сделать. Даже если вы используете классический эмулятор, в котором классический компьютер фактически оценивает все ветви суперпозиции и так явно находит ответ на задачу, чтобы притвориться, что это квантовый компьютер, действующий немного более окольным образом, так будь то - вы практикуете, как использовать инструмент, который может быть полезен для других целей, и который однажды не будет работать на классическом компьютере.
Итак, как вам следует реализовать свой оракул?
(i) Если вы действительно привержены идее, что вы только начинаете практиковать, вам не нужно притворяться, что вы делаете что-то волшебное. Придумайте любой способ реализации функции оракула, даже если для случайного наблюдателя очевидно, является ли результат постоянным или сбалансированным. Вы просто пытаетесь на практике реализовать алгоритм - не беспокойтесь, что кто-то обвинит вас в том, что вы самозванец, что вы притворяетесь, что лечите рак, но на самом деле играете с Лего. Вы никогда не были притворяться , чтобы вылечить рак, и вы будете играть с Льим преднамеренным выбором. Прими это и просто сделай это.
е( х ) = г( х , г )рг( х , г )Иксри там, где не очевидно, как решить это классически, нетривиально.
г( x , r ) = x ⋅ rx , r ∈ { 0 , 1 }Nг( х , г )е( х )е( х )r ≠ 0
Возможно, что вышеупомянутая конструкция могла бы быть несколько разработана / запутана, чтобы получить конструкцию, которая гарантированно оценивает либо постоянную функцию, либо сбалансированную функцию, и где то, что из этих двух происходит, не очевидно или даже сложно - но я могу ' не думаю о том, как, в данный момент.
Имейте в виду, что это на самом деле очень трудно сделать, но если вы можете увидеть способ сделать это, это может быть очень полезно: Бравий, Госсетт и Кёнинг сделали нечто подобное для проблемы Бернштейна – Вазирани, и это позволило им показать небольшое, но безусловное разделение между квантовой и классической сложностью, что было одной из наиболее интересных вещей, которые произошли в квантовой сложности за последние несколько лет.
TL; DR
Не переживайте из-за того, что вы «оцениваете» оракула.
Если вы что-то потеете, волнуйтесь только о том, что фактическое описание функции может позволить легко решить ту же проблему без квантового компьютера.
Если ваша мотивация состоит только в том, чтобы практиковаться в квантовом программировании, даже не беспокойтесь об этом. Сохраните беспокойство для более серьезных проблем, таких как глобальное потепление. А пока наслаждайтесь игрой с Legos, пока вы строите что-то большее.