Grover의 알고리즘은 무엇보다도 정렬되지 않은 항목 목록 에서 항목 을 검색하는 데 사용됩니다 길이 의 . 비록 거기에 많은 질문 이 주제에 관한 여기가, 난 여전히 포인트를 놓친다.
고전적인 방식으로 목록에서 검색
일반적으로 검색 기능은
그래서 나는리스트와 원하는 아이템을 입력으로주고, 나는 포지션을 받는다 목록의 항목을 출력으로 표시합니다. 에 대한 정보 는 oracle gate 통해 알고리즘에 내장되어 있으므로 우리의 함수는
하자 만들기 실제적인 예. 스페이드의 에이스 검색 고려
길이 의 목록 은 \ 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] . x 5 = 1 ♠ , x 6 = 6 ♠ , x 7 = 6 ♣ ]
원하는 요소는 입니다. 나는 얻어야한다 . 각 카드는 비트로 인코딩 될 수 있으며 , 목록에는 요소가 있으므로 목록을 인코딩하려면 6 \ 8s 비트 가 필요 합니다. 이 경우 오라클 는 f (\ mathbf {x}) = \ begin {cases} 1, & \ mathbf {x} = 1 \ spadesuit \\ 0, & \ text {otherwise} \ end 함수를 구현합니다.
그러나 Grover 알고리즘의 입력 상태는 큐 비트 가 아닙니다 .
(NB : 뒤섞인 갑판의 이미지는 여기 에서 가져옵니다 )
그로버와 오라클
여러 출처 (예 : 여기에 그래픽으로 설명)는 알고리즘의 입력이 다르다고 말합니다. 입력은 검색 공간에서 가져온 상태입니다 여기서 은 목록의 요소 수입니다. 각 숫자는 목록에서 요소의 위치에 해당합니다.
의 입력 편지이다 큐빗 벡터 검색 공간의 모든 항목의 중첩이어야 .
우린 알아
- 은 해당합니다 .
- 은 해당합니다 .
- 은 해당합니다 .
- 은 원하는 요소 인 해당합니다 .
- 등등...
이 경우
그러나이 경우 오라클은 함수
오라클을 구축하려면 이 5 번 위치 에 있다는 것을 알아야합니다 . 오라클을 구축하기 위해 이미 요소를 검색 한 경우 알고리즘을 실행하는 요점은 무엇입니까?