Quantum Algorithm (3) - Deutsch's algorithm

·임성혁

이번 게시글에서는 Quantum Algorithm 중 하나인 Deutsch's algorithm에 관해 알아봅니다.

1985년 David Deutsch가 발표한 Deutsch Algorithm은 양자컴퓨팅 역사에서 매우 중요한 이정표입니다. 이는 양자 알고리즘이 고전 알고리즘보다 빠를 수 있다는 것을 증명한 최초의 알고리즘입니다. 비록 실용적인 응용을 하기에는 제한적인 알고리즘이지만, 양자컴퓨팅의 잠재력을 보여준 첫 번째 사례로서 의미가 있습니다.

Alice가 함수 f:{0,1}{0,1}f: \{0,1\} \rightarrow \{0,1\}을 가지고 있습니다. 이 함수는 다음 네 가지 중 하나입니다:

함수f(0)f(0)f(1)f(1)분류
f0f_000상수함수
f1f_111상수함수
f2f_201균형함수
f3f_310균형함수
  • 상수함수: 모든 입력에 대해 동일한 출력 (f0,f1f_0, f_1)
  • 균형함수: 절반의 입력은 0, 나머지 절반은 1을 출력 (f2,f3f_2, f_3)

문제 우리는 Alice가 가지고 있는 함수가 **상수함수(constant)**인지 **균형함수(balanced)**인지 판별해야 합니다.

고전적으로 이 문제를 해결하려면

  1. f(0)f(0)을 계산 → 0 또는 1을 얻음
  2. 만약 f(0)=0f(0) = 0이라면, 함수는 f0f_0 또는 f2f_2일 수 있음
  3. 둘을 구분하려면 f(1)f(1)도 계산해야 함

의 과정을 거처야 하고, 이는 최소 2번의 Query가 필요함을 의미합니다.

고전적 결정 트리 다이어그램
고전적 결정 트리 다이어그램

양자컴퓨팅에서는 모든 연산이 **가역적(reversible)**이어야 하므로, 단일 입력-출력 함수를 직접 구현할 수 없습니다. 대신 다음과 같은 양자 오라클을 구성합니다:

Fi:xyxyfi(x)F_i: |x\rangle|y\rangle \rightarrow |x\rangle|y \oplus f_i(x)\rangle

F_i quantum gate
F_i quantum gate

여기서 \oplus는 XOR 연산입니다.

각 오라클의 동작:

  • 000fi(0)|0\rangle|0\rangle \rightarrow |0\rangle|f_i(0)\rangle
  • 0101fi(0)|0\rangle|1\rangle \rightarrow |0\rangle|1 \oplus f_i(0)\rangle
  • 101fi(1)|1\rangle|0\rangle \rightarrow |1\rangle|f_i(1)\rangle
  • 1111fi(1)|1\rangle|1\rangle \rightarrow |1\rangle|1 \oplus f_i(1)\rangle

Deutsch Algorithm의 핵심은 다음 양자 회로입니다:

Deutsch Algorithm Diagram
Deutsch Algorithm Diagram

0|0\rangle 이나 1|1\rangle만 입력으로 사용한다면 여전히 2번의 query가 필요하겠지만, Hadamard 게이트를 넣어 중첩(superposition) 현상을 이용하면 query 수를 1번으로 줄일 수 있게 됩니다.

그럼 이것이 어떻게 가능한지 자세히 살펴보도록 하겠습니다.

위의 다이어그램 그림을 보면 01|01\rangle이 input qubit 입니다. (x|x\rangle = 0|0\rangle, y|y\rangle = 1|1\rangle)

1단계: 초기 상태 ψ0=01|\psi_0\rangle = |0\rangle|1\rangle

2단계: Hadamard 게이트 적용 ψ1=H0H1=12(0+1)12(01)|\psi_1\rangle = H|0\rangle \otimes H|1\rangle = \frac{1}{\sqrt{2}}(|0\rangle + |1\rangle) \otimes \frac{1}{\sqrt{2}}(|0\rangle - |1\rangle)

=12(0001+1011)= \frac{1}{2}(|00\rangle - |01\rangle + |10\rangle - |11\rangle)

