그로버 알고리즘 : 목록은 어디에 있습니까?


15

Grover의 알고리즘은 무엇보다도 정렬되지 않은 항목 목록 에서 항목 을 검색하는 데 사용됩니다 길이 의 . 비록 거기에 많은 질문 이 주제에 관한 여기가, 난 여전히 포인트를 놓친다.y[x0,x1,...,xn1]n

고전적인 방식으로 목록에서 검색

일반적으로 검색 기능은 그래서 나는리스트와 원하는 아이템을 입력으로주고, 나는 포지션을 받는다 목록의 항목을 출력으로 표시합니다. 에 대한 정보 는 oracle gate 통해 알고리즘에 내장되어 있으므로 우리의 함수는 하자 만들기 실제적인 예. 스페이드의 에이스 검색 고려

search([x0,x1,...,xn1],y)=iNsuch that xi=y
yO
searchy([x1,x2,...,xn])=iNsuch that xi=y
1표준 52 장 카드 덱 에서 8 장 연속으로 :

뒤섞인 갑판

길이 의 목록 은 \ mathbf {x} _3 = Q \ clubsuit입니다. , \ mathbf {x} _4 = 3 \ spadesuit, \ mathbf {x} _5 = 1 \ spadesuit, \ mathbf {x} _6 = 6 \ spadesuit, \ mathbf {x} _7 = 6 \ clubsuit] .8[x0=J, x1=10, x2=4, x 5 = 1 , x 6 = 6 , x 7 = 6 ]x3=Q, x4=3, x5=1, x6=6, x7=6]

원하는 요소는 x5 입니다. 나는 얻어야한다 search(cards)=5 . 각 카드는 log252=6 비트로 인코딩 될 수 있으며 , 목록에는 8 요소가 있으므로 목록을 인코딩하려면 6 \ 8s 6×8=48 비트 가 필요 합니다. 이 경우 오라클 Of (\ mathbf {x}) = \ begin {cases} 1, & \ mathbf {x} = 1 \ spadesuit \\ 0, & \ text {otherwise} \ end 함수를 구현합니다.

