여기서 n과 m은 양의 정수입니다.
단순화를 위해 m=n인 경우로 한정할 수도 있지만, 이 가정을 통해 얻을 수 있는 것은 거의 없습니다. 사이먼 알고리즘과 그 분석은 어느 쪽이든 기본적으로 동일합니다.
사이먼 문제
입력: 함수 f:Σn→Σm
약속: 모든 x,y∈Σn에 대해 [f(x)=f(y)]⇔[(x=y)∨(x⊕s=y)]를 만족하는 문자열 s∈Σn이 존재한다
출력: 문자열 s
약속의 내용을 곧 더 자세히 살펴보겠지만, 먼저 이 약속이 f에 매우 특별한 구조를 요구한다는 점을 명확히 해두겠습니다. 따라서 대부분의 함수는 이 약속을 만족하지 않습니다.
또한 이 문제가 실용적인 중요성을 갖기 위해 만들어진 것이 아니라는 점도 인정해야 합니다.
오히려 이 문제는 양자 컴퓨터에는 쉽고 고전 컴퓨터에는 어렵도록 인위적으로 설계된 문제입니다.
두 가지 주요 경우가 있습니다. 첫 번째 경우는 s가 전부 0으로 이루어진 문자열 0n인 경우이고, 두 번째 경우는 s가 전부 0으로 이루어진 문자열이 아닌 경우입니다.
경우 1: s=0n.s가 전부 0인 문자열이면, 약속의 동치 조건을 단순화하여 [f(x)=f(y)]⇔[x=y]로 나타낼 수 있습니다.
이는 f가 단사 함수(일대일 함수)임과 동치입니다.
경우 2: s=0n.s가 전부 0인 문자열이 아닌 경우, 이 문자열에 대해 약속이 만족되면 f는 이대일(two-to-one) 함수가 됩니다. 즉, f의 모든 가능한 출력 문자열에 대해 정확히 두 개의 입력 문자열이 f를 그 출력 문자열로 만듭니다. 나아가 이 두 입력 문자열은 어떤 문자열 w에 대해 w와 w⊕s의 형태를 취해야 합니다.
약속이 만족되는 경우 작동하는 문자열 s는 오직 하나뿐임을 인식하는 것이 중요합니다. 따라서 약속을 만족하는 함수에는 항상 유일한 정답이 존재합니다.
입력 문자열은 8개이고 출력 문자열은 4개이며, 각각 두 번씩 나타납니다. 따라서 이는 이대일 함수입니다.
또한, 동일한 출력 문자열을 생성하는 서로 다른 두 입력 문자열에 대해, 그 두 입력 문자열의 비트 XOR이 011과 같음을 알 수 있습니다. 이는 둘 중 하나가 다른 하나를 s와 XOR한 값과 같다는 말과 동치입니다.
실제 출력 문자열에서 중요한 것은 서로 다른 입력 문자열 선택에 대해 출력이 같은지 다른지 여부뿐임에 주목하세요.
예를 들어, 위의 예시에서 f의 출력으로 나타나는 문자열은 (10011,00101,00001,11010) 네 개입니다. 이 네 문자열을 모두 서로 다른 다른 문자열로 교체해도, 올바른 답 s=011은 변하지 않습니다.
명확히 말하면, 위쪽에는 Hadamard Gate가 작용하는 n개의 Qubit이 있고, 아래쪽에는 쿼리 게이트로 직접 들어가는 m개의 Qubit이 있습니다.
이전에 이 레슨에서 다룬 알고리즘들과 매우 유사해 보이지만, 이번에는 위상 반동(phase kickback)이 없습니다. 아래쪽 m개의 Qubit은 모두 ∣0⟩ 상태로 쿼리 게이트에 들어갑니다.
이 Circuit을 사용하여 사이먼 문제를 풀기 위해서는 실제로 Circuit을 여러 번 독립적으로 실행한 후 고전적 후처리 단계가 필요합니다. 이에 대해서는 Circuit의 동작 분석 이후에 설명하겠습니다.
사이먼 알고리즘의 분석은 도이치-조자 알고리즘과 비슷한 방식으로 시작됩니다.
위쪽 n개의 Qubit에 첫 번째 Hadamard Gate 레이어가 수행되면, 상태는 다음과 같이 됩니다.
2n1x∈Σn∑∣0m⟩∣x⟩.
Uf가 수행되면, 함수 f의 출력이 아래쪽 m개 Qubit의 전부 0인 상태에 XOR되어 상태가 다음과 같이 됩니다.
2n1x∈Σn∑∣f(x)⟩∣x⟩.
두 번째 Hadamard Gate 레이어가 수행되면, 이전과 동일한 Hadamard Gate 레이어 작용 공식을 사용하여 다음 상태를 얻습니다.
2n1x∈Σn∑y∈Σn∑(−1)x⋅y∣f(x)⟩∣y⟩
이 시점에서 분석은 이 레슨의 이전 알고리즘들과 달라집니다.
우리는 측정 결과가 각각의 가능한 문자열 y∈Σn이 될 확률에 관심이 있습니다.
양자 정보 기초 강좌의 복합 시스템 레슨에서 설명한 측정 분석 규칙을 통해, 문자열 y를 얻을 확률 p(y)는 다음과 같음을 알 수 있습니다.
p(y)=2n1x∈Σn∑(−1)x⋅y∣f(x)⟩2.
이 확률들을 더 잘 이해하기 위해, 약간의 추가 표기법과 용어가 필요합니다.
먼저, 함수 f의 *치역(range)*은 모든 출력 문자열을 포함하는 집합입니다.
range(f)={f(x):x∈Σn}
다음으로, 각 문자열 z∈range(f)에 대해, 함수가 이 출력 문자열 z로 평가되도록 하는 모든 입력 문자열의 집합을 f−1({z})로 나타낼 수 있습니다.
f−1({z})={x∈Σn:f(x)=z}
집합 f−1({z})는 f 아래에서 {z}의 *원상(preimage)*으로 알려져 있습니다.
{z} 대신 임의의 집합에 대해서도 f 아래에서의 원상을 유사한 방식으로 정의할 수 있습니다. 원상은 f가 그 집합으로 매핑하는 모든 원소의 집합입니다.
(이 표기법은 f의 역함수와 혼동하지 않도록 주의해야 합니다. 역함수는 존재하지 않을 수도 있습니다.
왼쪽의 인수가 원소 z가 아닌 집합 {z}라는 사실이 이러한 혼동을 피할 수 있게 해주는 단서입니다.)
이 표기법을 사용하면, 위의 확률 표현식에서 합산을 분리하여 다음을 얻을 수 있습니다.
p(y)=2n1z∈range(f)∑(x∈f−1({z})∑(−1)x⋅y)∣z⟩2.
x∈Σn의 모든 문자열은 두 합산에서 정확히 한 번씩 나타납니다. 이는 기본적으로 함수 f를 평가할 때 어떤 출력 문자열 z=f(x)를 생성하는지에 따라 이 문자열들을 별도의 버킷에 넣고, 각 버킷에 대해 별도로 합산하는 것과 같습니다.
이제 유클리드 노름의 제곱을 계산하면 다음을 얻습니다.
p(y)=22n1z∈range(f)∑x∈f−1({z})∑(−1)x⋅y2.
이 확률들을 더 단순화하기 위해, 임의의 z∈range(f) 선택에 대한 값을 살펴보겠습니다.
x∈f−1({z})∑(−1)x⋅y2(1)
만약 s=0n인 경우, f는 단사 함수이므로 모든 z∈range(f)에 대해 f−1({z})에는 항상 단 하나의 원소 x만 있습니다.
이 경우 식 (1)의 값은 1입니다.
반면에 s=0n인 경우, 집합 f−1({z})에는 정확히 두 개의 문자열이 있습니다.
더 정확히 말하면, w∈f−1({z})를 이 두 문자열 중 하나로 선택하면, 다른 문자열은 사이먼 문제의 약속에 의해 반드시 w⊕s가 됩니다.
이 관찰을 이용하면 (1)을 다음과 같이 단순화할 수 있습니다.
즉, 2n−1개의 문자열을 포함하는 집합 {y∈Σn:y⋅s=0}에서 균등하게 무작위로 선택된 문자열을 얻습니다. (s=0n이므로, 길이 n의 이진 문자열 중 정확히 절반이 s와의 이진 내적이 1이고 나머지 절반이 0임을 도이치-조자 알고리즘의 번스타인-바지라니 문제 분석에서 이미 확인했습니다.)
이제 사이먼 알고리즘의 양자 Circuit을 실행했을 때 가능한 측정 결과들의 확률을 알게 되었습니다.
이것만으로 s를 결정하기에 충분할까요?
답은 "예"입니다. 단, 과정을 여러 번 반복하고 일정 확률로 실패할 수 있다는 점을 받아들여야 합니다. Circuit을 충분히 많이 실행하면 이 확률을 매우 작게 만들 수 있습니다.
핵심 아이디어는 Circuit의 각 실행이 s에 관한 통계적 증거를 제공하며, Circuit을 충분히 여러 번 실행하면 이 증거를 사용하여 매우 높은 확률로 s를 찾을 수 있다는 것입니다.
Circuit을 k=n+10으로 k번 독립적으로 실행한다고 가정해 보겠습니다.
이 특정 반복 횟수에는 특별한 의미가 있는 것은 아닙니다. 허용하는 실패 확률에 따라 k를 더 크게(또는 더 작게) 선택할 수 있으며, 이는 나중에 살펴볼 것입니다.
k=n+10을 선택하면 s를 복원할 확률이 99.9% 이상이 됩니다.
Circuit을 k번 실행하면 문자열 y1,...,yk∈Σn을 얻습니다.
명확히 말하면, 여기서 위첨자는 이 문자열들의 이름의 일부이며 지수나 비트 인덱스가 아닙니다.
y1y2yk=yn−11⋯y01=yn−12⋯y02⋮=yn−1k⋯y0k
이제 이 문자열들의 비트를 이진 값 원소로 하여 k개의 행과 n개의 열을 가진 행렬 M을 구성합니다.
M=yn−11yn−12⋮yn−1k⋯⋯⋱⋯y01y02⋮y0k
현재 우리는 s가 무엇인지 모릅니다. 우리의 목표는 이 문자열을 찾는 것입니다.
그러나 잠시 s를 안다고 가정하고, 문자열 s=sn−1⋯s0의 비트로부터 다음과 같이 열 벡터 v를 구성해 보겠습니다.
v=sn−1⋮s0
행렬-벡터 곱 Mv를 모듈로 2로 수행하면, 즉 일반적인 방식으로 곱셈을 수행한 후 결과의 각 원소를 2로 나눈 나머지를 취하면, 전부 0인 벡터를 얻습니다.
Mv=y1⋅sy2⋅s⋮yk⋅s=00⋮0
즉, 방금 설명한 대로 열 벡터 v로 처리하면, 문자열 s는 항상 모듈로 2 산술에서 행렬 M의 *영공간(null space)*의 원소가 됩니다.
이는 s=0n인 경우와 s=0n인 경우 모두에서 사실입니다.
더 정확히 말하면, 전부 0인 벡터는 항상 M의 영공간에 있으며, s=0n인 경우에는 s의 비트로 이루어진 벡터도 영공간에 포함됩니다.
남은 질문은 0n과 s에 해당하는 벡터 외에 M의 영공간에 다른 벡터가 있을 수 있는지 여부입니다.
k가 증가할수록 이는 점점 더 가능성이 낮아지며, k=n+10을 선택하면 99.9% 이상의 확률로 M의 영공간에는 0n과 s에 해당하는 벡터 외에 다른 벡터가 포함되지 않습니다.
더 일반적으로, k=n+10을 k=n+r (r은 임의의 양의 정수)로 대체하면, 0n과 s에 해당하는 벡터만이 M의 영공간에 있을 확률은 최소 1−2−r입니다.
선형 대수학을 사용하면 모듈로 2에서 M의 영공간에 대한 설명을 효율적으로 계산할 수 있습니다.
구체적으로, 가우스 소거법을 사용하면 이를 수행할 수 있으며, 이 방법은 모듈로 2 산술에서도 실수나 복소수에서와 동일한 방식으로 작동합니다.
높은 확률로 발생하는 경우처럼 0n과 s에 해당하는 벡터만이 M의 영공간에 있는 한, 이 계산의 결과로부터 s를 추론할 수 있습니다.
고전 쿼리 알고리즘이 사이먼 문제를 풀기 위해 몇 번의 쿼리가 필요할까요?
일반적으로 답은 매우 많습니다.
이 문제의 고전적 어려움에 대해 다양한 정밀한 설명이 가능하며, 그 중 하나를 소개합니다.
임의의 확률적 쿼리 알고리즘이 n에 대해 지수적인 쿼리 횟수인 2n/2−1−1회 미만의 쿼리를 수행한다면, 그 알고리즘은 최소 1/2의 확률로 사이먼 문제를 풀지 못합니다.
이러한 불가능성 결과를 증명하는 것이 때로는 매우 어려울 수 있지만, 이 경우는 기본적인 확률적 분석을 통해 증명하기가 그리 어렵지 않습니다.
그러나 여기서는 그 이면의 기본적인 직관만 간략히 살펴보겠습니다.
우리는 숨겨진 문자열 s를 찾으려 하지만, 동일한 출력 값을 가지는 두 문자열에 대해 함수를 쿼리하지 않는 한, s에 대해 매우 제한된 정보만 얻을 수 있습니다.
직관적으로 말하면, 우리가 알게 되는 것은 숨겨진 문자열 s가 쿼리한 서로 다른 두 문자열의 XOR이 아니라는 것뿐입니다.
그리고 2n/2−1−1개 미만의 문자열을 쿼리한다면, 충분한 쌍의 문자열이 없기 때문에 여전히 배제하지 못한 s의 후보가 많이 남아 있습니다.
이것은 공식적인 증명이 아니라 기본적인 아이디어만을 나타냅니다.
요약하면, 사이먼 알고리즘은 쿼리 모델 내에서 양자 알고리즘이 고전 알고리즘에 비해 놀라운 우위를 제공함을 보여줍니다.
특히, 사이먼 알고리즘은 함수의 입력 비트 수 n에 대해 선형인 쿼리 횟수로 사이먼 문제를 풀지만, 확률적 알고리즘을 포함한 모든 고전 알고리즘은 합리적인 성공 확률로 사이먼 문제를 풀기 위해 n에 대해 지수적인 쿼리 횟수가 필요합니다.