אלגוריתם גרובר

אלגוריתם גרובר הוא אלגוריתם קוונטי לחיפוש במבנה נתונים שאינו ממויין. האלגוריתם הומצא בשנת 1996 על ידי לוב גרובר.
בעוד אלגוריתם קלאסי הפותר בעיה דומה מצריך <math>\left.O(N)\right.</math> גישות אל מערך הנתונים על מנת למצוא ערך מבוקש, האלגוריתם של גרובר עושה זאת ב-<math>O(\sqrt{N})</math>, ובכך מהווה דוגמה ליתרון החישובי של מחשב קוונטי על פני מקבילו הקלאסי.

אלגוריתם גרובר הוא אלגוריתם הסתברותי, ולאחר הפעלתו קיימת הסתברות גבוהה מאוד לקבלת התשובה הנכונה (אך הסתברות זו קטנה מ -1). ניתן להגדיל את הסיכוי לקבלת התשובה הנכונה על ידי הפעלה חוזרת של האלגוריתם מספר פעמים.

עקרון הפעולה של האלגוריתם מבוסס על ביצוע מחזורי של מספר פעולות בסיס כגון הפעלת הפונקציה הקוונטית המתארת את הגישה אל מבנה הנתונים, הפעלת שער הדמר ושער הפיכת פאזה. סט הפעולות ידוע בשם איטרטור גרובר, ויש להפעילו <math>\frac{\pi\sqrt{N}}{4}</math> פעמים על מנת לקבל הסתברות גבוהה ביותר לסיום האלגוריתם עם התשובה הנכונה.

== יישום האלגוריתם ==
כאמור, אלגוריתם גרובר נועד לחיפוש במבנה נתונים לא-ממוין. לייתר דיוק, הקלט של האלגוריתם היא פונקציית אוב כך שהפעלת הפונקציה על הערך המבוקש מחזירה 1, ועל כל שאר הערכים מחזירה 0. נניח, למשל, כי אנו מחפשים אינדקס מסוים מתוך המערך <math>\left[1..N\right]</math>. נסמן את האינדקס המבוקש (שערכו אינו ידוע לנו) ב <math>\left.k\right.</math>. מתקיים
<math display="block">f(x) = \begin{cases}1 & x=k \\ 0 & x \neq k\end{cases}</math>
באופן קלאסי, הסתברותי, על מנת למצוא את האינדקס המבוקש, "ננחש" אינדקס כלשהו ונפעיל את <math>f\left(x\right)</math> עד לניחוש מוצלח עבורו הפונקציה החזירה את הערך 1. בממוצע, נצטרך להפעיל את הפונקציה <math>N/2</math> פעמים.

== תיאור האלגוריתם הקוונטי ==
=== אתחול ===
בעזרת הפונקציה <math>f\left(x\right)</math> ובעזרת שער הדמר נבנה מעגל המממש את האופרטור <math>\left.U_f\right.</math> עבורו <math>U_f|x\rangle=(-1)^{f(x)}|x\rangle</math> כלומר ערך הפונקציה משוקף בפאזה של האוגר.

אתחל אוגר קוונטי באורך <math>n = \log\left(N\right)</math> ואתחל אותו לסופרפוזיציה שווה של כל אברי בסיס החישוב (במילים אחרות, אתחל את האוגר למצב <math>|0\rangle</math> והפעל עליו את שער הדמר).

=== איטרטור גרובר ===
{N}& & & \\-2\frac{\sqrt{N-1}}{N} &1-\frac{2}{N}& & & \\ & & -1 & & \\ & & & \ddots & \\ & & & & -1\end{pmatrix}</math> <br />
בבסיס <math>|k\rangle, |l\rangle</math> המוגדר להלן.
|כיוון=שמאל|צבע=none}}
בצע את סט הפעולות הבאות <math>\frac{\pi\sqrt{N}}{4}</math> פעמים
:# הפעל את <math>\left.U_f\right.</math>
:# הפעל שער הדמר
:# הפעל שער המבצע הפיכת פאזה לאיבר <math>|0\rangle</math> בלבד
:# הפעל שער הדמר
:# הפוך את הפאזה הגלובלית. <small>[צעד זה חסר משמעות מבחינה פיזיקלית, אך הוא נוח לשם האנליזה של האלגוריתם.]</small>