Hadamard 게이트가 H=12(1111)H = \frac{1}{\sqrt{2}} \begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix} 다음과 같고, 0=(10)|0\rangle = \begin{pmatrix} 1 \\ 0 \end{pmatrix}, 1=(01)|1\rangle = \begin{pmatrix} 0 \\ 1 \end{pmatrix} 이므로 위의 수식이 도출됩니다.

3단계: Oracle FiF_i 적용

Oracle을 통과한 후: ψ2=12(0,fi(0)0,1fi(0)+1,fi(1)1,1fi(1))|\psi_2\rangle = \frac{1}{2}(|0,f_i(0)\rangle - |0,1 \oplus f_i(0)\rangle + |1,f_i(1)\rangle - |1,1 \oplus f_i(1)\rangle)

이를 정리하면: ψ2=12(0(fi(0)1fi(0))+1(fi(1)1fi(1)))|\psi_2\rangle = \frac{1}{2}(|0\rangle(|f_i(0)\rangle - |1 \oplus f_i(0)\rangle) + |1\rangle(|f_i(1)\rangle - |1 \oplus f_i(1)\rangle))

위상 킥백(Phase Kickback) 활용

핵심 관찰: fi(x)1fi(x)|f_i(x)\rangle - |1 \oplus f_i(x)\rangle를 다음과 같이 쓸 수 있습니다:

fi(x)1fi(x)=(1)fi(x)(01)|f_i(x)\rangle - |1 \oplus f_i(x)\rangle = (-1)^{f_i(x)}(|0\rangle - |1\rangle)

fi(x)f_i(x)의 값은 0 과 1 만 가능하고 양변 모두 fi(x)=0f_i(x)=0 일때는 (01)(|0\rangle - |1\rangle)이 되고, fi(x)=1f_i(x)=1 일때는 (10)(|1\rangle - |0\rangle)이 되므로 해당 식이 성립함을 알 수 있습니다.

어떻게 보면 부호 역할을 한다고 생각해도 좋습니다.

따라서: ψ2=12(0(fi(0)1fi(0))+1(fi(1)1fi(1)))|\psi_2\rangle = \frac{1}{2}(|0\rangle(|f_i(0)\rangle - |1 \oplus f_i(0)\rangle) + |1\rangle(|f_i(1)\rangle - |1 \oplus f_i(1)\rangle))

\left|0\right\rangle \otimes (-1)^{f_i(0)} (\left|0\right\rangle - \left|1\right\rangle) + \left|1\right\rangle \otimes (-1)^{f_i(1)} (\left|0\right\rangle - \left|1\right\rangle) \right)

=12((1)fi(0)0+(1)fi(1)1)12(01)= \frac{1}{\sqrt{2}}((-1)^{f_i(0)}|0\rangle + (-1)^{f_i(1)}|1\rangle) \otimes \frac{1}{\sqrt{2}}(|0\rangle - |1\rangle)

4단계: 첫 번째 큐비트에 Hadamard 적용

FiF_i 게이트를 통과하고 나온 첫 번째 큐비트의 상태: 12((1)fi(0)0+(1)fi(1)1)\frac{1}{\sqrt{2}}((-1)^{f_i(0)}|0\rangle + (-1)^{f_i(1)}|1\rangle)

Hadamard 게이트 적용: H12((1)fi(0)0+(1)fi(1)1)H \cdot \frac{1}{\sqrt{2}}((-1)^{f_i(0)}|0\rangle + (-1)^{f_i(1)}|1\rangle)

=12((1)fi(0)+(1)fi(1))0+12((1)fi(0)(1)fi(1))1= \frac{1}{2}((-1)^{f_i(0)} + (-1)^{f_i(1)})|0\rangle + \frac{1}{2}((-1)^{f_i(0)} - (-1)^{f_i(1)})|1\rangle

+|+\rangle|-\rangle을 각각 Hadamard 게이트를 통과하면 0|0\rangle1|1\rangle이 됩니다. ※ +=12(0+1)\left| + \right\rangle = \frac{1}{\sqrt{2}} \left( \left| 0 \right\rangle + \left| 1 \right\rangle \right), =12(01)\left| - \right\rangle = \frac{1}{\sqrt{2}} \left( \left| 0 \right\rangle - \left| 1 \right\rangle \right)

