אלגוריתם מונטה קרלו

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

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

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

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

למשל, בדיקת הראשוניות של Solovay–Strassen משמשת כדי לקבוע אם מספר נתון הוא מספר ראשוני. היא תמיד עונה **כן** עבור קלט שהוא מספר ראשוני; עבור מספר פריק, היא מחזירה **לא** בהסתברות לפחות &#x20;&#xBD;&#x20;. לפיכך, תשובה **לא** מהאלגוריתם היא נכונה בוודאות, ואילו תשובה **כן** נשארת בספק; לכן זהו *אלגוריתם* *&#xBD;&#x20;נכון-נוטה-ללא*.

## אמפליפיקציה (הגברה)
עבור אלגוריתם מונטה קרלו עם שגיאה חד-צדדית, ניתן להקטין את ההסתברות לכישלון (ולהגביר את הסתברות ההצלחה) על ידי הרצת האלגוריתם *k* פעמים. נקח לדוגמה שוב את אלגוריתם Solovay–Strassen שהוא *&#x20;&#xBD;&#x20;נכון-נוטה-ללא*. ניתן להריץ את האלגוריתם מספר פעמים ולהחזיר כתשובה **לא** אם קיבלנו תשובת **לא** אחת תוך *k* איטרציות, אחרת נחזיר **כן**. לכן, אם המספר הוא ראשוני, אז התשובה תמיד נכונה, ואם המספר הוא פריק אז התשובה נכונה בהסתברות לפחות 1- \left(1- \frac{1}{2} \right)^k= 1-2^{-k}.

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

## מחלקות סיבוכיות
מחלקת הסיבוכיות BPP מתארת בעיות הכרעה שניתן לפתור על ידי אלגוריתם מונטה קרלו בזמן פולינומי עם הסתברות שגיאה דו-צדדית חסומה, ומחלקת הסיבוכיות RP מתארת את הבעיות שניתן לפתור על ידי אלגוריתם מונטה קרלו עם הסתברות שגיאה חד-צדדית חסומה: אם התשובה הנכונה היא **לא**, האלגוריתם תמיד אומר כך, אבל הוא עשוי לענות **לא** באופן שגוי על כמה מקרים שבהם התשובה הנכונה היא **כן**. לעומת זאת, מחלקת הסיבוכיות ZPP מתארת בעיות פתירות על ידי אלגוריתם לאס וגאס שתוחלת הזמן שלהם פולינומית. ZPP ⊆ RP ⊆ BPP, אך לא ידוע אם מחלקה כלשהי מהן נבדלת מהאחרות; זאת אומרת, ייתכן שלאלגוריתמים מסוג מונטה קרלו יש יותר כח חישובי מאשר לאלגוריתמים מסוג לאס וגאס, אך זה לא הוכח. מחלקת סיבוכיות נוספת, PP, מתארת בעיות הכרעה להן קיים אלגוריתם מונטה קרלו עם זמן פולינומי, שהוא מדויק יותר מאשר הטלת מטבע אך שלא ניתן בהכרח לחסום בהן את הסתברות השגיאה כקטנה ממש מ- &#xBD;&#x20;.

## יישומים בתורת המספרים החישובית
אלגוריתמים ידועים מסוג מונטה קרלו כוללים את בדיקת הראשוניות של Solovay–Strassen, בדיקת הראשוניות Baillie-PSW, בדיקת הראשוניות של מילר–רבין, וכמה גרסאות מהירות מסוימות של אלגוריתם Schreier–Sims בתורת הקבוצות החישובית.

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

## לקריאה נוספת

* 
* 
* 

* ראובן רובינשטיין, Monte Carlo Optimization, Simulation and Sensitivity of Queueing Networks, John Wiley and Sons, Inc., 1986, 267 pp.

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

קטגוריה:אלגוריתמים