개념 소개
어떤 블랙박스 함수 가 주어졌다. 이 함수는 반드시 두 경우 중 하나라고 약속(promise)되어 있다.
- 상수 함수(constant): 모든 입력에 대해 또는
- 균형 함수(balanced): 정확히 절반의 입력에서 0, 나머지 절반에서 1을 출력
고전 컴퓨터는 최악의 경우 번의 평가를 해야 확실한 답을 얻을 수 있다. 이라면 번이 필요하다. Deutsch-Jozsa 알고리즘은 이를 단 한 번의 오라클 호출로 해결한다.
핵심 원리
오라클과 위상 킥백
양자 오라클 는 다음과 같이 동작한다.
보조 큐비트를 상태로 준비하면, 오라클을 적용할 때 위상 킥백이 일어난다.
의 정보가 입력 레지스터의 전역 위상에 인코딩되는 것이 핵심이다.
알고리즘 단계
1단계 — 초기화:
2단계 — 하다마르 변환: 모든 큐비트에 적용
3단계 — 오라클 적용: 위상 킥백으로
4단계 — 하다마르 역변환: 입력 레지스터에 다시 적용
여기서 (GF(2) 위의 비트 내적).
5단계 — 측정: 에 해당하는 진폭은
- 가 상수 함수: 모든 항의 부호가 같아 합 → 반드시 측정
- 가 균형 함수: 양·음 항이 정확히 상쇄되어 합 → 절대 측정 불가
측정 결과가 이면 상수, 그렇지 않으면 균형 함수로 확정 판별된다.
예시·응용
n=1: Deutsch 알고리즘
경우는 1985년 Deutsch가 처음 제안한 원형이다.
| 함수 | 종류 | ||
|---|---|---|---|
| 0 | 0 | 상수 | |
| 1 | 1 | 상수 | |
| 0 | 1 | 균형 | |
| 1 | 0 | 균형 |
한 번의 오라클 호출 후 입력 큐비트를 측정하면, → 상수, → 균형이 나온다.
Qiskit 구현 (n=2, 균형 오라클)
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
def deutsch_jozsa_balanced(n=2):
qc = QuantumCircuit(n + 1, n)
qc.x(n) # 보조 큐비트 |1⟩
qc.h(range(n + 1)) # 전체 하다마르
qc.barrier()
# 균형 오라클: f(x) = x_0 (첫 비트에 CNOT)
qc.cx(0, n)
qc.barrier()
qc.h(range(n)) # 입력 레지스터 하다마르
qc.measure(range(n), range(n))
return qc
qc = deutsch_jozsa_balanced(n=2)
sim = AerSimulator()
counts = sim.run(transpile(qc, sim), shots=1024).result().get_counts()
print(counts) # '00'이 등장하지 않음 → 균형 함수 확인
의의와 한계
이 알고리즘은 실용적인 문제를 푼다기보다, 약속 조건(promise problem) 아래에서 양자 컴퓨팅의 지수적 질의 우위를 최초로 엄밀히 증명한 사례로 의미가 있다. 이후 Bernstein-Vazirani 알고리즘(숨겨진 문자열 탐색), Simon 알고리즘(숨겨진 주기 탐색)으로 이어지는 양자 질의 복잡도 이론의 출발점이 되었다.
정리
Deutsch-Jozsa 알고리즘의 성공은 두 가지 요소의 조합에서 비롯된다. 첫째, 위상 킥백을 통해 함수의 전역 정보(상수 vs. 균형)를 중첩 상태의 위상에 동시 인코딩한다. 둘째, 하다마르 역변환으로 위상 차이를 측정 가능한 진폭 차이로 변환하여 단 한 번의 측정으로 판별을 완료한다. 이 흐름—중첩 생성 → 오라클 위상 각인 → 간섭으로 읽어내기—은 이후 거의 모든 양자 알고리즘의 공통 설계 철학이 된다.
Exercises
연습문제
Q1n=1인 Deutsch 알고리즘에서 균형 함수 $f_3$ ($f_3(0)=0,\, f_3(1)=1$)을 오라클로 사용할 때, 알고리즘의 각 단계별 입력 큐비트 상태를 계산하고 최종 측정 결과를 구하라.
힌트 보기
위상 킥백 공식 $(-1)^{f(x)}|x\rangle$을 각 기저벡터에 적용하고, 마지막 $H$ 게이트 후 계수의 부호를 확인하라.
해설 보기
① 초기 상태: $|0\rangle|1\rangle$ ② H 적용: $\frac{|0\rangle+|1\rangle}{\sqrt{2}} \otimes |{-}\rangle$ ③ 오라클(위상 킥백): $f_3(0)=0$이므로 $|0\rangle$ 부호 유지, $f_3(1)=1$이므로 $|1\rangle$ 부호 반전 → $\frac{|0\rangle - |1\rangle}{\sqrt{2}} \otimes |{-}\rangle$ ④ H 적용: $|1\rangle \otimes |{-}\rangle$ → 측정 결과 $|1\rangle$: 균형 함수로 판별.
Q2$n=2$, $f \equiv 0$ (상수 함수)일 때 Deutsch-Jozsa 알고리즘의 4단계 직후 입력 레지스터 상태를 계산하고, $|00\rangle$이 확률 1로 측정됨을 보여라.
해설 보기
오라클 적용 후 입력 레지스터: $\frac{1}{2}\sum_{x\in\{0,1\}^2}(-1)^0|x\rangle = \frac{|00\rangle+|01\rangle+|10\rangle+|11\rangle}{2}$. 이는 $H^{\otimes 2}|00\rangle$과 동일하므로 $H^{\otimes 2}$를 다시 적용하면 $|00\rangle$으로 되돌아간다. $|00\rangle$의 진폭 $= \frac{1}{4}(1+1+1+1) = 1$, 나머지 기저의 진폭 $= 0$. 따라서 측정 결과는 반드시 $|00\rangle$이다.
Q3Deutsch-Jozsa 알고리즘에서 함수가 상수도 균형도 아닌 임의의 함수라면 어떤 일이 발생하는가? 알고리즘의 어느 가정이 깨지는지 설명하라.
해설 보기
알고리즘은 함수가 반드시 상수 또는 균형이라는 '약속(promise) 조건'에 의존한다. 이 조건이 깨지면, 즉 $f$가 임의의 함수라면 $|0^n\rangle$ 진폭이 0도 $\pm1$도 아닌 중간 값이 될 수 있다. 이 경우 측정 결과로 상수/균형을 확정 판별할 수 없으며, 알고리즘의 정확성 보장이 사라진다. Deutsch-Jozsa는 promise problem에 특화된 알고리즘으로, 약속 조건 없이 일반 함수를 판별하는 데는 적용할 수 없다.
관련 용어