f(x)={1,x=10,otherwise

그러나 Grover 알고리즘의 입력 상태는 48 큐 비트 가 아닙니다 .

(NB : 뒤섞인 갑판의 이미지는 여기 에서 가져옵니다 )

그로버와 오라클

여러 출처 (예 : 여기에 그래픽으로 설명)는 알고리즘의 입력이 다르다고 말합니다. 입력은 검색 공간에서 가져온 상태입니다 여기서 은 목록의 요소 수입니다. 각 숫자는 목록에서 요소의 위치에 해당합니다.S={0,1,2,...,N}={0,1,2,...,7}N

의 입력 편지이다 큐빗 벡터 검색 공간의 모든 항목의 중첩이어야 .search()log28=3|ψS

우린 알아

  • |03qubits=|000 은 해당합니다 .J
  • |13qubits=|001 은 해당합니다 .10
  • |23qubits=|010 은 해당합니다 .4
  • |53qubits=|101 은 원하는 요소 인 해당합니다 .1
  • 등등...

이 경우 그러나이 경우 오라클은 함수

search(|ψ)=|53qubits
f(|ψ)={1,|ψ=|53qubits0,otherwise

오라클을 구축하려면 이 5 번 위치 에 있다는 것을 알아야합니다 . 오라클을 구축하기 위해 이미 요소를 검색 한 경우 알고리즘을 실행하는 요점은 무엇입니까?


또한 Grover 알고리즘의 장점을 이해하는 데 어려움이 있습니다. 목록에 N 개의 항목이 있다고 가정하십시오. 오라클을 호출 할 때마다 모든 N 가능성을 평가 했습니까? 평가가 매우 빠르지 만 여전히 모든 구성을 반복해야하는 경우 Oracle 평가의 복잡성은 O (N)입니다. 따라서 Grover의 알고리즘은 벙어리 검색보다 빠르지 않습니다. 이 올바른지?
Sanparith Marukatat

@SanparithMarukatat 정확하지 않습니다. 목록의 항목은 검색과 관련된 상태의 중첩 조건입니다. Oracle이이 상태에서 작동하면 단일 작업으로 계산됩니다. 오라클이 귀하의 중첩 된 검색어를 표시 할 수있는 능력은 Grover의 통찰력의 기본 부분입니다. Grover의 알고리즘을 이해하려면 먼저 원하는 상태에서이 표시가 어떻게 발생하는지 이해하는 것이 좋습니다. 그 후, Oracle에서 상태의 역할을 이해해야합니다 . |
R. 쇼팽

이를 이해하면 중첩에서 원하는 항의 진폭을 증가시키면서 중첩의 바람직하지 않은 항의 진폭을 감소시킬 수있는 연산자를 연구해야합니다. Grover에 접근하는 가장 쉬운 방법은 평균에 대한 역 연산자를 보는 것입니다. (어떤 사람들은 기하학적 관점을 취하지 만 명확하지는 않습니다.)
R. Chopin

답변:


10

목록에 8 개의 항목이있는 경우 (예 : 카드 예) Oracle의 입력은 3 비트입니다. 데크 (52)의 카드 수는 중요하지 않으므로 8 개의 카드를 인코딩하려면 3 비트 만 필요합니다.

검색중인 카드 목록에서 3 비트가 위치를 인코딩한다고 생각할 수 있습니다. 그 위치를 모르지만 오라클은 알고 있습니다. 따라서 스페이드 에이스를 검색하는 경우 오라클은 스페이드 에이스가 6 번째 카드 (또는 0부터 5 번째 카운트)임을 알고

에프(엑스)={1,x = 5 또는 이진수 '101'인 경우0,그렇지 않으면

추신 : Grover의 알고리즘에 대해 다르게 생각하는 것이 좋습니다. 입력 비트의 단일 조합에 대해 을 출력하고 그렇지 않으면 0 을 출력하는 부울 함수를 구현하는 오라클이 있으며 작업은 조합을 찾는 것입니다. 이 문제는 정렬되지 않은 목록 또는 데이터베이스에서 검색하는 것과 동일한 복잡성을 가지므로 Grover의 알고리즘은 일반적으로 정렬되지 않은 데이터베이스에서 검색하는 것으로 설명됩니다. 그러나 실제 데이터베이스 검색에 알고리즘을 적용하면 실제로 알고리즘 자체를 넘어서는 질문이 제기됩니다. Grover의 알고리즘은 오라클이 알고있는 것을 검색하는 것입니다.1


죄송 예, 6은 이전의 편집에서 것을
incud

2
답변 주셔서 감사합니다. 나는 오해를 고쳤다. 오라클을 구축하기 위해 검색 된 요소의 위치를 ​​알아야하는 경우 알고리즘을 실행하는 요점은 무엇입니까?
incud

1
@incud 사실 이해가되지 않습니다. 답변을 업데이트했습니다.
kludg

" Grover의 알고리즘은 단지 오라클이 알고있는 것을 찾는 것입니다 . 반드시 그런 것은 아닙니다. 오라클은 입력의 특정 속성 만 검사하여 최종 결과가 오라클 itsef로 인코딩 된 것보다 많은 정보를 포함하도록 할 수 있습니다. 일반적인 예는 전화 번호부에서 검색하는 것입니다. 오라클은 특정 이름에 부착 된 레코드에 대해 "요청"하지만, 정확한 기록이 발견되면, 하나는 오라클의 모든 인코딩되지 않은 해당 레코드에 연결된 전화 번호의 추가 정보를 얻는다
GLS

4

오라클의 기능을 이미 이러한 모든 값을 계산 한 것으로 생각하는 것이 가장 쉬운 방법 일 수는 있지만 그것이 실제로는 아닙니다. 설명 한 경우 오라클은 8 개의 가능한 입력 (즉 3 비트로 인코딩 됨)을 가지고 있으며 오라클은 필요한 모든 계산을 즉시 수행 합니다. 따라서 어떤 값 에 대한 오라클 을 평가하려고 시도하는 순간 , 오라클은 (이 경우) x 값이 카드를 찾습니다.xx해당 카드가 표시된 카드인지 확인합니다. 오라클을 호출 할 때마다 해당 프로세스가 한 번 진행됩니다. 전반적으로 오라클을 호출하는 횟수와 동일한 횟수로 함수를 평가합니다. 검색 알고리즘의 목표는 해당 오라클을 가능한 한 적은 횟수로 호출하는 것입니다.

이것이 약간 원형 인 것처럼 들릴 경우 (입력 주어지면 해당 카드를 찾으십시오) x 가 어떤 카드를 주문할 수 있는지에 대한 룩업 테이블 이 다르고 더 간단하고 훨씬 빠른 검색 질문이라는 것을 기억하십시오.xx

보다 현실적인 사용 시나리오와 비교 한 예제의 주요 차이점은 다음과 같습니다.

  • 검색 공간은 일반적으로 방대합니다. 모든 가치를 사전 계산할 현실적인 전망은 없습니다. 실제로, 우리가 피하려고하는 것입니다.

  • 보통, 우리는 실제로 '스페이드 에이스를 찾으십시오'라고 말하지 않습니다. 대신, x 가 '표시된'항목인지 여부를 테스트하기 위해 평범하지 않은 가 있습니다. Oracle이 단일 항목에 대해서도 평가하는 데 오랜 시간이 걸릴 수 있다는 사실은 Oracle을 구현하는 데 비용이 많이 드는 부분 (및 다른 모든 게이트는 무료로 제공됨)이며 호출 수를 최소화해야하는 이유입니다 .f(x)x

따라서 실제로 고전적인 검색이 문제에서 작동하는 방식은 를 무작위로 선택하는 것 입니다. 평가 Y는 = F ( X를 ) . 경우 y를 = 1 , 반환 X를 , 그렇지 않으면 반복합니다. f ( x ) 효과 는 '입력 x 0 , 표시된 항목입니까?'이지만 실제 계산 은 아닙니다 .xy=f(x)y=1xf(x)x0


2

문제는 궁극적으로 "오라클을 구축하기 위해 이미 요소를 검색 한 경우 알고리즘을 실행하는 요점은 무엇입니까?"입니다.

누군가가 오라클을 사전 구축했지만 오라클을 사용하는 사람이 아닐 수도 있습니다.

그로버 알고리즘은 오라클이 번 이상 쿼리되지 않도록 요구합니다.size of list . 당연히 우리는 앞서 언급했듯이 평판 부족으로 언급 할 수없는 각각의 데이터베이스 조회를 기대할 수 없습니다. 즉, 5 백만 키가 콘텐츠가 5 백만 키 중 하나에 의해 처리되지 않으면 원하는 콘텐츠를 5 백만 키가 반환한다고 말하지만 9 백만 번째 키는 샘플에 포함되지 않습니다. 그렇다면 Grover의 알고리즘은 어떻게 작동합니까?

우리는 오라클에게 질문합니다 : 이미 가지고있는 질문에 대한 답변은 무엇입니까? Mateus와 Omar도 런타임 중에 "특정-알파벳-기호에 대한 Oracle"을 요청할 것입니다. 이미 컴파일 된 문자열에서 심볼의 위치는 무엇입니까? 오라클은 단 한 번의 상담 후에 쿼리에 대한 답변을 제공하지만이 사례에서는 단순히 이진 문자열로 답변을 작성하여 기존 커뮤니케이션 채널을 통해 우리에게 보낼 수 없습니다. 그것은 우리가 그것을 끌어낼 수 있도록 중첩되어 그 답을 숨길 것입니다.

나는이 다음 비트에서 공상이나 은유가 사라지도록하자. 우리는 처음에 답을 듣지 못하고, 오라클이 무슨 말을했는지 확신 할 때까지 오라클에게 동일한 대답을 반복해서 반복하도록 요구해야합니다. 우리가 너무 많이 요청하면 확산 과정에서 잘못된 정보로 환각을 시작한다는 점을 제외하고.


2

귀하가 제공 한 오라클을 고려할 때 검색은 실제로 의미가 없습니다. 그러나 언급 한 바와 같이 이미 카드 순서에서 카드를 검색하는 것은 구조화되지 않은 검색이 아니기 때문에 오라클은 그로버 알고리즘의 요점을 놓치고 있습니다. Ergo, 검색이 구조화되었습니다. 이 오라클이 사용되는 이유는 그러한 오라클이 귀중한 것보다 더 복잡하기 때문에 그로버를 유용하게 만드는 오라클을 논의하지 않고도 그로버가 어떻게 적용될 수 있는지를 보여주기 때문입니다. 따라서 Grover의 유용성을 보여줄 수있는 더 나은 오라클은 다음과 같습니다.

f(x)={1,x[0,,3]+x[4,,7]=10100,otherwise

이 오라클이 암시하는 것은 처음 4 큐 비트를 가져 와서 두 번째 4 큐 비트에 추가하고 10을 더하면 이진수로 1010이되는 8 큐 비트 검색이 있다는 것입니다. 이 오라클과 귀하가 제공 한 오라클의 차이점은이 오라클이 패턴을 테스트하고 (피연산자가 10을 더한 것) 귀하의 평등을 테스트한다는 것입니다 (이 인덱스 5입니다). 이 오라클은 구축하기가 훨씬 어렵지만 그로버의 진정한 힘, 즉 오라클이 검색 공간을 정의하는 무차별 검색을 활용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.