먼저 읽으면 좋은 용어
개념 소개
어떤 함수 가 있다고 하자. 이 함수는 다음 두 경우 중 하나임이 보장된다.
- 상수 함수(constant function): 모든 입력에 대해 이거나
- 균형 함수(balanced function): 입력의 정확히 절반은 0, 나머지 절반은 1을 출력
문제는 단순하다. 가 상수인지 균형인지 판별하라.
고전적으로는 최악의 경우 번 질의해야 확정적으로 답을 얻는다. 앞에서 번을 질의해 모두 같은 값이 나왔다고 해도, 단 한 번이 남아 있는 한 확신할 수 없기 때문이다. 반면 양자 회로는 단 한 번의 오라클 호출로 항상 정확한 답을 낸다.
핵심 원리
초기 상태 준비
개의 입력 큐비트를 으로, 보조(ancilla) 큐비트를 로 초기화한다. 이후 모든 큐비트에 아다마르 변환을 적용한다.
오라클 적용과 위상 되차기
오라클 는 로 정의된다. 보조 큐비트가 상태일 때 오라클을 적용하면, 의 값이 입력 레지스터의 위상으로 전달된다(위상 되차기).
오라클 적용 후 입력 레지스터 상태는 다음과 같다.
최종 아다마르 변환과 측정
입력 레지스터에 다시 을 적용하면, 상태가 측정될 확률은
- 가 상수 함수이면: 모든 가 같은 부호이므로 합이 , 확률 = 1
- 가 균형 함수이면: 양수와 음수 항이 정확히 상쇄되어 합 = 0, 확률 = 0
따라서 측정에서 이 나오면 상수 함수, 그 외라면 균형 함수로 결론 짓는다.
예시·응용
Qiskit를 활용한 1-큐비트 예시 (Deutsch 알고리즘)
인 경우를 코드로 확인한다.
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
def deutsch_circuit(balanced: bool) -> QuantumCircuit:
qc = QuantumCircuit(2, 1) # q0: 입력, q1: 보조
qc.x(1) # 보조 큐비트 |1>
qc.h([0, 1]) # 아다마르
if balanced:
qc.cx(0, 1) # 균형 오라클: CNOT
# 상수 오라클은 아무것도 하지 않음 (f=0)
qc.h(0) # 최종 아다마르
qc.measure(0, 0)
return qc
# balanced=True → 측정 결과 1 (균형), False → 0 (상수)
실제 의의
Deutsch-Jozsa 알고리즘 자체의 실용적 가치는 제한적이다. 그러나 이 알고리즘은 양자 병렬성과 위상 간섭이 결합할 때 고전 알고리즘 대비 지수적 이점이 발생함을 최초로 엄밀하게 증명했다. 이후 Simon 알고리즘, Shor 알고리즘, Grover 알고리즘의 설계 철학이 이 아이디어에서 출발한다.
정리
Deutsch-Jozsa 알고리즘의 핵심은 중첩으로 모든 입력을 동시에 오라클에 제시하고, 위상 되차기로 함수 정보를 위상에 기록한 뒤, 아다마르 간섭으로 결과를 읽어 내는 세 단계의 유기적 조합이다. 고전적으로 질의가 필요한 문제를 질의로 해결함으로써, 양자 계산의 가능성을 이론적으로 확립한 이정표 알고리즘이다.
Exercises
연습문제
Q1$n=2$인 균형 함수 $f(00)=0,\; f(01)=1,\; f(10)=1,\; f(11)=0$ 에 대해 오라클 적용 후 입력 레지스터 상태를 직접 계산하고, 최종 아다마르 변환 후 $|00\rangle$이 측정될 확률을 구하라.
힌트 보기
오라클 적용 후 상태는 $\frac{1}{2}[(-1)^{f(00)}|00\rangle + (-1)^{f(01)}|01\rangle + (-1)^{f(10)}|10\rangle + (-1)^{f(11)}|11\rangle]$이다. 각 계수를 대입한 뒤 $H^{\otimes 2}$를 적용하면 $|00\rangle$ 성분이 어떻게 되는지 확인한다.
해설 보기
오라클 적용 후 입력 레지스터는 $\frac{1}{2}[|00\rangle - |01\rangle - |10\rangle + |11\rangle]$이다. 이를 $H^{\otimes 2}$에 통과시키면, $|00\rangle$ 성분의 진폭은 $\frac{1}{4}(1-1-1+1)=0$이다. 즉 $|00\rangle$이 측정될 확률은 **0**이며, 균형 함수임을 올바르게 판별한다.
Q2Deutsch-Jozsa 알고리즘에서 보조 큐비트를 $|0\rangle$ 대신 $|1\rangle$로 초기화하는 이유를 위상 되차기 관점에서 설명하라.
해설 보기
오라클 $U_f$는 $|x\rangle|y\rangle \to |x\rangle|y\oplus f(x)\rangle$로 동작한다. 보조 큐비트가 $\frac{|0\rangle-|1\rangle}{\sqrt{2}}$일 때, $f(x)=0$이면 상태가 그대로이고, $f(x)=1$이면 $|0\rangle$과 $|1\rangle$이 뒤바뀌어 전체에 $-1$위상이 붙는다. 결과적으로 보조 큐비트는 변하지 않고 $(-1)^{f(x)}$가 입력 레지스터 위상에 기록된다. 만약 $|0\rangle$으로 초기화하면 이 위상 전달이 일어나지 않아 알고리즘이 작동하지 않는다.
Q3고전 결정론적 알고리즘이 $n$-비트 Deutsch-Jozsa 문제를 해결하는 데 최악의 경우 몇 번의 질의가 필요한지, 그리고 고전 확률론적 알고리즘을 사용하면 어떻게 달라지는지 논하라.
해설 보기
결정론적으로는 $2^{n-1}+1$번이 필요하다. $2^{n-1}$번 조회해서 모두 같은 값이 나왔더라도 나머지 입력이 반드시 달라야 하는지를 확인하려면 한 번이 더 필요하기 때문이다. 확률론적 알고리즘은 소수의 무작위 질의(예: $k$번)로 $1-2^{-k}$의 확률로 구분할 수 있으므로 오류 확률을 임의로 작게 할 수 있다. 그러나 여전히 확률적 오류가 남는 반면, Deutsch-Jozsa 양자 알고리즘은 단 1회 질의로 오류 없이 판별한다는 점에서 결정론적 지수 이점을 제공한다.
관련 용어


