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 암호 등 공개키 체계를 직접 파괴하지는 않으나, 대칭 암호 키 길이를 두 배로 늘려야 하는 실질적 보안 함의를 가진다. 진폭 증폭 기법은 이후 다양한 양자 알고리즘의 서브루틴으로 광범위하게 활용된다.
연습문제
Q1.N = 256인 비정렬 데이터베이스에서 목표 항목 1개를 찾으려 한다. Grover 알고리즘의 최적 반복 횟수를 계산하고, 고전 평균 조회 횟수와 비교하라.
힌트 보기
√256 = 16, 최적 반복 횟수 공식 k ≈ ⌊π/4 · √N⌋을 적용한다.
해설 보기
√256 = 16이므로 k = ⌊π/4 × 16⌋ = ⌊12.57⌋ = 12회. 고전 평균 조회 횟수는 N/2 = 128회이다. Grover 알고리즘은 약 10.7배 적은 조회로 거의 확정적으로 답을 찾는다.
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$. 따라서 새 진폭은 평균을 기준으로 원래 진폭의 반사값이 된다. 목표 상태는 오라클 후 진폭이 음수(평균보다 낮음)이므로 반사 후 평균 위쪽으로 올라와 확률이 증가한다.
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회 반복으로도 충분한 성공 확률을 얻는다.