2026년 8월 26일 수요일
튜토리얼 목록
중급양자컴퓨팅

Deutsch-Jozsa 알고리즘 — 단 한 번의 평가로 함수의 본질을 밝히다

Deutsch-Jozsa 알고리즘은 주어진 함수가 '상수 함수'인지 '균형 함수'인지를 고전 컴퓨터보다 지수적으로 적은 횟수로 판별하는 최초의 양자 알고리즘이다. 위상 되차기(phase kickback)와 양자 간섭을 결합해 단 한 번의 오라클 호출만으로 결론을 이끌어낸다. 이 알고리즘은 실용적 이점보다는 양자 우위의 개념적 증명으로서 중요한 역사적·교육적 의미를 지닌다.

개념 소개

비트 입력을 받아 0 또는 1을 출력하는 함수 가 있다고 하자. 이 함수가 상수 함수(constant) — 모든 입력에 대해 같은 값 출력 — 인지, 균형 함수(balanced) — 절반은 0, 절반은 1 출력 — 인지 판별하는 문제다.

고전 결정론적 알고리즘은 최악의 경우 번의 함수 호출이 필요하다. 반면 Deutsch-Jozsa 알고리즘은 단 1번의 오라클 호출로 확실한 답을 낸다. 이것이 최초로 엄밀히 증명된 양자-고전 지수적 격차다.


핵심 원리

회로 구성

개의 큐비트를 사용한다. 상위 개는 입력 레지스터, 나머지 1개는 보조(ancilla) 큐비트다.

1단계 — Hadamard 적용

모든 큐비트에 Hadamard 게이트를 적용하면 입력 레지스터는 균등 중첩이 되고, 보조 큐비트는 상태가 된다.

2단계 — 오라클(위상 되차기)

양자 오라클 로 정의된다. 보조 큐비트가 일 때 오라클을 적용하면 위상 되차기가 발생한다.

오라클 적용 후 입력 레지스터는 다음과 같다.

3단계 — 두 번째 Hadamard 및 측정

입력 레지스터에 다시 Hadamard를 적용하면 상태의 진폭은 아래와 같다.

  • 상수 함수이면 모든 항의 부호가 같으므로 진폭의 절댓값은 1 → 측정 확률 100%
  • 균형 함수이면 부호가 절반씩 상쇄되어 진폭은 0 → 측정 확률 0%

따라서 측정 결과가 모두 0이면 상수, 그렇지 않으면 균형으로 결론 내릴 수 있다.


예시·응용

1큐비트 Deutsch 알고리즘 ()

4가지 가능한 함수 중 (균형)를 예로 들면, 오라클 적용 후 입력 큐비트의 위상이 뒤집혀 두 번째 Hadamard 이후 이 측정된다.

Qiskit 구현 예시

from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator

def deutsch_jozsa(n, oracle_type="balanced"):
    qc = QuantumCircuit(n + 1, n)
    # 초기화
    qc.x(n)          # 보조 큐비트 |1>
    qc.h(range(n + 1))
    # 오라클 (균형: 첫 번째 입력 큐비트와 보조 큐비트 CNOT)
    if oracle_type == "balanced":
        qc.cx(0, n)
    # 두 번째 Hadamard
    qc.h(range(n))
    qc.measure(range(n), range(n))
    return qc

qc = deutsch_jozsa(n=3, oracle_type="balanced")
result = AerSimulator().run(qc, shots=1).result()
print(result.get_counts())  # {'001': 1} 또는 비-000 결과 → 균형 함수

의의와 한계

이 알고리즘은 실제 응용보다 개념 증명으로서의 가치가 크다. 현실 문제에서 함수가 반드시 상수 또는 균형 중 하나라고 보장되지 않기 때문이다. 그러나 Bernstein-Vazirani, Simon 알고리즘 등 더 강력한 알고리즘들의 이론적 토대가 되었다.


정리

Deutsch-Jozsa 알고리즘의 핵심은 중첩으로 모든 입력을 동시에 평가하고, 위상 되차기로 함수 정보를 위상에 인코딩하며, 간섭으로 전역 정보를 읽어내는 세 단계의 협력이다. 이 구조는 이후 대부분의 양자 알고리즘 설계에서 반복적으로 등장하는 기본 패턴이다.

연습문제

  1. Q1.함수 $f(x) = 0$ (모든 입력에 대해 0)이 상수 함수일 때, Deutsch-Jozsa 알고리즘에서 두 번째 Hadamard 적용 후 입력 레지스터의 상태와 측정 결과를 구하라 ($n=2$).

    힌트 보기

    오라클 적용 후 모든 $x$에 대해 위상 $(-1)^{f(x)} = 1$이므로, $|\psi_2\rangle = \frac{1}{2}\sum_x |x\rangle$임을 활용하라.

    해설 보기

    $f(x)=0$이므로 오라클 적용 후 $|\psi_2\rangle = \frac{1}{2}(|00\rangle+|01\rangle+|10\rangle+|11\rangle)$이다. 이에 $H^{\otimes 2}$를 적용하면 $|00\rangle$ 상태로 완전히 수렴한다. $\langle 00|\psi_3\rangle = \frac{1}{4}(1+1+1+1)=1$이므로 측정 결과는 반드시 $|00\rangle$이며, 이는 상수 함수임을 의미한다.

  2. Q2.균형 함수의 경우 측정 결과가 왜 반드시 $|0\rangle^{\otimes n}$이 아닌가를 위상 간섭의 관점에서 서술하라.

    해설 보기

    균형 함수는 전체 $2^n$개 입력 중 절반에서 $f(x)=0$, 나머지 절반에서 $f(x)=1$이다. 따라서 오라클 후 위상 $(-1)^{f(x)}$의 합은 $\sum_x (-1)^{f(x)} = 2^{n-1} \cdot 1 + 2^{n-1} \cdot (-1) = 0$이 된다. 이는 $|0\rangle^{\otimes n}$의 진폭이 정확히 0임을 의미하므로, 두 번째 Hadamard 이후 $|0\rangle^{\otimes n}$은 측정되지 않는다. 즉, 절반의 양위상과 음위상이 완전히 상쇄(소멸 간섭)되기 때문이다.

  3. Q3.Deutsch-Jozsa 알고리즘은 왜 '확률적'이 아닌 '결정론적' 양자 알고리즘으로 분류되는가?

    해설 보기

    알고리즘의 최종 측정 결과가 상수 함수일 때는 반드시 $|0\rangle^{\otimes n}$, 균형 함수일 때는 반드시 $|0\rangle^{\otimes n}$이 아닌 값으로 나온다. 오류 확률이 0이므로 단 1회 실행만으로 100% 정확한 답을 낼 수 있다. 이는 예를 들어 Grover 알고리즘처럼 반복 실행과 확률적 증폭이 필요한 알고리즘과 대비된다.

관련 용어

이 챕터는 Claude (claude-sonnet-4-6)가 작성했습니다. · 발행 2026. 8. 26.