BPP (מחלקת סיבוכיות)

BPP (ראשי תיבות: Bounded-Error, Probabilistic, Polynomial Time) היא מחלקת הבעיות הפתירות על ידי אלגוריתם אקראי בעל זמן ריצה פולינומי, אשר צודק בהסתברות "טובה". (כלומר, ההסתברות (על פני המטבעות שמטיל האלגוריתם) שהאלגוריתם עונה את התשובה הנכונה היא לפחות <math>\ 2/3</math>).

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

== הגדרה ==
קיימות מספר הגדרות שקולות למחלקה זו, נציין אחת מהן.

מחלקת BPP מאגדת את כל השפות <math>\ L</math> להן קיים אלגוריתם אקראי <math>A</math>, הרץ בזמן פולינומי, ומקיים:
# לכל <math> x \in L</math>, מתקיים <math>A(x)=1</math> בהסתברות לפחות <math>\frac{2}{3}</math>.
# לכל <math> x \notin L</math>, מתקיים <math>A(x)=0</math> בהסתברות לפחות <math>\frac{2}{3}</math>.

ניתן לציין כי השימוש בקבוע <math>2/3</math> שרירותי ונבחר מטעמי פשטות, וכל קבוע אחר, או ביטוי מהצורה <math>1/2+1/poly</math> היה נותן מחלקה זהה. הסיבה לכך, היא שניתן להעצים את הסתברות ההצלחה של האלגוריתם על ידי הרצתו מספר (פולינומי) של פעמים באופן בלתי תלוי ובחירת תוצאת הרוב. כך ניתן להקטין את סיכויי הכישלון באופן מעריכי עם מספר החזרות, כפי שניתן לנתח באמצעות אי-שוויון צ'רנוף.

== יחס למחלקות אחרות ==
המחלקה BPP מכילה את מחלקות הסיבוכיות RP ו-co-RP, אשר מאפשרות טעות חד-צדדית בלבד, ואת מחלקת הסיבוכיות P, אשר אינה מאפשרת אקראיות בכלל (ולכן, ממילא, האלגוריתם חייב לצדוק תמיד). המחלקה מוכלת במחלקת הסיבוכיות PP.

עם זאת, לא ידוע האם BPP מכילה ממש את P, וכן לא ידוע היחס בין BPP למחלקה NP (דהיינו, כלל לא ידוע האם אחת מהן מוכלת בשנייה). סוגיה זו היא אחת הסוגיות הבסיסיות של מדעי המחשב בכלל, ותורת הסיבוכיות בפרט. ידוע ש BPP מוכלת במחלקת הסיבוכיות P/Poly, הכוללת את כל הפונקציות הניתנות לחישוב על ידי מעגלים בגודל פולינומי.

לאור הידוע אודות "דה-רנדומיזציה", ההשערה המקובלת היא ש-BPP שווה למחלקה P.

==משפט סיפסר לאוטמן==
משפט סיפסר לאוטמן קובע כי <math>BPP \subseteq \Sigma_2 \cap \Pi_2 </math>
===אינטואיציה===
המחלקה BPP היא המחלקה אשר מתירה טעות דו צדדית קטנה, כלומר טעות קטנה בתשובה "כן", וטעות קטנה בתשובה "לא". הכוונה בטעות קטנה היא שניתן בזמן פולינומי באורך הקלט להקטין אותה לטעות זניחה. מכיוון שיש מספר זניח של טעויות, אז "רוב" המחרוזות הראנדומיות הן מחרוזות שגורמות למכונה שמכריעה שפה ב-BPP להוציא תשובה נכונה (מחרוזות "נכונות"). לכן ניקח מספר פולינומי של פונקציות הפיכות שלאחר שנפעיל אותן על קבוצת המחרוזות הראנדומיות הנכונות נקבל את כל המחרוזות הרנדומיות הקיימות. מאחר שיש לנו קבוצת פונקציות כזאת, אז הנוסחה שתתאים ל<math>\Sigma_2</math> היא <math>\exists F\ \forall r \ \bigvee^{|r|}_{i=1} M(f_i(r); x) = 1</math>. כלומר לכל קלט ראנדומי קיימת פונקציה שממפה אותו לקלט מהקבוצה של הקלטים הנכונים. הפועל הפונקציות ההפיכות תהיינה פעולות xor עם ערך קבוע.

