Deutsch-Jozsa 알고리즘 — 단 한 번의 양자 오라클 평가
Deutsch-Jozsa 알고리즘은 어떤 함수가 상수 함수인지 균형 함수인지를 단 한 번의 양자 오라클 호출로 판별한다. 고전 컴퓨터가 최악의 경우 지수적 횟수의 질의를 요구하는 것과 대비되며, 위상 반동과 양자 간섭이 결합된 핵심 기법은 이후 다양한 양자 알고리즘의 원형이 된다.
개념 소개
다음 문제를 생각해 보자. 함수 가 주어질 때, 이 함수가 상수 함수(constant, 모든 입력에 대해 0 또는 1만 출력)인지 균형 함수(balanced, 정확히 절반의 입력에서 0, 나머지 절반에서 1 출력)인지 판별하라. 단, 두 경우 중 하나임은 사전에 보장된다.
고전 컴퓨터로는 최악의 경우 번 평가해야 확실한 답을 얻는다. 반면 Deutsch-Jozsa 알고리즘은 단 한 번의 양자 오라클 호출로 이를 해결한다. 인 특수 경우는 David Deutsch가 먼저 제시한 Deutsch 알고리즘이며, Richard Jozsa와 함께 일반적인 비트 버전으로 확장되었다.
핵심 원리
위상 반동(Phase Kickback)
알고리즘은 개의 입력 큐비트와 1개의 보조(ancilla) 큐비트를 사용한다. 양자 오라클 는 다음과 같이 정의된다.
보조 큐비트를 로 준비하면,
함수 값 가 보조 큐비트가 아니라 입력 큐비트의 전역 위상에 새겨진다. 이것이 위상 반동이다.
알고리즘 순서
1단계 초기화:
2단계 전체 큐비트에 아다마르(H) 게이트 적용:
3단계 오라클 적용 → 위상 반동:
4단계 입력 레지스터에만 재적용
5단계 입력 레지스터 측정 → 이면 상수, 그 외이면 균형
간섭이 판별하는 이유
의 기저 변환 공식은 다음과 같다.
두 번째 아다마르 후 상태의 진폭은
- 상수 함수: 모든 항의 부호가 동일하므로 합산 = → 측정 확률 = 1
- 균형 함수: 항과 항이 정확히 절반씩이므로 합산 = 0 → 측정 확률 = 0
즉 양자 간섭이 두 경우를 완벽하게 분리한다.
예시·응용
n = 1 (Deutsch 알고리즘)
가능한 함수는 네 가지다. , 은 상수 함수, , 는 균형 함수다. 고전 방식으로는 과 을 모두 평가해야 하지만, 양자 알고리즘은 한 번으로 충분하다.
Qiskit 구조 예시
from qiskit import QuantumCircuit
def deutsch_jozsa_circuit(oracle_gate, n):
qc = QuantumCircuit(n + 1, n)
qc.x(n) # 보조 큐비트 |1⟩ 초기화
qc.h(range(n + 1)) # 전체 H 게이트
qc.append(oracle_gate, range(n + 1)) # 오라클
qc.h(range(n)) # 입력 레지스터 H 게이트
qc.measure(range(n), range(n))
return qc
# 측정 결과가 '000...0' → 상수 함수
# 하나라도 1이 있으면 → 균형 함수
의의와 한계
이 알고리즘은 쿼리 복잡도 측면에서 양자 우위를 수학적으로 엄밀히 증명한 첫 사례 중 하나다. 그러나 함수가 상수 또는 균형 중 하나라는 사전 보장이 필요하며, 그 조건이 없는 일반적 판별 문제에는 직접 적용되지 않는다. 핵심 기법인 위상 반동과 간섭을 통한 분류는 Simon 알고리즘, Bernstein-Vazirani 알고리즘, Shor 알고리즘으로 이어지는 중요한 출발점이다.
정리
Deutsch-Jozsa 알고리즘은 아다마르 변환이 만드는 균등 중첩, 위상 반동으로 함수 값을 위상에 인코딩하는 과정, 그리고 두 번째 아다마르에 의한 양자 간섭을 하나의 흐름으로 엮어낸다. 지수적 고전 쿼리를 단 하나의 양자 쿼리로 대체한다는 사실은 오늘날에도 양자컴퓨팅의 본질적 가능성을 설명할 때 가장 먼저 소개되는 결과다.
연습문제
Q1.$n=2$이고 $f(x) = 0$ (상수 함수)일 때, 알고리즘의 각 단계를 상태 벡터로 추적하여 최종 측정 결과가 $|00\rangle$임을 보여라.
힌트 보기
2단계 후 상태는 $\frac{1}{2}(|00\rangle+|01\rangle+|10\rangle+|11\rangle)|{-}\rangle$이다. 위상 반동 후 모든 항의 위상이 $(-1)^0 = 1$로 동일함에 주목하라.
해설 보기
오라클 적용 후 $f(x)=0$이므로 위상 변화가 없다. 두 번째 $H^{\otimes 2}$ 적용 시 $|00\rangle$의 진폭은 $\frac{1}{4}(1+1+1+1)=1$이 되어 측정 확률 1로 $|00\rangle$이 나온다. 상수 함수이므로 예상과 일치한다.
Q2.균형 함수일 때 $|0\rangle^{\otimes n}$의 진폭이 정확히 0이 되는 이유를 수식으로 설명하라.
해설 보기
두 번째 아다마르 후 $|0\rangle^{\otimes n}$의 진폭은 $\frac{1}{2^n}\sum_{x}(-1)^{f(x)}$이다. 균형 함수는 $f(x)=0$인 입력이 $2^{n-1}$개, $f(x)=1$인 입력이 $2^{n-1}$개이므로, 합산하면 $\frac{1}{2^n}(2^{n-1} \cdot 1 + 2^{n-1} \cdot (-1)) = 0$이 된다. 양수 위상과 음수 위상이 상쇄되는 상보적 간섭의 결과이다.
Q3.Deutsch-Jozsa 알고리즘이 "함수가 상수 또는 균형 중 하나"라는 사전 보장 없이도 동작하는지 논하라.
해설 보기
동작하지 않는다. 사전 보장이 없으면 함수가 두 범주 어디에도 속하지 않을 수 있다(예: 입력의 3/4에서 0 출력). 이 경우 알고리즘은 여전히 특정 결과를 출력하지만, 그 결과가 "상수"인지 "균형"인지를 신뢰할 수 없다. 알고리즘의 정확성 보장은 입력 함수가 약속된 두 범주 중 하나임을 전제한다. 이런 조건부 문제를 약속 문제(promise problem)라 한다.