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

Grover 알고리즘 — √N 비정렬 검색의 양자 가속

Grover 알고리즘은 N개의 비정렬 항목에서 원하는 답을 찾는 데 고전 컴퓨터의 O(N) 대신 O(√N) 번의 연산만으로 충분함을 증명한 양자 알고리즘이다. 진폭 증폭이라는 핵심 기법으로 목표 상태의 확률 진폭을 반복적으로 키워 측정 시 높은 확률로 정답을 얻는다. 이 알고리즘은 비정렬 검색에 대한 양자 하한(lower bound)과 일치하므로 점근적으로 최적이다.

개념 소개

전화번호부에서 이름이 아닌 번호로 사람을 역검색하는 상황을 생각해 보자. 정렬 기준이 없으므로 고전적으로는 평균 N/2번, 최악 N번 항목을 확인해야 한다. 이것이 비정렬 검색(unstructured search) 문제다.

Grover 알고리즘(1996)은 이 문제를 번의 오라클 조회로 해결한다. N = 1,000,000이면 고전 방법은 평균 500,000번 조회가 필요하지만, Grover 알고리즘은 약 785번이면 충분하다. 이 제곱근 가속은 비정렬 검색에 대한 이론적 하한이기도 하여 더 이상 개선할 수 없음이 증명되어 있다.


핵심 원리

1. 균등 중첩 초기화

n큐비트()를 모두 으로 시작한 뒤 각 큐비트에 Hadamard 게이트를 적용하면 N개의 계산 기저 상태에 균등한 진폭을 부여한다.

목표 항목 의 초기 진폭은 이고, 측정 확률은 으로 매우 작다.

2. 오라클 연산자

오라클은 목표 상태에만 위상 을 곱하는 단위 연산자다.

블랙박스로 구현되며, 내부 탐색 기준을 회로 외부에서 인코딩한다.

3. Grover 확산 연산자

오라클이 위상을 뒤집은 뒤, 확산 연산자는 **현재 진폭 평균에 대한 반사(reflection about mean)**를 수행한다.

목표 상태의 진폭은 평균보다 낮으므로 반사 후 평균 위쪽으로 올라간다. 비목표 상태의 진폭은 상대적으로 낮아진다.

4. 반복 횟수

오라클 + 확산 연산자 한 쌍을 **Grover 반복(Grover iteration)**이라 부른다. 반복 횟수가 증가할수록 목표 상태의 확률이 올라가다가 최대점을 지나 다시 내려간다. 최적 반복 횟수는 다음과 같다.

이 횟수에서 목표 상태의 측정 확률은 에 근접한다.

기하학적 해석으로는, 초기 상태 와 목표 이 이루는 각도 를 정의하면() 각 반복이 씩 회전시켜 번 후 총 각도가 에 도달한다.


예시·응용

2큐비트 예시: 검색

N = 4, 목표 = , 최적 반복 횟수 = 1회.

from qiskit import QuantumCircuit
from qiskit.primitives import Sampler

# 2큐비트 Grover 회로 (목표: |11>)
qc = QuantumCircuit(2, 2)

# 1) 균등 중첩
qc.h([0, 1])

# 2) 오라클: |11>에만 위상 -1 부여 (CZ)
qc.cz(0, 1)

# 3) 확산 연산자: 2|s><s| - I
qc.h([0, 1])
qc.x([0, 1])
qc.cz(0, 1)
qc.x([0, 1])
qc.h([0, 1])

# 4) 측정
qc.measure([0, 1], [0, 1])

sampler = Sampler()
result = sampler.run([qc], shots=1024).result()
print(result[0].data.c.get_counts())
# 예상 출력: {'11': ~1024}  (거의 확정적으로 11)

주요 응용 분야

분야 활용 예
암호해독 대칭키 키 공간 탐색 (AES 유효 안전성 절반 감소)
최적화 NP 문제의 지수 탐색 가속
양자 머신러닝 특징 공간 검색
SAT 솔버 변수 할당 탐색

정리

Grover 알고리즘은 (1) 균등 중첩 초기화, (2) 오라클로 목표 위상 반전, (3) 확산 연산자로 진폭 재분배를 회 반복함으로써 비정렬 검색을 에 완료한다. 제곱근 가속은 지수 가속이 아니므로 RSA 암호 등 공개키 체계를 직접 파괴하지는 않으나, 대칭 암호 키 길이를 두 배로 늘려야 하는 실질적 보안 함의를 가진다. 진폭 증폭 기법은 이후 다양한 양자 알고리즘의 서브루틴으로 광범위하게 활용된다.

연습문제

  1. Q1.N = 256인 비정렬 데이터베이스에서 목표 항목 1개를 찾으려 한다. Grover 알고리즘의 최적 반복 횟수를 계산하고, 고전 평균 조회 횟수와 비교하라.

    힌트 보기

    √256 = 16, 최적 반복 횟수 공식 k ≈ ⌊π/4 · √N⌋을 적용한다.

    해설 보기

    √256 = 16이므로 k = ⌊π/4 × 16⌋ = ⌊12.57⌋ = 12회. 고전 평균 조회 횟수는 N/2 = 128회이다. Grover 알고리즘은 약 10.7배 적은 조회로 거의 확정적으로 답을 찾는다.

  2. Q2.Grover 확산 연산자 $U_s = 2|s\rangle\langle s| - I$가 "진폭 평균에 대한 반사"라는 것을 수식으로 보여라. 임의의 상태 $|\psi\rangle = \sum_x \alpha_x |x\rangle$에 $U_s$를 적용했을 때 각 진폭이 어떻게 변하는지 서술하라.

    해설 보기

    $|s\rangle = \frac{1}{\sqrt{N}}\sum_x|x\rangle$이므로 $\langle s|\psi\rangle = \frac{1}{\sqrt{N}}\sum_x\alpha_x = \sqrt{N}\bar{\alpha}$ (단, $\bar{\alpha}$는 진폭 평균). $U_s|\psi\rangle$의 $x$번째 진폭은 $2\langle s|\psi\rangle\langle x|s\rangle - \alpha_x = 2\bar{\alpha} - \alpha_x$. 따라서 새 진폭은 평균을 기준으로 원래 진폭의 반사값이 된다. 목표 상태는 오라클 후 진폭이 음수(평균보다 낮음)이므로 반사 후 평균 위쪽으로 올라와 확률이 증가한다.

  3. Q3.단일 목표 항목이 아니라 M개의 목표 항목이 존재할 때(M ≪ N), Grover 알고리즘의 최적 반복 횟수와 복잡도는 어떻게 변하는가?

    힌트 보기

    초기 성공 확률이 M/N임을 이용해 각도 θ를 재정의한다.

    해설 보기

    M개의 목표가 있으면 초기 목표 진폭의 제곱합이 M/N이므로 sinθ = √(M/N)으로 정의된다. 최적 반복 횟수는 k ≈ ⌊π/4 · √(N/M)⌋이 되어 복잡도는 O(√(N/M))이다. M이 클수록 더 적은 반복으로 답을 찾을 수 있으며, M = N/4이면 단 1회 반복으로도 충분한 성공 확률을 얻는다.

관련 용어

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