=== מדידה ===
לאחר הפעלת האיטרטור במספר הפעמים הנדרש, יש לבצע מדידה בבסיס החישוב. תוצאת המדידה יהיו האינדקס המבוקש <math>\left.k\right.</math> בהסתברות <math>1\approx</math>.

== אנליזת האלגוריתם ==
נגדיר את הבסיס עבור המרחב אשר בו אבר בסיס אחד הוא <math>|k\rangle</math>, האינדקס אותו אנחנו מחפשים, ואבר שני הוא סופרפוזיציה שווה של כל שאר האינדקסים, <math>|l\rangle = \frac{1}{\sqrt{N-1}}\sum_{i\neq k}|i\rangle</math>. שני איברים אלו אורתוגונליים ולכן ניתן להרחיב אותם לבסיס של המרחב, למשל על ידי שימוש בתהליך גרם-שמידט.
פעולת איטרטור גרובר, Q, היא למעשה סיבוב ההטלה של המצב הקוונטי על המישור הנפרש על ידי <math>|k\rangle, |l\rangle</math> בזווית <math>\omega</math> המקיימת <math>\cos \omega = 1-\frac{2}{N}</math>.
באתחול האלגוריתם יוצרים אוגר שהוא סופרפוזיצה שווה של כלל האיברים, וניתן להציג אותו בבסיס החדש כ
<math display="block">\frac{1}{\sqrt{N}}\sum_i|i\rangle=\frac{1}{\sqrt{N}}|k\rangle+ \frac{\sqrt{N-1}}{\sqrt{N}}|l\rangle=\sin\phi|k\rangle+ \cos\phi|l\rangle</math>
כאשר <math>\phi = \arcsin \frac{1}{\sqrt{N}}</math>. בכל פעם שמפעילים את Q, מתבצע סיבוב בזווית <math>\omega</math>, כך שלאחר ביצוע t הפעלות מתקבל המצב
<math>\sin (\omega t+\phi)|k\rangle + \cos(\omega t + \phi)|l\rangle</math>.

=== סיכוי הצלחת האלגוריתם ===
אם נבצע מדידה לאחר t הפעלות של האלגוריתם, ההסתברות למדוד את האיבר המבוקש <math>|k\rangle</math> נתונה על ידי
<div style="text-align: center;">
<math>Pr\left(t\right) = \sin^2 (\omega t+\phi)</math>.
</div>
הסתברות ההצלחה תלויה במספר ההפעלות של האיטרטור, ותהיה קרובה ל-1 ככל ש<math>\left.\omega t+\phi\right.</math> יתקרב ל-<math>\left.\pi/2\right.</math>. מספר ההפעלות המינימלי, <math>t_{\min}</math>, עבורו הסתברות ההצלחה היא גבוהה מקיים <math>\left.\omega t+\phi\right.=\pi/2</math>, כלומר <math>t_\min=\frac{\pi-2\phi}{2\omega}</math>.
עבור N גדול ושימוש בזהויות טריגונומטריות ובקרובים טריגונומטריים ניתן לבצע את הקרובים <math>\omega \approx \frac{2}{\sqrt{N}}</math>, <math>\phi\approx \frac{1}{\sqrt{N}}</math> ומתקבל
<math>t_{\min} \approx \left(\frac{\pi\sqrt{N}}{4}-\frac{1}{2}\right)</math>.
יש לשים לב כי הפעלת האיטרטור במספר פעמים גבוה יותר עלול לפגום בהסתברות ההצלחה.

==הערות שוליים==

גרובר
גרובר