共用方式為


瞭解量子預言機

「Oracle」$O$ 是一項未公開的運算,可作為另一個算法的輸入。 這類作業通常是使用傳統函 $式 f 來定義:\{0、1\}^n \to \{0、1\}^m$,它會接受 $n$ 位二進位輸入併產生 $m$ 位二進位輸出。 要實現這一點,請考慮特定的二進位輸入 $x=(x_{0}、x_{1}、\dots、x_{n-1})$。 您可以將量子位狀態$\ket{\vec{標記為 x}}=\ket{x_{{0}}\otimes\ket{x_x_{1}}\otimes\cdots\otimes\ket{{n-1。}}$

您可能先嘗試定義 $O$,讓 $O\ket{x}=\ket{f(x)}$,但這個方法有幾個問題。 首先, $f$ 可能有不同的輸入和輸出大小 ($n \ne m$),因此套用 $O$ 會變更快取器中的量子位數目。 其次,即使 n m,函式可能不可反轉:如果$某些 =x $ y$ 的 f(x) = f(y),$則 $O x\ne$ O$y 但 \ket{O}^ O=x\ket{}$ O^$\dagger O\ket{y。}\ne\dagger\ket{}$ 這表示您無法建構相鄰作業 $O^\dagger$,而且 Oracle 必須為其定義相鄰作業。

根據計算基礎狀態的影響來定義 Oracle

您可以引進第二個量子位緩存器$$來保存答案,以處理這兩個問題。 然後,在所有計算基底狀態上定義神諭的效果:針對所有 $x \in 0, 1 {^n } 及 $y $ 0, 1 \in^m{}$,

$$ \begin{ \begin{align} O(\ket{x y})\otimes\ket{ x}=\ket{}\otimes\ket{y \oplus f(x)}. \end{align} $$

現在由於$O = O^\dagger$ 的構造,您解決了先前兩個問題。

提示

$若要查看 O O^,請注意 =O{\dagger}$^$2=\mathbf{1}$,因為 $\oplus b \oplus b =$ a 代表所有 $a、b \in{0、1。}$ 因此,O x$y \oplus f(x)\ket{}\ket{x}=y \oplus f(x)\ket{}\ket{x}=y。\ket{}\ket{}$

重要的是,針對每個計算基礎狀態 x y 以這種方式定義 Oracle,也會定義 O$\ket{ 對任何其他狀態的運作方式。}\ket{}$$$ 此行為直接源於$O$,就像所有量子作業一樣,對其作用的狀態是線性的。 例如,假設已定義 $H +\ket{0} 和 =H \ket{}$$\ket{1}=\ket{-}$的 Hadamard 作業。 如果您想要知道 $H$ 如何作用於 $\ket{+}$,可以使用 $H$ 是線性的。

$$ \begin{align}H\ket{+}&=\frac{1}{\sqrt{{2}}H(\ket{0} + \ket{){1}=\frac{1}{\sqrt{({2}}H\ket{0} + H\ket{1})\\&=\frac{1}{\sqrt{2}}(\ket{+} +\ket{{-})=\frac12(\ket{{0} +\ket{{1} +\ket{{0} -\ket{{1})=\ket{{0}. \end{align} $$

定義 Oracle $O$ 時,您也可以同樣地使用 n + m$\ket{\psi}$ 量子位上$的任何狀態$都可以寫入為

& _x \0, 1\^n, y \0, 1\^m(x, y) xy. \end{align} $$

在這裡: $\alpha \{0、1\}^n \times \{0、1\}^m\to\mathbb{ C}$ 代表狀態$\ket{\psi}$的係數。 因此,

$$ \begin{ \begin{align}O \ket{\psi}& =O \sum_{x \in \{0, 1\}^n, y \in \{0, 1\}^m}\alpha(x, y) \ket{x}\ket{y}\\& =\sum_{x \in \{0, 1\}^n, y \in \{0, 1\}^m}\alpha(x, y) O \ket{x}\ket{y}\\& =\sum_{x \in \{0, 1\}^n, y \in \{0, 1\}^m}\alpha(x, y) \ket{x}\ket{y \oplus f(x)}. \end{align} $$

階段神諭

或者,您可以根據輸入將相位套用至 Oracle $O$ 的方式,將 $f$ 編碼為 $O$。 例如,您可以定義 $O$ 使得 $$\begin{\begin{align} O \ket{x}=(-1)^{f(x)}\ket{x。} \end{align} $$

如果相位神諭作用於一開始處於計算基態的暫存器 $\ket{x}$,那麼此相位為全域相位,因此無法觀察。 但是,如果套用至疊加或作為受控制的操作,這類 Oracle 可以是強而有力的資源。 例如,請考慮一個單一量子位函數 $f$ 的階段 oracle $O_f$。 然後,$$\begin{align} O_f \ket{+}& = O_f(\ket{0} + \ket{{1})/\sqrt{{2}\\& =((-1)^{f(0)}\ket{0} + (-1)^{f(1)}\ket{1})/\sqrt{2}\\& =(-1)^{f(0)}(\ket{{0} + (-1)^{f(1) - f(0)}\ket{{1})/\sqrt{{2}\\& =(-1)^{f(0)} Z^f(0){ - f(1)}\ket{+}。 \end{align} $$

注意

請注意,$Z^Z^{-1}=Z{\dagger}=,因此 $Z$^{f(0)-f(1)}=Z^{f(1)-f(0)}。$

更普遍地,可以將兩種預言機的觀點擴大來表示經典函數,這類函數傳回實數,而不僅僅是傳回單一位。

選擇實作 Oracle 的最佳方式,在很大程度上取決於此 Oracle 如何在指定的演算法內使用。 例如, Deutsch-Jozsa 演算法 依賴第一種方式實作的 Oracle,而 Grover 的演算法 則依賴以第二種方式實作的 Oracle。

如需詳細資訊,請參閱 Gilyén 1711.00465 中的討論。