閱讀英文

共用方式為


瞭解量子 Oracle

Oracle O 是一項未公開的作業,可作為另一個演算法的輸入。 這類作業通常是使用傳統函 f{01}n{01}m,它會接受 n 位二進位輸入併產生 m 位二進位輸出。 若要這樣做,請考慮特定的二進位輸入 xxx01xn1$=\ket{\vec{標記為 x\ket{}}=x_{0}}\otimes\ket{{x_x_{1}}\otimes\ket{\cdots\otimes{n-1。}}$

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

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

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

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

現在 O= 建構,您解決了先前兩個問題。

提示

OOO=^{\dagger}2=1,因為 bb= a 代表所有 ab01 因此,O x}y \oplus f(x)}\ket{=x\ket{}y \oplus f(x) \oplus f(x) \oplus f(x)}=\ket{x}\ket{y。}$\ket{\ket{$

重要的是,針對每個計算基礎狀態 x y 以這種方式定義 Oracle,也會定義 OExtra close brace or missing open brace}\ket{|$$O$$H+H|1=|\ket{0}=\ket{的 Hadamard 作業。 如果您想要知道 HExtra close brace or missing open brace上的$\ket{運作方式使H$ 是線性的,

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

定義 Oracle O 時,您也可以同樣地使用 n + m的任何狀態|ψ都可以寫入為

$$\begin{\begin{align}\ket{\psi}&放大器; =\sum_{x \in \{0, 1\}^n, y \in \{0, 1\}^m}\alpha(x, y) \ket{x}\ket{y}. \end{align} $$

在這裡: α{01}n×{01}mC 代表狀態|ψ的係數。 因此,

$$\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\&}amp; =\sum_{x \in \{0, 1\}^n, y \in \{0, 1\}^m}\alpha(x, y) O \ket{x}\ket{y\&}amp; =\sum_{x \in \{0, 1\}^n, y \in \{0, 1\}^m\alpha}(x, y) \ket{x}\ket{y \oplus f(x)}. \end{align} $$

階段 Oracle

或者,您可以將 f 編碼為 Oracle O,方法是根據輸入將階段套用O$$ 例如,您可以定義 O,\begin{\begin{align}Missing \begin{align} or extra \end{align}

如果階段 Oracle 一開始以計算基礎狀態 |x 執行緩存器,則此階段是全域階段,因此無法觀察。 但是,如果套用至迭加或做為受控制的作業,這類 Oracle 可以是強大的資源。 例如,請考慮單一量子位函f 的階段 oracle Of。 然後, $$\begin{align} O_f \ket{+}& =O_f (\ket{0} +{1}\ket{ ) /\&\sqrt{{2} amp; =((-1)^{f(0)}\ket{0} + (-1)^{f(1)\ket{1}}) /&\sqrt{2}\ amp; =(-1)^{f(0)} ({0}\ket{ + (-1)^{f(1) - f(0){1}\ket{}) /&\sqrt{{2}\ amp; = (-1)^f(0) Z^{{f(0)} - f(1)}\ket{+。} \end{align} $$

注意

請注意,Double exponent: use braces to clarify,因此 Z1=f0f1=Zf1f0

更普遍地,可以擴大兩個 Oracle 檢視來表示傳統函式,以傳回實數,而不是只傳回單一位。

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

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