Přeskočit na hlavní obsah
Tento projekt je v betě. Našel jsi chybu? Otevřít issue na GitHubu. Máš otázku nebo nápad? Zeptej se v Discussions — rádi si poslechneme tvou zpětnou vazbu!
Jaká je kvalita překladu na této stránce?

Nestrukturované vyhledávání

Shrnutí​

Začneme popisem problému, který Groverův algoritmus řeší. Jako obvykle budeme v celé této diskusi označovat Σ={0,1}\Sigma = \{0,1\} binární abecedu.

Předpokládejme, že

f:Σn→Σf:\Sigma^n \rightarrow \Sigma

je funkce z binárních řetězců délky nn do bitů. Budeme předpokládat, že tuto funkci umíme efektivně vyhodnotit, ale jinak je libovolná a nemůžeme se spoléhat na to, že má nějakou speciální strukturu nebo konkrétní implementaci, která by vyhovovala našim potřebám.

Groverův algoritmus hledá řetězec x∈Σnx\in\Sigma^n, pro který f(x)=1f(x) = 1. Řetězce tohoto druhu budeme označovat jako řešení daného vyhledávacího problému. Pokud existuje více řešení, pak je kterékoliv z nich považováno za správný výstup, a pokud žádné řešení neexistuje, správná odpověď vyžaduje, abychom oznámili, že řešení neexistují.

Tento úkol je popisován jako problém nestrukturovaného vyhledávání, protože se nemůžeme spoléhat na to, že ff má nějakou konkrétní strukturu, která by ho usnadnila. Nehledáme v uspořádaném seznamu ani v datové struktuře speciálně navržené pro usnadnění vyhledávání – v podstatě hledáme jehlu v kupce sena.

Intuitivně si můžeme představit, že máme extrémně složitý Booleovský obvod, který počítá ff, a snadno ho můžeme spustit na zvoleném vstupním řetězci. Ale protože je tento obvod tak složitý, nemáme žádnou naději porozumět mu jeho zkoumáním (kromě schopnosti vyhodnotit ho na zvolených vstupních řetězcích).

Jeden způsob, jak tento vyhledávací úkol provést klasicky, je jednoduše projít všechny řetězce x∈Σnx\in\Sigma^n a vyhodnotit ff na každém z nich, abychom zkontrolovali, zda je či není řešením. Dále budeme pro pohodlí psát

N=2nN = 2^n

V Σn\Sigma^n je NN řetězců, takže procházení všech vyžaduje NN vyhodnocení ff. Za předpokladu, že jsme omezeni na vyhodnocování ff na zvolených vstupech, je to to nejlepší, co můžeme deterministickým algoritmem dosáhnout, pokud chceme zaručit úspěch. S pravděpodobnostním algoritmem bychom mohli doufat v úsporu času náhodným výběrem vstupních řetězců pro ff, ale stále budeme potřebovat O(N)O(N) vyhodnocení ff, pokud chceme, aby tato metoda uspěla s vysokou pravděpodobností.

Groverův algoritmus řeší tento vyhledávací problém s vysokou pravděpodobností pomocí pouhých O(N)O(\sqrt{N}) vyhodnocení ff. Aby bylo jasno, tato vyhodnocení funkce musí probíhat v superpozici, podobně jako dotazovací algoritmy diskutované v lekci Kvantové dotazovací algoritmy, včetně Deutschova algoritmu, Deutsch-Jozsova algoritmu a Simonova algoritmu. Na rozdíl od těchto algoritmů používá Groverův algoritmus iterativní přístup: vyhodnocuje ff na superpozicích vstupních řetězců a prokládá tato vyhodnocení dalšími operacemi, které mají za následek vytvoření interferenčních vzorů, vedoucích k řešení s vysokou pravděpodobností (pokud existuje) po O(N)O(\sqrt{N}) iteracích.

Formální formulace problému​

Problém, který Groverův algoritmus řeší, formalizujeme pomocí dotazovacího modelu výpočtu. To znamená, že předpokládáme přístup k funkci f:Σn→Σf:\Sigma^n\rightarrow\Sigma prostřednictvím dotazovacího hradla definovaného obvyklým způsobem:

Uf(∣a⟩∣x⟩)=∣a⊕f(x)⟩∣x⟩U_f \bigl( \vert a\rangle \vert x\rangle \bigr) = \vert a \oplus f(x) \rangle \vert x \rangle

pro každé x∈Σnx\in\Sigma^n a a∈Σa\in\Sigma. Toto je akce UfU_f na stavech standardní báze a její obecná akce je určena linearitou.

Jak bylo diskutováno v lekci Základy kvantových algoritmů, pokud máme Booleovský obvod pro výpočet ff, můžeme tento popis Booleovského obvodu transformovat na kvantový obvod implementující UfU_f (za použití určitého počtu pracovních qubitů, které začínají a končí výpočet ve stavu ∣0⟩\vert 0\rangle). Takže ačkoli používáme dotazovací model k formalizaci problému, který Groverův algoritmus řeší, není omezen na tento model; Groverův algoritmus můžeme spustit na libovolné funkci ff, pro kterou máme Booleovský obvod.

Zde je přesná formulace problému, který se jmenuje Search, protože hledáme řešení, tedy řetězec xx, který způsobí, že se ff vyhodnotí na 11.

Search

Vstup: funkce f:Σn→Σf:\Sigma^n\rightarrow\Sigma
Výstup: řetězec x∈Σnx\in\Sigma^n splňující f(x)=1f(x) = 1, nebo „žádné řešení", pokud takový řetězec xx neexistuje

Všimni si, že toto není problém se slibem — funkce ff je libovolná. Bude však užitečné zvážit následující slibovou variantu problému, kde máme zaručeno, že existuje právě jedno řešení. Tento problém se objevil jako příklad slibového problému v lekci Kvantové dotazovací algoritmy.

Unique search

Vstup: funkce tvaru f:Σn→Σf:\Sigma^n \rightarrow \Sigma
Slib: existuje právě jeden řetězec z∈Σnz\in\Sigma^n, pro který f(z)=1f(z) = 1, přičemž f(x)=0f(x) = 0 pro všechny řetězce x≠zx\neq z
Výstup: řetězec zz

Také si všimni, že problém Or zmíněný ve stejné lekci úzce souvisí s problémem Search. U tohoto problému je cílem jednoduše určit, zda řešení existuje či nikoli, na rozdíl od jeho skutečného nalezení.