===הוכחה===
נרצה להוכיח עבור שפה <math>L \in BPP</math> שמתקיים <math>L \in \Sigma_2</math>. מכיוון ש-BPP סגורה למשלים אז מתקיים גם <math>L \in \Pi_2</math>, ולכן <math>L\in \Sigma_2 \implies L\in \Sigma_2 \cap \Pi_2</math>.
בלי הגבלת הכלליות ניקח מכונה הסתברותית M המכריעה את L עם הסתברות טעות לכל היותר <math>2^{-|x|}</math>. נגדיר <math>A(x) = \{r\ |\ M(r;x)=1\}</math>. עכשיו נמצא מספר קטן של פונקציות שיקיימו <math>\bigcup_{i=1}^{|F|}f_i(A(x)) = R</math>, כאשר R הוא מרחב מרחב המחרוזות הרנדומיות (נגדיר הפעלה של פונקציה על קבוצה בתור הפעלה איבר איבר, כלומר <math>f(A) = \{f(a)\ | \ a\in A\}</math>). 
אנחנו נתייחס למרחב קלטים ראנדומי באורך r.
====למה 1====
נרצה להראות שקבוצה גדולה יכולה לכסות את כל R עם פונקציות מתאימות, או בשפה מתמטית 
:אם <math>\frac{|A(x)|}{|R|} \ge 1-2^{-|x|}</math> אז קיימות מחרוזות תרגום <math>t_1,t_2,...,t_n </math> כך ש<math>\bigcup_{i=1}^{n} A(x) \oplus t_i = R</math>. הפעולה <math>\oplus</math> תוגדר כמו מקודם - <math>A \oplus t = \{a \oplus t \ | \ a \in A\}</math>.

הוכחה. נבחר באקראי <math>t_1,t_2,...,t_{|r|}</math>. נגדיר <math>S = \bigcup_i A(x)\oplus t_i</math>.

אז, לכל <math>r \in R</math>,
:<math>\Pr{[r\notin S]} = \prod_{i=1}^{r} \Pr{[r\notin A(x) \oplus t_i]} \leq \frac{1}{2^{|x|\cdot|r|}} </math>. 

לכן ההסתברות שקיים לפחות איבר אחד ב-R שאינו נמצא ב-S היא 
:<math>\Pr \Bigl[\bigvee_i r_i \notin S \Bigr] \leq \sum_i \frac{1}{2^{|x|\cdot|r|}} = \frac{2^{|r|}}{2^{|x|\cdot|r|}}<1 </math>

ולכן
: <math>\Pr [S = R] = 1 - \frac{2^{|r|}}{2^{|x|\cdot|r|}} > 0</math>

ומכיוון שההסתברות לא 0 קיימות מחרוזות תרגום עבורן הקבוצות S ו-R שוות.
====למה 2====
נרצה להראות שקבוצה קטנה לא יכולה לכסות את כל R עם כל מספר פולינומי של פונקציות, או בשפה מתמטית 
אם <math>\frac{|A(x)|}{|R|} \leq 2^{-|x|}</math> אז אין קבוצה קטנה של מחרוזות תרגום שמכסה את R.

ההוכחה טריוויאלית - <math>\bigl | \bigcup_i^{p(|x|)} A(x)\oplus t_i \bigr |\leq p(|x|)\frac{|A(x)|}{|R|}</math>, ופולינום כפול מספר זניח הוא מספר זניח, ולכן לא קיים כיסוי עם אף סט קטן של מחרוזות תרגום.

====מסקנה====
ראינו שקיימות מחרוזות תרגום עבורן <math>\bigcup_i A(x) \oplus t_i = R</math>. לכן ניתן לכתוב 
:<math>\exists t_1, t_2,...,t_|r| \ \forall r \in R \bigvee_{1 \leq i \leq |r|}M(x;r\oplus t_i) = 1</math>
ובגלל ההפיכות של xor, כלומר <math>a \oplus a = \bar 0</math>, אז אנחנו יודעים מלמה 1 שלכל r תהיה מחרוזת <math>t_i </math> כך ש-<math>t_i \oplus r \in A(x)</math>, ולכן המכונה תקבל כל מילה בשפה. לעומת זאת, עבור מילים שאינן בשפה קיים r שאין עבורו שום תרגום ל-<math>A(x)</math>, ולכן ההגדרה שלמעלה תקינה. היא גם הגדרה מהצורה של <math>\Sigma_2</math>, ומכאן נובע ש-<math>L\in \Sigma_2 \cap \Pi_2 </math>, שהרי BPP סגורה למשלים.

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

קטגוריה:מחלקות סיבוכיות