מיחשוב קוונטי (האלגוריתם)

forum link

מחשב הוא מערכת שמבצעת פעולה המוכתבת על ידי "הנתונים". הפלט הוא מה שרוצים לחשב:

|output\rangle \ \ \ = \ \ \ U[input] \ \ |0\rangle

להלן תרשים שמתאר את הארכיטקטרה של מחשב קוונטי.

fg

המחשב כולל שני רגיסטרים, ויחידת CPU המסומנת על ידי M. הרגיסטרים הם

 x \ \  = \ \ (x_0,x_1,x_2,...,x_{n_c-1}) \ \ = \ \ \text{control register}
 y \ \ = \ \ (y_0,y_0,y_2,...,y_{n-1}) \ \ = \ \ \text{CPU register}

יחידת ה-CPU מבצעת פעולת כפל

y \ \  :=  \ \ f(x) \ y

באשר הכופל  f(x) נקבע על ידי הערך של המספר שיושב ב-control register. הכופל הזה הוא הפונקציה שאת המחזור שלה אנו מעונינים  לגלות. בהקשר של פיצוח מפתח ההצפנה של RSA הגדרת הפונקציה מוכתבת על ידי המספר N שאותו רוצים לפרק לגורמים (ראה הרצאת מבוא): 

f(x)=M^xmod(N)

החישוב הקלאסי

הפעלת המחשב במוד פעולה קלאסי כוללת את השלבים הבאים:
  1. בעת הדלקת המחשב מאפסים את הרגיסטר x ואת הרגיסטר y מאתחלים על הערך y=1.
  2. ביחידת הקלט H משנים את מצב רגיסטר x לערך שאותו רוצים לחשב.
  3. מפעילים את יחידת הCPU.
  4. מסתכלים על הפלט ברגיסטר y ועוצרים אם f(x)=1.
  5. על השלבים הקודמים יש לחזור בלולאה על כל המספרים x עד לעצירה
  6. כשהלולאה נעצרת המחזור r שאותו רוצים למצוא רשום ביחידת הפלט F
העובדה שמבצעים חישוב יחיד בכל מחזור פעולה, ועלינו לחזור על הפעולה עבור מספר עצום של ערכי קלט אפשריים, היא זו שמכשילה את המחשב הקלאסי. ההנחה היא ש-N מספיק גדול כך שסדרת הפעולות הזו דורשת זמן ארוך מאוד (אלפי שנים) או לחילופין צריך להשתמש באלפי מחשבים במקביל על מנת לבצע את המשימה. לעומת זאת כפי שנראה להלן במחשב הקוונטי כל הפעולות מתבצעות במקביל בו זמנית,  באמצעות מחשב יחיד.

החישוב הקוונטי

הפעלת המחשב במוד פעולה קוונטי כוללת את השלבים הבאים:
  1. בעת הדלקת המחשב מאפסים את הרגיסטר x ואת הרגיסטר y מאתחלים על הערך y=1.
  2. יחידת הקלט H מבצעת טרנספורם הדמדר. 
  3. מפעילים את יחידת הCPU.
  4. יחידת הפלט F מבצעת טרנספורם פוריה קוונטי.
  5. התדר k שאותו רוצים לגלות נמדד ביציאה של יחידת הפלט.
על מנת להבין מדוע החישוב הקוונטי "נותן את הסחורה" נעקוב אחרי המצב הקוונטי של המערכת. המצב התחילי הוא

\mid\Psi \rangle  \ \ \ =  \ \ \ \mid 0,0,0,... ; \,1,0,0,... \rangle \ \ \ = \ \ \ \mid x=0\rangle \ \mid y=1\rangle

לאחר הפעלת הדמרד נקבל את הסופרפוזיציה

|\Psi \rangle \ \ = \ \ \sum_x \ \ |x \rangle \  | y{=}1 \rangle

לאחר הפעלת ה-CPU נקבל

|\Psi \rangle \ \ = \ \ \sum_x \ \  |x \rangle \ | y{=}f(x) \rangle

לאחר הפעלת טרנספורם פוריה קוונטי נקבל

|\Psi \rangle \ \ = \ \ \sum_x  \ \ \left[ \sum_k  J^{xk} |k \rangle \right] \ | f(x) \rangle

נארגן מחדש את הביטוי האחרון

|\Psi \rangle \ \ = \ \ \sum_k \ \ |k \rangle \ \left[ \sum_x  J^{kx} |f(x) \rangle \right]

המחשב נמצא בסופרפוזיציה של מצבים. אידיאלית הביטוי בסוגריים המרובעים הוא אפס למעט ערכי k אשר שוים לכפולה כלשהי של תדר הפונקציה (f(x. מכאן שאם נמדוד את רגיסטר x נקבל את התדר של הפונקציה (או כפולה של התדר הבסיסי, שזה טוב באותה מידה).

המכשול העיקרי לקראת מימוש טכנולוגי של מחשב קוונטי הוא בידוד המערכת מהסביבה. האינטרקציה עם הסביבה "הורסת" את הסופרפוזיציה.