ZPP (Zero-Error Probabilistic Polynomial Time) היא מחלקת סיבוכיות של בעיות הכרעה. הגדרה מקובלת אומרת שיש מכונת טיורינג הסתברותית, כלומר אלגוריתם שמשתמש באקראיות, שמחזירה תמיד תשובה נכונה, ותוחלת זמן הריצה שלה פולינומית. במילים פשוטות: קיימים אלגוריתמי לאס וגאס (Las Vegas) שפתרונם תמיד מדויק, והזמן הממוצע שלהם קצר (פולינומי).
במחשוב, P היא קבוצת הבעיות שיש להן פתרון דטרמיניסטי בזמן פולינומי. אלגוריתמים הסתברותיים מרחיבים אפשרויות אלה על ידי שימוש בהגרלות פנימיות. חלק מהאלגוריתמים ההסתברותיים מתירים טעויות נדירות; אלה נקראים אלגוריתמי מונטה-קרלו ומובילים למחלקות כמו BPP ו-RP. ZPP נבדלת בכך שהיא דורשת אפס טעויות: התשובה חייבת להיות נכונה תמיד, אבל זמן הריצה יכול להשתנות. חשוב שהתוחלת (הזמן הממוצע) תהיה פולינומית עבור כל קלט, כלומר שלא יהיו קלטים שמשאירים את האלגוריתם תמיד איטי.
הגדרה אחת של ZPP היא שכל בעיית הכרעה בה קיימת מכונת טיורינג הסתברותית שלא טועה ותוחלת זמן הריצה שלה פולינומית.
אפשר להגדיר ZPP גם בעזרת מכונה שמחזירה שלוש תשובות: "כן", "לא" ו"לא יודע". המכונה אף פעם לא טועה; היא או עונה נכונה, או אומרת "לא יודע". ההסתברות שתקבל "לא יודע" מוגבלת (למשל עד 1/2). נהוג להפעיל את המכונה שוב ושוב עד שמתקבלת תשובה חד־משמעית. ההפעלה החוזרת מבטיחה תוחלת זמן פולינומית.
ZPP שווה לחיתוך של RP ו-Co-RP. RP מוגדרת כקבוצה של בעיות שיש להן מכונת טיורינג הסתברותית שמחזירה תמיד "לא" במקרה שהתשובה האמיתית היא "לא", ומחזירה "כן" עם הסתברות חיובית אם התשובה האמיתית היא "כן". Co-RP היא ההפוכה: תמיד אומרת "כן" במקרה שהתשובה היא כן, ומתן "לא" בסיכוי אם יש איזו תשובה שלילית. כדי לקבל אלגוריתם ב-ZPP מהחיתוך, מריצים את ה-RP ואז את ה-Co-RP ומשחזרים את התשובות עד שמתקבלת תשובה נכונה; כך מתקבלת תוחלת זמן פולינומית ואפס טעויות.
ZPP היא קבוצה של בעיות שמתקבלות על ידי אלגוריתם שאף פעם לא טועה. אלגוריתם הסתברותי עושה בחירות אקראיות, כמו הטלת מטבע. תוחלת זמן ריצה היא הזמן הממוצע שהאלגוריתם לוקח.
בבעיות מסוימות יש פתרון מהיר שקובע תמיד את אותה תשובה. יש גם אלגוריתמים שמשתמשים באקראיות. חלקם יכולים לטעות לפעמים. ZPP שונה: הוא תמיד נכון. לפעמים האלגוריתם לוקח זמן ארוך, אבל בממוצע הוא קצר.
ZPP כולל בעיות שיש להן אלגוריתם שאינו טועה וזמן הממוצע שלו פולינומי. כלומר בדרך כלל הוא מהיר.
יש גם הגדרה עם מכונה שאומרת "כן", "לא" או "לא יודע". "לא יודע" פירושו לנסות שוב. המכונה לא טועה כשעונה כן או לא.
RP היא קבוצה שבה אם התשובה האמיתית היא "לא" האלגוריתם תמיד אומר "לא". אם התשובה היא "כן", הוא אולי יגיד "כן". Co-RP עושה את ההיפוך. ZPP היא החלק המשותף לשתיהן. אפשר להריץ את שני האלגוריתמים שוב ושוב עד שמקבלים תשובה ברורה.
תגובות גולשים