함수fi(0)f_i(0)fi(1)f_i(1)(1)fi(0)+(1)fi(1)(-1)^{f_i(0)} + (-1)^{f_i(1)}(1)fi(0)(1)fi(1)(-1)^{f_i(0)} - (-1)^{f_i(1)}측정 결과
f0f_0001+1=21 + 1 = 211=01 - 1 = 00
f1f_1111+(1)=2-1 + (-1) = -21(1)=0-1 - (-1) = 00
f2f_2011+(1)=01 + (-1) = 01(1)=21 - (-1) = 21
f3f_3101+1=0-1 + 1 = 011=2-1 - 1 = -21

첫 번째 큐비트를 관측하면 각각의 경우에 따라 다음과 같은 결과를 얻습니다.

위의 표를 보면, f0f_0f1f_1 같은 constant 함수이면 0으로 측정되고, f2f_2f3f_3 같은 balanced 함수이면 1로 측정됩니다.

측정 결과에 따른 판별:

  • 측정값 0: 상수함수 (f0f_0 또는 f1f_1)
  • 측정값 1: 균형함수 (f2f_2 또는 f3f_3)

Quantum algorithm이 classical algorithm보다 더 적은 query로 해결이 가능했던 이유는 아래와 같습니다.

  1. 중첩 상태 활용: 입력을 중첩 상태로 준비하여 모든 가능한 입력을 동시에 처리
  2. 위상 정보 활용: 함수값을 진폭의 위상으로 인코딩
  3. 간섭 효과: Hadamard 게이트를 통해 위상 정보를 측정 가능한 확률로 변환

방법Query 복잡도비고
고전적(classical)2최악의 경우 모든 입력을 확인해야 함
양자(quantum)1한 번의 Oracle 호출로 해결

Deutsch Algorithm은 Deutsch-Jozsa Algorithm으로 일반화됩니다:

  • 입력: nn-비트 함수 f:{0,1}n{0,1}f: \{0,1\}^n \rightarrow \{0,1\}
  • 문제: 함수가 상수함수인지 균형함수인지 판별
  • 고전 복잡도: 최악의 경우 2n1+12^{n-1} + 1번의 Query
  • 양자 복잡도: 1번의 Query

이는 양자컴퓨팅의 지수적 가속을 보여주는 첫 번째 예시입니다.

이후 게시글에서 Deutsch-Jozsa Algorithm에 대해 더 자세히 다룰 예정입니다.

  1. 인위적 문제: 실제 응용에서는 함수가 상수 또는 균형이라는 보장이 없음
  2. 제한적 실용성: 현실의 문제에 직접 적용하기 어려움
  3. 오류 민감성: 노이즈가 있는 환경에서는 우위가 감소

  1. 패러다임 전환: 양자 알고리즘이 고전 알고리즘을 능가할 수 있음을 최초로 증명
  2. 기법 개발: 중첩과 간섭을 활용한 알고리즘 설계의 기본 패턴 제시
  3. 이론적 기반: Shor, Grover 등 후속 양자 알고리즘의 이론적 토대 마련

Deutsch Algorithm은 비록 간단하고 실용성이 제한적이지만, 양자컴퓨팅 분야에서 매우 중요한 위치를 차지합니다. 이 알고리즘을 통해 우리는:

  1. 양자 중첩간섭이 어떻게 계산적 우위를 만들어내는지 이해할 수 있습니다
  2. Query Complexity 관점에서 양자 알고리즘을 분석하는 방법을 학습할 수 있습니다
  3. 더 복잡한 양자 알고리즘의 기본 구조와 원리를 파악할 수 있습니다

양자컴퓨팅을 처음 접하는 학습자에게 Deutsch Algorithm은 양자 세계의 신비로운 힘을 처음으로 체험할 수 있는 관문과 같은 존재입니다. 비록 작은 문제이지만, 그 안에는 양자컴퓨팅의 핵심 아이디어들이 모두 담겨 있습니다.

양자 알고리즘 타임라인
양자 알고리즘 타임라인