여기서 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)을 다음과 같이 단순화할 수 있습니다.