Deutsch-Jozsa 알고리즘 — 단 한 번의 양자 평가
Deutsch-Jozsa 알고리즘은 블랙박스 함수가 상수인지 균형인지를 고전 컴퓨터의 지수 횟수 쿼리 대신 단 한 번의 오라클 호출로 판별한다. 아다마르 변환, 위상 반동, 양자 간섭이 결합되어 지수적 우위를 실현하며, 이후 Grover·Shor 알고리즘의 설계 패턴을 예고하는 선구적 사례이다.
개념 소개
비트 입력을 받아 0 또는 1을 반환하는 블랙박스 함수 가 주어진다고 하자. 단, 이 함수는 반드시 아래 두 가지 중 하나임이 보장된다.
- 상수 함수(constant): 모든 입력에 대해 동일한 값(0 또는 1)을 반환
- 균형 함수(balanced): 정확히 절반의 입력에 0, 나머지 절반에 1을 반환
고전 컴퓨터는 최악의 경우 번 함수를 평가해야 확신할 수 있다. Deutsch-Jozsa 알고리즘은 이를 단 1번의 오라클 호출로 해결한다. 이처럼 약속이 전제된 문제를 **약속 문제(promise problem)**라 부른다.
핵심 원리
양자 오라클과 위상 반동
오라클은 유니터리 변환 로 구현된다.
출력 큐비트를 로 초기화하면 위상 반동(phase kickback) 현상에 의해
가 된다. 즉, 의 값이 출력 큐비트 대신 입력 레지스터의 위상에 각인된다.
알고리즘 4단계
초기 상태:
1단계 — 전체 큐비트에 아다마르 변환:
2단계 — 오라클 적용:
3단계 — 입력 레지스터 개 큐비트에 재적용.
의 정의에 의해 기저 의 진폭은
이다. 가 상수이면 이 합의 절댓값은 1이고, 균형이면 양·음 항이 정확히 상쇄되어 0이 된다.
4단계 — 측정: 결과가 이면 상수, 하나라도 1이 포함되면 균형 함수.
예시·응용
n = 1: Deutsch 알고리즘 (Qiskit 예시)
from qiskit import QuantumCircuit
def deutsch_circuit(balanced=False):
qc = QuantumCircuit(2, 1)
qc.x(1) # 보조 큐비트를 |1⟩로 초기화
qc.h([0, 1]) # 아다마르 변환
if balanced:
qc.cx(0, 1) # 균형 오라클: f(x) = x
# 상수 오라클(f=0)은 항등 연산
qc.h(0) # 입력 큐비트에 H 재적용
qc.measure(0, 0)
return qc
측정 결과 0 → 상수 함수, 1 → 균형 함수.
의의와 후속 알고리즘
이 알고리즘은 실용적 계산 문제보다 양자 병렬성과 간섭의 원리적 우위를 처음으로 수학적으로 증명한다. 오라클 기반 설계 방식은 Grover 탐색 알고리즘(제곱근 가속)으로, 아다마르 변환 패턴은 양자 푸리에 변환을 거쳐 Shor 알고리즘으로 이어진다. 다만 실제 응용에서는 함수가 상수 또는 균형 중 하나라는 보장이 주어지지 않으므로, 이 알고리즘 자체의 직접적 실용성은 제한적이다.
정리
Deutsch-Jozsa 알고리즘의 흐름은 준비 → 오라클 → 간섭 → 측정으로 요약된다. 아다마르 변환이 모든 입력 상태를 균등 중첩으로 만들고, 단 한 번의 오라클 호출이 위상을 통해 전역적 함수 정보를 인코딩하며, 두 번째 아다마르 변환이 측정 가능한 신호로 변환한다. 이 세 요소의 결합이 고전적으로 지수 복잡도인 문제를 쿼리로 해결하게 하며, 양자 알고리즘 설계 원리를 가장 깔끔하게 보여주는 교과서적 사례로 남아 있다.
연습문제
Q1.$n=2$인 균형 함수 $f(x_1, x_0) = x_1 \oplus x_0$에 대해 Deutsch-Jozsa 오라클 $U_f$를 양자 회로로 표현하고, 최종 측정 결과를 예측하라.
힌트 보기
위상 반동을 적용하면 각 기저 $|x\rangle$마다 부호가 어떻게 달라지는지 표로 정리해 보라.
해설 보기
오라클은 CNOT 게이트 두 개($x_1 \to$ 보조, $x_0 \to$ 보조)로 구현된다. 네 입력 $\{00, 01, 10, 11\}$ 중 $f$값이 0인 것과 1인 것이 각 2개씩이므로 균형 함수이다. 위상 반동 후 진폭 합 $\frac{1}{4}[(-1)^0+(-1)^1+(-1)^1+(-1)^0]=0$으로 $|00\rangle$ 진폭이 소멸하고, 측정 결과는 00 이외의 값이 나온다.
Q2.상수 함수 $f(x)=1$에 대해 $n=1$ Deutsch 알고리즘의 전체 상태 변화를 단계별로 계산하고 측정 결과를 구하라.
해설 보기
초기 $|0\rangle|1\rangle$ → $H\otimes H$ 후 $\frac{1}{2}(|0\rangle+|1\rangle)(|0\rangle-|1\rangle)$. 오라클 $f=1$ 적용 시 $(-1)^1$이 전역 위상으로 나와 $-\frac{1}{2}(|0\rangle+|1\rangle)(|0\rangle-|1\rangle)$. 전역 위상은 관측 불가이므로 $H$ 재적용 후 첫 큐비트는 $|0\rangle$. 측정 결과 0 → 상수 함수로 올바르게 판별된다.
Q3.Deutsch-Jozsa 알고리즘이 "약속 문제"인 이유를 설명하고, 약속이 없는 일반 함수에 이 알고리즘을 적용하면 어떤 문제가 생기는지 논하라.
해설 보기
알고리즘의 정확성은 입력 함수가 반드시 상수 또는 균형이라는 보장에 의존한다. 만약 $f$가 그 어느 쪽도 아닌 경우(예: $2^n$개 입력 중 일부에만 1), 측정 결과 0이 나오더라도 상수라고 단정할 수 없다. 오라클 구성 자체가 불분명해져 회로 설계도 불가능하므로 알고리즘이 의미를 잃는다.