Algorytm Grovera służy między innymi do wyszukiwania elementu na nieuporządkowanej liście elementów o długości . Mimo że jest tu wiele pytań dotyczących tego tematu, nadal nie rozumiem tego.
Przeszukiwanie listy, klasyczny sposób
Zwykle zaprojektowałbym funkcję wyszukiwania w ten sposób
Więc podaję listę i poszukiwany element jako dane wejściowe i otrzymuję pozycję pozycji na liście jako danych wyjściowych. Chyba się, że informacje o jest osadzony w algorytmie przez wyrocznią bramy , dlatego naszym funkcją staje
Zróbmy praktyczny przykład. Rozważ przeszukanie asa pik
Lista długości to .
Poszukiwany element to . Powinienem uzyskać . Każda karta może być kodowana za pomocą bitów, lista ma elementów, więc potrzebujemy bitów do zakodowania listy. W tym przypadku wyrocznia zaimplementuje funkcję:
Jednak wejście algorytmu Grovera nie jest stanem kubitów.
(Uwaga: zdjęcie tasowanej talii jest pobierane stąd )
Grover i jego wyrocznia
Kilka źródeł (np. Tutaj - wyjaśnione graficznie) mówi, że dane wejściowe algorytmu są różne: dane wejściowe to stan pobrany z przestrzeni wyszukiwania gdzie jest liczbą elementów listy. Każdy numer odpowiada pozycji elementu na liście.
Wejście jest teraz wektor , który musi być superpozycją wszystkich elementów w przestrzeni wyszukiwania .
Wiemy
- odpowiada ;
- odpowiada;
- odpowiada ;
- odpowiada który to element dobre;
- i tak dalej...
W tym przypadku mamy
Zbudowanie wyroczni wymaga od nas wiedzy, że jest na pozycji 5. Jaki jest sens wykonania algorytmu, jeśli szukaliśmy już elementu w celu zbudowania wyroczni?