Grover 알고리즘 — √N 검색으로 이루는 이차 속도 향상
Grover 알고리즘은 N개의 비정렬 데이터베이스에서 특정 항목을 고전 컴퓨터의 O(N) 대신 O(√N) 연산으로 찾아내는 양자 알고리즘이다. 오라클 연산자와 확산 연산자를 반복 적용해 정답 상태의 진폭을 점진적으로 증폭시키는 '진폭 증폭' 기법이 핵심이다. 이 이차 속도 향상은 양자 컴퓨터가 실용적으로 제공하는 가장 대표적인 알고리즘적 이점 중 하나다.
개념 소개
N개의 비정렬 데이터베이스에서 특정 항목을 고전적 방법으로 찾으려면 최악의 경우 N번, 평균적으로 N/2번의 조회가 필요하다. 1996년 Lov Grover가 제안한 Grover 알고리즘은 동일한 문제를 약 번의 양자 연산으로 해결한다.
예를 들어 개의 항목 중 하나를 찾는 경우, 고전 알고리즘은 평균 500,000번의 조회가 필요하지만 Grover 알고리즘은 약 785번의 반복으로 동일한 결과를 얻는다. 이 이차 속도 향상(quadratic speedup) 은 N이 커질수록 그 효과가 더욱 두드러진다.
핵심 원리
Grover 알고리즘은 진폭 증폭(amplitude amplification) 기법을 사용한다. 두 가지 핵심 연산자가 교대로 작용한다.
오라클 연산자
찾고자 하는 정답 에 해당하는 상태의 위상을 반전시킨다.
여기서 이면 (정답), 이면 나머지 경우다. 오라클은 정답 상태의 진폭 부호만 바꿀 뿐, 어느 항목이 정답인지를 직접 "알려주지" 않는다.
확산 연산자 (Grover 연산자)
오라클 적용 후 확산 연산자 가 평균에 대한 반전(inversion about the mean) 을 수행한다.
여기서 는 균일 중첩 상태다. 이 연산은 각 상태의 진폭을 전체 평균에 대해 대칭 이동시켜, 오라클이 부호를 바꾼 정답 상태의 진폭을 크게 끌어올리고 나머지는 줄인다.
반복 횟수와 기하학적 해석
오라클과 확산 연산자를 한 쌍으로 묶은 것을 Grover 반복이라 하며, 최적 반복 횟수는 다음과 같다.
기하학적으로 보면, 초기 상태 와 정답 상태 사이의 각도를 라 할 때 이 성립한다. 각 Grover 반복은 상태 벡터를 만큼 회전시키므로, 번 반복하면 상태 벡터가 정답 방향과 거의 일치하게 된다. 반복을 과도하게 하면 오히려 진폭이 감소하므로, 적절한 시점에 측정해야 한다.
예시·응용
4원소 검색 예시 (N = 4)
일 때 번의 반복으로 정답을 확률 1로 찾는다. 큐비트 2개를 사용한 간단한 회로를 Qiskit으로 구성하면 다음과 같다.
from qiskit import QuantumCircuit
# 정답: |11〉 (인덱스 3)
qc = QuantumCircuit(2, 2)
# 1단계: 균일 중첩 생성 (H 게이트)
qc.h([0, 1])
# 2단계: 오라클 — |11〉의 위상 반전 (CZ 게이트)
qc.cz(0, 1)
# 3단계: 확산 연산자 (H → X → CZ → X → H)
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])
단 1회의 Grover 반복으로 의 측정 확률이 100%로 상승한다.
주요 응용 분야
| 분야 | 내용 |
|---|---|
| 데이터베이스 검색 | 비정렬 데이터 O(N) → O(√N) |
| 조합 최적화 | SAT·그래프 문제에서 부분 가속 |
| 암호 분석 | AES-128의 유효 보안 강도를 64비트로 낮추는 이론적 위협 |
| 양자 진폭 추정(QAE) | Grover 반복을 기반으로 한 확장 알고리즘 |
정리
Grover 알고리즘은 오라클과 확산 연산자를 번 반복하여 비정렬 데이터베이스 검색의 이차 속도 향상을 달성한다. 이는 진폭 증폭 기법의 원형이며, 양자 컴퓨터가 제공하는 가장 기초적이고 실용적인 알고리즘 중 하나다. 단, 지수적이 아닌 이차적 속도 향상임을 명확히 구분해야 하며, 반복 횟수의 최적화가 성공 확률을 결정하는 핵심 설계 요소다.
연습문제
Q1.N = 256인 데이터베이스에서 Grover 알고리즘을 사용할 때, 최적 반복 횟수 k를 계산하고, 이것이 고전 평균 탐색 횟수와 비교하여 몇 배 빠른지 구하라.
힌트 보기
반복 횟수 공식 $k = \lfloor \pi\sqrt{N}/4 \rfloor$를 적용하고, 고전 평균은 N/2임을 이용하라.
해설 보기
$k = \lfloor \pi\sqrt{256}/4 \rfloor = \lfloor \pi \cdot 16/4 \rfloor = \lfloor 4\pi \rfloor = 12$번이다. 고전 평균은 256/2 = 128번이므로, 약 128/12 ≈ 10.7배 빠르다. 일반적으로 속도 향상 비율은 $N/(2 \cdot \pi\sqrt{N}/4) = 2\sqrt{N}/\pi$에 근접하므로 $2\sqrt{256}/\pi \approx 10.2$배와 일치한다.
Q2.Grover 알고리즘에서 반복 횟수를 최적값보다 훨씬 많이 수행하면 어떤 일이 발생하는가? 기하학적 해석을 바탕으로 설명하라.
해설 보기
각 Grover 반복은 상태 벡터를 정답 방향으로 2θ씩 회전시킨다. 최적 반복 수 k에서 상태 벡터는 정답 상태와 거의 일치하지만, 이를 초과하면 벡터가 정답을 "지나쳐" 반대 방향으로 멀어지게 된다. 결국 상태 벡터는 진자처럼 진동하며, 측정 시 정답을 얻을 확률이 주기적으로 높아지고 낮아지는 진동 패턴을 보인다. 따라서 정확한 반복 횟수 제어가 알고리즘 성공의 핵심이다.
Q3.N = 4인 경우 확산 연산자를 행렬 형태로 직접 작성하고, 오라클 적용 이후 상태 $\frac{1}{2}(-|00\rangle + |01\rangle + |10\rangle + |11\rangle)$에 확산 연산자를 적용했을 때 결과 상태를 구하라.
힌트 보기
확산 연산자 $D = 2|\psi\rangle\langle\psi| - I$에서 $|\psi\rangle = \frac{1}{2}(|00\rangle+|01\rangle+|10\rangle+|11\rangle)$이다. 각 진폭의 평균을 구한 후 "2×평균 - 원래값" 공식을 적용하면 된다.
해설 보기
입력 진폭 벡터는 $(-\frac{1}{2}, \frac{1}{2}, \frac{1}{2}, \frac{1}{2})$이다. 평균 = $\frac{-1/2+1/2+1/2+1/2}{4} = \frac{1}{4}$. 각 진폭에 "2×평균 - 원래값"을 적용하면: $|00\rangle: 2\cdot\frac{1}{4}-(-\frac{1}{2}) = 1$, 나머지 세 상태: $2\cdot\frac{1}{4}-\frac{1}{2} = 0$. 따라서 결과 상태는 $|00\rangle$이다. 즉, 정답이 $|00\rangle$인 경우 단 1회 반복으로 측정 확률이 100%가 됨을 확인할 수 있다.