개념 소개
N개의 항목이 임의 순서로 저장된 데이터베이스에서 특정 정답 하나를 찾는다고 하자. 고전 컴퓨터는 하나씩 확인하는 방법 외에 달리 선택지가 없으므로 평균 N/2번, 최악 N번의 조회가 필요하다. 시간 복잡도는 O(N)이다.
1996년 Lov Grover가 제안한 Grover 알고리즘은 동일한 문제를 번의 연산으로 해결한다. 이라면 고전 탐색은 약 백만 번이 필요하지만, Grover 알고리즘은 약 1,000번으로 충분하다. 이 **제곱근 속도 향상(quadratic speedup)**은 N이 클수록 효과가 두드러진다.
알고리즘의 핵심 아이디어는 **진폭 증폭(amplitude amplification)**이다. 전체 상태를 균등 중첩으로 초기화한 뒤, 오라클과 확산 연산자를 반복 적용해 정답 상태의 진폭만 선택적으로 키운다.
핵심 원리
1단계: 균등 중첩 준비
큐비트()에 Hadamard 변환을 적용해 모든 기저 상태가 동등한 진폭 을 갖는 상태를 만든다.
2단계: 오라클(Oracle)
오라클 는 정답 상태 의 위상만 반전시키고 나머지는 그대로 둔다.
행렬 형태로는 이다. 이 단계에서 측정 확률 분포는 아직 바뀌지 않는다.
3단계: 확산 연산자(Diffusion Operator)
확산 연산자 는 **평균에 대한 반전(inversion about the mean)**을 수행한다.
진폭의 전체 평균을 라 할 때, 각 상태의 진폭 는 로 변환된다. 오라클로 인해 정답 상태의 진폭이 음수가 된 상황에서 이 연산을 적용하면, 정답 상태의 진폭은 크게 증가하고 나머지 상태의 진폭은 소폭 감소한다.
Grover 반복과 최적 횟수
한 번의 **Grover 반복(Grover iteration)**은 다음과 같다.
번 반복 후 정답을 측정할 확률은
이 클 때 이므로, 성공 확률이 최대가 되는 최적 반복 횟수는
이다. 이 횟수를 초과하면 성공 확률이 오히려 감소하므로 반복 횟수 조절이 중요하다.
예시·응용
N = 4인 경우 (2큐비트)
정답이 일 때, 이므로 단 1번의 Grover 반복만으로 성공 확률이 1에 수렴한다.
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2, 2)
# 1단계: 균등 중첩
qc.h([0, 1])
# 2단계: 오라클 — |11⟩의 위상 반전 (CZ)
qc.cz(0, 1)
# 3단계: 확산 연산자
qc.h([0, 1])
qc.x([0, 1])
qc.cz(0, 1)
qc.x([0, 1])
qc.h([0, 1])
qc.measure([0, 1], [0, 1])
sim = AerSimulator()
counts = sim.run(qc, shots=1024).result().get_counts()
print(counts) # 기대 출력: {'11': ~1024}
정답이 M개인 경우
정답이 M개 존재하면 최적 반복 횟수는
으로 줄어든다.
주요 응용 분야
| 분야 | 내용 |
|---|---|
| 암호 해석 | AES-128 브루트포스 복잡도를 에서 로 감소 |
| 조합 최적화 | SAT·그래프 색칠 문제의 탐색 가속화 |
| 데이터베이스 | 비구조적 대규모 데이터 질의 |
정리
Grover 알고리즘은 비정렬 데이터베이스 검색의 고전적 O(N)을 양자적 O(√N)으로 개선하는 대표 양자 알고리즘이다. 오라클이 정답 상태의 위상을 반전하고, 확산 연산자가 평균에 대한 반전으로 해당 진폭을 증폭하는 두 단계를 번 반복하는 것이 전체 구조다. 이 제곱근 속도 향상은 양자 하한 이론에 의해 최적임이 증명되어 있어, 어떤 양자 알고리즘도 비정렬 탐색을 이보다 빠르게 수행할 수 없다.
Exercises
연습문제
Q1N = 64인 비정렬 데이터베이스에서 정답이 1개일 때, Grover 알고리즘의 최적 반복 횟수를 구하시오. 고전 탐색 대비 몇 배 빠른가?
힌트 보기
$k^* \approx \frac{\pi}{4}\sqrt{N}$을 이용하고, 고전 평균 탐색 횟수는 N/2이다.
해설 보기
$k^* \approx \frac{\pi}{4}\sqrt{64} = \frac{\pi}{4} \times 8 \approx 6.28$이므로 약 6~7번 반복한다. 고전 평균 탐색 횟수는 32번이므로, 약 5배 빠르다. N이 클수록 이 비율은 $\frac{N/2}{\pi\sqrt{N}/4} = \frac{2\sqrt{N}}{\pi}$에 비례해 커진다.
Q2확산 연산자 $D = 2|s\rangle\langle s| - I$가 진폭에 어떤 변환을 적용하는지 서술하고, 이것이 왜 '평균에 대한 반전'이라 불리는지 설명하시오.
해설 보기
균등 중첩 상태 $|s\rangle$에서 $\langle s|\psi\rangle = \bar{a}$는 현재 진폭의 평균이다. $D|\psi\rangle$의 각 성분은 $2\bar{a} - a_x$가 된다. 이는 진폭 $a_x$를 평균 $\bar{a}$에 대해 대칭 반전시키는 연산이므로 '평균에 대한 반전'이라 불린다. 오라클로 정답 진폭이 음수가 되어 평균이 낮아진 상황에서 이 반전을 적용하면 정답의 진폭이 크게 증가한다.
Q3정답이 없는 데이터베이스(M = 0)에 Grover 알고리즘을 적용하면 어떻게 되는가?
힌트 보기
오라클이 어떤 상태의 위상도 반전하지 않을 때, Grover 반복의 효과를 생각해보자.
해설 보기
정답이 없으면 오라클 $U_f$는 항등 연산자(I)처럼 동작해 어떤 위상도 반전하지 않는다. 결과적으로 Grover 반복은 확산 연산자만 반복 적용되는 것과 같아지며, 진폭 분포는 주기적으로 변동하지만 특정 상태의 확률이 부각되지 않는다. 측정 결과는 균등 분포에 가깝게 출력되며, 정답 유무를 판별하려면 별도의 알고리즘적 접근이 필요하다.
관련 용어


