개념 소개
동전 개가 앞면 또는 뒷면을 보이고 있다고 하자. 규칙은 두 가지뿐이다. 모든 동전이 같은 면을 보이거나(상수), 정확히 절반은 앞면이고 절반은 뒷면이다(균형). 최악의 경우 고전적으로는 번을 확인해야 확신할 수 있다. Deutsch-Jozsa 알고리즘은 이 문제를 단 한 번의 오라클 평가로 확정적으로 답한다.
형식적으로, 이 주어질 때:
- 상수 함수(constant): 모든 입력에 대해 또는
- 균형 함수(balanced): 정확히 절반의 입력에서 , 나머지에서
핵심 원리
알고리즘은 개의 큐비트를 사용한다. 입력 레지스터 개는 으로, 보조 큐비트는 로 초기화한다.
1단계 — 중첩 생성
모든 큐비트에 Hadamard 게이트를 적용한다.
2단계 — 오라클 적용 (위상 킥백)
오라클 는 로 정의된다. 보조 큐비트가 상태일 때 위상 킥백(phase kickback)이 발생한다.
의 값이 보조 큐비트의 비트를 뒤집는 대신 전체 진폭의 부호를 결정하게 된다.
3단계 — 간섭과 측정
입력 레지스터에 다시 을 적용하면:
일 때의 진폭은 이다.
- 가 상수이면: 모든 항의 부호가 같아 진폭 → 이 반드시 측정됨
- 가 균형이면: 양의 항과 음의 항이 상쇄되어 진폭 → 은 절대 측정되지 않음
따라서 입력 레지스터를 한 번 측정하는 것으로 결정이 완료된다.
예시·응용
아래는 Qiskit을 이용한 균형 함수(첫 큐비트에 CNOT 오라클) 구현 예시다.
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
n = 3
qc = QuantumCircuit(n + 1, n)
# 초기화
qc.x(n) # 보조 큐비트 |1⟩
qc.h(range(n + 1)) # H^{⊗n+1}
# 오라클: 첫 번째 큐비트에 의존하는 균형 함수
qc.cx(0, n)
# 역 Hadamard
qc.h(range(n))
# 측정
qc.measure(range(n), range(n))
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
print(result[0].data.c.get_counts())
# 출력: {'001': 1024} — 0 이외의 결과 → 균형 함수 확정
실용적 의의: Deutsch-Jozsa 알고리즘 자체는 인위적인 문제를 다루지만, 여기서 사용된 위상 킥백과 Hadamard 간섭 기법은 Bernstein-Vazirani 알고리즘, Simon 알고리즘, 나아가 Shor 알고리즘의 핵심 구성 요소다.
정리
Deutsch-Jozsa 알고리즘은 양자 중첩으로 모든 입력을 동시에 인코딩하고, 오라클을 통해 함수 정보를 위상으로 변환한 뒤, Hadamard 간섭으로 답을 단일 측정 결과에 집중시킨다. 고전 결정론적 알고리즘 대비 지수적 쿼리 감소를 엄밀히 보장하는 이 구조는 이후 모든 양자 알고리즘 설계의 원형이 된다.
Exercises
연습문제
Q1$n=2$일 때 $f(x)$가 상수 함수($f \equiv 0$)라면, 오라클 적용 후 입력 레지스터의 상태를 수식으로 구하고, 최종 측정 결과를 예측하라.
힌트 보기
오라클이 위상 변화를 일으키지 않을 때 $H^{\otimes 2}$를 다시 적용하면 어떤 상태가 복원되는가?
해설 보기
상수 함수이므로 오라클은 모든 항에 $(-1)^0=1$을 곱해 상태를 변경하지 않는다. 입력 레지스터는 $\frac{1}{2}(|00\rangle+|01\rangle+|10\rangle+|11\rangle)$ 그대로이고, $H^{\otimes 2}$를 적용하면 $|00\rangle$으로 완전히 수렴한다. 따라서 측정 결과는 항상 $00$이다.
Q2위상 킥백(phase kickback)이 발생하는 이유를 설명하라. 보조 큐비트가 $|0\rangle$ 상태였다면 어떤 차이가 생기는가?
해설 보기
보조 큐비트가 $\frac{|0\rangle-|1\rangle}{\sqrt{2}}$일 때, $|y \oplus f(x)\rangle$는 $f(x)=1$이면 $|0\rangle$과 $|1\rangle$의 부호를 교환하여 전체 항에 $(-1)^{f(x)}$가 곱해진다. 보조 큐비트가 $|0\rangle$이면 오라클 적용 후 보조 큐비트가 $|f(x)\rangle$로 바뀔 뿐 입력 레지스터의 위상에는 영향을 주지 않으므로 알고리즘이 동작하지 않는다.
Q3Deutsch-Jozsa 알고리즘의 쿼리 복잡도를 고전 결정론적·고전 확률론적·양자 세 관점에서 비교하라.
해설 보기
고전 결정론적 알고리즘은 최악의 경우 $2^{n-1}+1$번의 쿼리가 필요하다. 고전 확률론적 알고리즘은 $O(1)$번의 무작위 쿼리로 높은 확률로 판별할 수 있으나 오류 확률이 완전히 제거되지 않는다. 양자 알고리즘은 단 1번의 오라클 쿼리로 **결정론적**으로(오류 없이) 판별하며, 이것이 고전 확률 알고리즘 대비 양자의 진정한 우위를 보여준다.
관련 용어

