בדיקת מונוטוניות של פונקציות בוליאניות Oded Goldreich, Shafi Goldwasser, Eric Lehman, Dana Ron, and Alex Samorodnitsky עמית ויסמן אסף זריצקי בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות תוכן ההרצאה הגדרת מונוטוניות של פונקציה בוליאנית אלגוריתם לבדיקת מונוטוניות והוכחת נכונות חסמים נוספים הכללת הבעיה לכיוונים שונים בדיקת מונוטוניות של פונקציות בוליאניות
מונוטוניות של פונקציות בוליאניות עבור x = (x1…xn),y = (y1…yn) {0,1}n, נסמן x ‹ y אם לכל i xi yi, וקיים i כך ש- xi<yi f :{0,1}n{0,1} תקרא מונוטונית אם f (x) f (y) לכל x ‹ y בדיקת מונוטוניות של פונקציות בוליאניות
דוגמא – פונקציה מונוטונית (f1) ? f1 (0000) = 0 f1 (0001) = 1 f1 (0010) = 0 f1 (0011) = 1 f1 (0100) = 0 f1 (0101) = 1 f1 (0110) = 0 f1 (0111) = 1 f1 (1000) = 0 f1 (1001) = 1 f1 (1010) = 0 f1 (1011) = 1 f1 (1100) = 0 f1 (1101) = 1 f1 (1110) = 0 f1 (1111) = 1 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות f1 – יחס סדר חלקי 1 1111 0111 1011 1101 1110 0101 1001 0110 0011 1010 1100 0001 0010 0100 1000 0000 בדיקת מונוטוניות של פונקציות בוליאניות
דוגמא – פונקציה לא מונוטונית (f2) בדיקת מונוטוניות של פונקציות בוליאניות
f2 – לא מקיימת תכונת סדר חלקי 1 1111 0111 1011 1101 1110 0101 1001 0110 0011 1010 1100 0001 0010 0100 1000 0000 בדיקת מונוטוניות של פונקציות בוליאניות
מרחק של פונקציה ממונוטוניות בהינתן f , g:{0,1}n {0,1} נסמן ב-dist(f,g) את החלק היחסי של הקלטים שערכי f ו-g בהם שונים. נסמן ב-εM(f) את המרחק של f לקבוצת הפונקציות המונוטוניות: נאמר ש-f ε -רחוקה מלהיות מונוטונית אם ε εM(f) בדיקת מונוטוניות של פונקציות בוליאניות
דוגמא: f1 , f2 (מרחק מ- פונקציה/מונוטוניות) הפעם:dist(f1,f2) = εM(f) = 1/16 אם ε = 1/20 אזי f2 ε-רחוקה מלהיות מונוטונית בדיקת מונוטוניות של פונקציות בוליאניות
אלגוריתם "בוחן מונוטוניות" אלגוריתם A יקרא "בוחן מונוטוניות" אם על פונקציה מונוטונית יענה "כן" בהסתברות 2/3, ועל פונקציהε -רחוקה ממונוטונית יענה "לא" בהסתברות 2/3 נראה אלגוריתם אקראי בוחן מונוטוניות שסיבוכיות זמן הריצה ומספר השאילתות שלו הוא O(n/ε) מה האלגוריתם המתבקש ע"פ ההרצאות הקודמות? בדיקת מונוטוניות של פונקציות בוליאניות
ניסיון ראשון: בדיקת מונוטוניות בעזרת דוגמאות אקראיות טענה 1: עבור ε = O(n2/3), כל אלגוריתם "בוחן מונוטוניות" שמשתמש בדוגמאות אקראיות חייב להשתמש בלפחות O(2n/ ε) אינטואיציה: יש הרבה זוגות קלטים שאינם ברי-השוואה מסקנה: סיבוכיות בוחן מונוטוניות שמשתמש בדוגמאות שנבחרו בצורה אחידה ובלתי-תלויה גבוה בהרבה מ-O(n/ε) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות האלגוריתם קלט: n, ε , וגישה של אוב לפונקציה f :{0,1}n {0,1} חזור על שלבים 1-3 n/ ε 2 פעמים 1. בחר באקראי x = x1x2x3…xn {0,1}n , i {1,….,n} 2. חשב את y ע"י הפיכת הביט ה-i ב-x 3.אם x,y,f(x),f(y) מהווים דוגמא לאי-מונוטוניות – החזר "לא“ אם הגעת לסוף הלולאה ללא דחייה, החזר "כן" בדיקת מונוטוניות של פונקציות בוליאניות
הרעיון מאחרי האלגוריתם הרעיון העיקרי של האלגוריתם הוא שבעזרת בדיקה מקומית אקראית (צעד 3) ניתן לבסס את ההשערה לגבי קיום של תכונה גלובלית (מרחק f מקבוצת הפונקציות המונוטוניות) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות שלבים בהוכחת הנכונות נכונות האלגוריתם טענה 2 למה 3 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות סימונים והגדרות הגדרה: זוג (x,y) , x,y {0,1}n עם מרחק Hamming שווה ל-1 (שונים בביט יחיד) שלא מקיים את תכונת המונוטוניות תחת f (כלומר(x ‹ y & f(x) > f(y) יקרא "זוג פושע תחת f" סימון: {x ‹ y ושונים בביט יחיד :(x,y)}U = , קבוצת "הזוגות השכנים" סימון: { (x,y) זוג פושע תחת f :(x,y)}Ucrime(f) = , קבוצת הזוגות הפושעים תחת f סימון: נסמן ב-M(f) את החלק היחסי של קבוצת הזוגות הפושעים ב-U (©Enav&Yinnon) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות דוגמא: f2 (Ucrime , M) |U| = ½ • 2n • n = 32 Ucrime = {(1000,1010) , (1000,1100)} M(f) = 2/32 = 1/16 1 1111 1 1 1 0111 1011 1101 1110 1 1 1 0011 0101 0110 1001 1010 1100 1 1 0001 0010 0100 1000 0000 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות טענה 2 לכלf :{0,1}n {0,1} מתקיים: נניח שהוכחנו את הטענה... בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות שלבים בהוכחת הנכונות נכונות האלגוריתם טענה 2 למה 3 בדיקת מונוטוניות של פונקציות בוליאניות
האלגוריתם הוא "בוחן מונוטוניות" אם f מונוטונית אז ברור שהאלגוריתם מחזיר "כן" בהסתברות 1 מה קורה כאשר f ε-רחוקה ממונוטונית? ההסתברות להגריל "זוג פושע" בניסיון יחיד = M(f) ההסתברות לא להגריל "זוג פושע" בניסיון יחיד = 1 - M(f) ההסתברות שהאלגוריתם יענה "כן" = טענה 2 ε εM(f) 0 1 (1 – )1/ < 1/e בדיקת מונוטוניות של פונקציות בוליאניות
נקפוץ ישר למים... (הוכחת טענה 2) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות שלבים בהוכחת הנכונות נכונות האלגוריתם טענה 2 למה 3 בדיקת מונוטוניות של פונקציות בוליאניות
הרעיון מאחרי הוכחת טענה 2 נשתמש בטכניקה שלshifting (הזזה) של פונקציות בוליאניות – שינוי של ערך הפונקציה על חלק מהקלטים "נזיז" את הפונקציה כדי להפוך אותה למונוטונית, ונספור את מספר השינויים שנעשו (מספר הקלטים שערך הפונקציה עליהם השתנה) נשתמש בקשר בין מספר השינויים למרחק של הפונקציה לקבוצת הפונקציות המונוטוניות בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות קווים להוכחת טענה 2 לפי הגדרת εM(f), מספר השינויים חייב להיות לפחות εM(f)•2n, מצד שני, נחסום מלמעלה את מספר השינויים ע"י M(f) • 2n • n ומכאן נקבל את החסם: M(f) • 2n • n מס' שינויים εM(f)•2n ולכן, בדיקת מונוטוניות של פונקציות בוליאניות
הגדרות: מונוטוניות במימד/ים לכל i {1,…,n}, נאמר כי f מונוטונית במימד i, אם לכל {0,1}i-1, ו- {0,1}n-i מתקיים f (0) f (1) לכל T{1,…,n}, נאמר כי f מונוטונית במימדים T, אם לכל i T, f מונוטונית במימד i בדיקת מונוטוניות של פונקציות בוליאניות
דוגמא: f2 (מונוטוניות במימד) בדיקת מונוטוניות של פונקציות בוליאניות
הגדרה: אופרטור הזזה במימד נגדיר אופרטור הזזה Si שמעביר כל פונקציה f לפונקציה Si(f) שמונוטונית במימד ה-i: לכל i {1,…,n} הפונקציה Si(f):{0,1}n{0,1} מוגדרת כנ"ל: לכל {0,1}i-1, ולכל {0,1}n-i, אם f (0) > f (1) אזי: Si(f) (0) = f (1) Si(f) (1) = f (0) אחרת: Si(f) = f על הקלטים 0, ו- 1 בדיקת מונוטוניות של פונקציות בוליאניות
דוגמא: f2 (אופרטור הזזה במימד) S1(f2) = f2 S3(f2)(1000) = 0, S3(f2)(1010) = 1 S3(f2) מונוטונית במימד 3 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות סימון: Di(f) נסמן ב- Di(f) את מספר הקלטים ש-Si משנה את f עליהם, Di(f) = |{x: Si(f)(x) f(x)}| נשים לב: 1. (מס' הזוגות הפושעים ב- Ucrime ששונים בביט ה-i) Di(f) = 2 • 2. i=1,…,n Di(f) = 2 • |Ucrime| בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות למה 3 לכל f :{0,1}n {0,1} , ו-j {1,…,n} מתקיים: אם f מונוטונית במימדים T{0,…,n} אזי Sj(f) מונוטונית במימדים T{j} לכל 1 i j n, Di(Sj(f)) Di(f) נשים לב שאם החלק השני של הלמה מתקיים אז גם החלק הראשון: אם f מונוטונית במימדים T, ו- T i אזי לפי החלק השני, Di(Sj(f)) Di(f) = 0 Sj(f) מונוטונית במימדים T{j} לשם הנוחות נוכיח את שני החלקים בנפרד בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות דוגמא: S4(S3(S2(S1(f2)))) f2 (0000) = 0 f2 (0001) = 1 f2 (0010) = 0 f2 (0011) = 1 f2 (0100) = 0 f2 (0101) = 1 f2 (0110) = 0 f2 (0111) = 1 f2 (1000) = 0 f2 (1001) = 1 f2 (1010) = 0 f2 (1011) = 1 f2 (1100) = 1 f2 (1101) = 1 f2 (1110) = 0 f2 (1111) = 1 S1(f2) = f2 S2(S1(f2)) בדיקת מונוטוניות של פונקציות בוליאניות
דוגמא: S4(S3(S2(S1(f2)))) (המשך) פונקציה מונוטונית בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות דוגמא לריצה של התהליך 1 1 1111 1 1 1 0111 1011 1101 1110 1 1 1 0011 0101 0110 1001 1010 1100 1 1 0001 0010 0100 1000 0000 נפעיל את S1(f) ללא שינוי נפעיל את S2(S1(f)) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות דוגמא לריצה של התהליך 2 1 1111 1 1 1 0111 1011 1101 1110 1 1 1 1 0011 0101 0110 1001 1010 1100 1 0001 0010 0100 1000 0000 נפעיל את S3(S2(S1(f))) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות דוגמא לריצה של התהליך 3 1 1111 1 1 1 1 0111 1011 1101 1110 1 1 1 0011 0101 0110 1001 1010 1100 1 0001 0010 0100 1000 0000 נפעיל את S4(S3(S2(S1(f))) ) ללא שינוי סה"כ 4 שינויים עד לפונקציה מונוטונית בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות שלבים בהוכחת הנכונות נכונות האלגוריתם טענה 2 למה 3 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הוכחת טענה 2 בעזרת למה 3 תהי g = Sn(Sn-1(…(S1(f))…)). מהחלק הראשון של הלמה g מונוטונית, ולכן εM(f) dist(f,g) (1) מהחלק השני של הלמה: Di(Si-1(…(S1(f))…)) Di(Si-2(…(S1(f))…)) … Di(f) (2) לכן, (3) dist(f,g) 2-n i=1,…,n Di(Si-1(…(S1(f))…)) 2-n i=1,…,n Di(f) הראנו מעבר ל-g (2) בדיקת מונוטוניות של פונקציות בוליאניות
הוכחת טענה 2 בעזרת למה 3 (המשך) (3) & i=1,…,n Di(f) dist(f,g) • 2n εM(f) • 2n (4) מהגדרת Di(f): i=1,…,n Di(f) = 2 • |Ucrime| = 2 • M(f) • |U| = M(f) • 2n • n (5) (4) & (5) M(f) • 2n • n εM(f) • 2n מ.ש.ל בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות שלבים בהוכחת הנכונות נכונות האלגוריתם טענה 2 למה 3 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הוכחת למה 3 – אבחנה חשובה לכל i, i j, השינויים שנגרמים במימד ה i של f בעקבות ההפעלה של Sj לא קשורים לשאר המימדים. בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הוכחת למה 3 – חלק 1 ברור ש-Sj(f) מונוטונית במימד j. נראה ש-Sj(f) מונוטונית לכל i T: נקבע i T, נניח בה“כ ש-i < j. נקבע {0,1}i-1, {0,1}j-i-1, ו- {0,1}n-j. נגדיר: f `(x,y) = f ( x y ) x,y {0,1} ברור ש-f ` מונוטונית במימד 1 (i). צ"ל שגם S2(f `) נתבונן במטריצה בגודל 2x2 מעל {0,1}, שערך התא (x,y) שווה ל-f `(x,y) i j בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הוכחת למה 3 – חלק 1 (המשך) כעת ניתן לתרגם את חלק 1 לטענה שקולה: אם ממיינים את השורות של מטריצה בגודל 2x2 מעל {0,1} כאשר העמודות כבר ממויינות מלכתחילה, אזי העמודות נשארות ממויינות. הוכחה: בדיקת כל האפשרויות הערה: קיימת גם הוכחה מוכללת לגבי מטריצות בגודל dxd מעל {0,1} בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הוכחת למה 3 – חלק 2 נקבע i,j,,, כמו מקודם, f ` תוגדר כמו קודם. וצריך להראות ש- D2(S1(f `)) D2(f `). כעת חלק 2 שקול לטענה: אם ממיינים את העמודות של המטריצה מחלק 1, אזי מספר השורות הלא-ממויינות לא יכול לגדול (מס' השורות הלא ממויינות D2 = 2 •) הוכחה: בדיקת כל האפשרויות הערה: קיימת גם הוכחה מוכללת לגבי מטריצות בגודל dx2 מעל {0,1} ( הטענה שקרית למטריצה dxd מ d 4 מעל{0,1} ולמטריצות 2x2 לא בינאריות) מ.ש.ל בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות טענה 4 לכל f :{0,1}n{0,1} , εM(f) M(f)/2 מסקנה: הערה: אפשר להגיע גם לחסם מלעיל וגם לחסם מלרע (עד לפקטור קבוע) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הוכחת טענה 4 נקבע f ונתבונן בקבוצת "הזוגות הפושעים" Ucrime על מנת להפוך את f למונוטונית עלינו לעדכן אותה על לפחות קלט אחד בכל "זוג פושע" מכיוון שכל מחרוזת "משתתפת" בלכל היותר n "זוגות פושעים" מספר הקלטים שחייבים לשנות (εM(f) • 2n) הוא לפחות: ולכן, בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הוכחת חסם תחתון נראה שאם ε=O(n-1.5) אזי כל בודק מונוטוניות שמשתמש בבדיקות אקראיות בלבד משתמש בלפחות (2n/ε) בדיקות כאלה הגדרת "גרף שכבות " בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות בניית "התאמות" נסתכל על שתי שכבות k ,k-1 כך ש- k=(n+1)/2 גודל השכבות : (n-0.5*2n) נסמן ב-M התאמה בין השכבה הקטנה לתת קבוצה של השכבה הגדולה יותר M={(vi,ui):i=1….t} Lk-1 X Lk t = | Lk-1| 0111 1011 1101 1110 0101 1001 0110 0011 1010 1100 1 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות בניית "התאמות" נבחר תת קבוצה של ההתאמה M , ={(vij,uij)} M` כך שאין צלעות בגרף המקורי בין זוגות הקודקודים vik,uij עבור kj. כל צלע ב – M` "פוסלת " לכל היותר (k-1)+(n-(k-1)+1) < n צלעות בהתאמה M המקורית ולכן |M`| t/n = (n-1.5*2n) נבנה התאמה M`` על ידי קיצוץ M` עד לגודל 2* ε *2n נחלק את M`` לשתי קבוצות שוות A , B 1 1 1 0111 1110 0011 1010 0111 1101 1110 1001 0011 1010 1100 1 0111 1011 1101 1110 0101 1001 0110 0011 1010 1100 1 0111 1101 1110 1001 1011 0101 0110 0011 1010 1100 1 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הגדרת "משפחות" בעזרת M`` נגדיר שתי משפחות של פונקציות . 1.פונקציה f במשפחה הראשונה מוגדרת כך : עבור כל (v,u) A נגדיר f(v)=1 f(u) = 0 עבור כל (v,u) B נגדיר f(v)=0 f(u) = 1 עבור x כך ש- w(x) k f(x) = 1 עבור x כך ש- w(x) k-1 f(x) = 0 2. פונקציה f במשפחה השנייה מוגדרת כך : עבור כל (v,u) A נגדיר f(v)=1 f(u) = 1 עבור כל (v,u) B נגדיר f(v)=0 f(u) = 0 בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות משפחה 1 משפחה 2 1 1 1111 1111 1 1 1 1 1 1 0111 1011 1101 1110 0111 1011 1101 1110 1 1 0011 0101 0110 1001 1010 1100 0011 0101 0110 1001 1010 1100 0001 0010 0100 1000 0001 0010 0100 1000 0000 A B 0000 קל לראות שכל פונקציה במשפחה השניה היא מונוטונית , וכל פונקציה במשפחה הראשונה היא εM(f) = |B|/2n בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות למה זה טוב ? נוכיח את החסם שלנו ע"י כך שנראה שכל אלגוריתם שבוחר o(|B|) דוגמאות לא יכול להבחין בין פונקציה מהמשפחה הראשונה (רחוקה מספיק מהפונקציה המונוטונית הקרובה ביותר אליה - כזו שהוא צריך לדחות בסבירות של 2/3) ובין פונקציה מהמשפחה שניה (פונקציה מונוטונית שהוא צריך לקבל בסבירות של 2/3) . בדיקת מונוטוניות של פונקציות בוליאניות
איך נוכל להטעות את האלגוריתם ? נבחר בצורה אקראית אחידה פונקציה מכל משפחה ונפעיל כל אחת מהפונקציות על סידרה של qמחרוזות . ההבדל בין התוצאות שנקבל מהפעלת כל פונקציה על המחרוזות תלוי בבחירת B (מתוך M``/2 אפשרויות) ובחירת המחרוזות . ההבדל יהיה רק בתוצאות של מחרוזות שיש ביניהן צלע / התאמה ב – M`` . הסבירות לזה היא q מעל 2 כפול הסבירות שזוג ספציפי מופיע ב- M`` (שהיא |M``|/22n ) . לכן אם נבחר q < 2n/3|M``| נקבל שההבדל בין שתי הבחירות יהיה קטן מ 1/6 ולכן האלגוריתם ייכשל . בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות הכללת הבעיה והפתרון פונקציה שאינה בוליאנית→{1,…,d} f(x):{0,1}n פונקציה על תחום שאינו בינארי x ו- | |= n במקום לחפש מונוטוניות, נחפש unateness של הפונקציה. פונקציה שלכל i מתקיים בדיוק אחד התנאים הבאים : 1.כאשר הביט ה-i מתחלף מ-0 ל-1 ערך הפונקציה לא יורד . 2. כאשר הביט ה i מתחלף מ 1 ל 0 ערך הפונקציה לא יורד . (מונוטוניות היא מקרה פרטי של unateness ) בדיקת מונוטוניות של פונקציות בוליאניות
בדיקת מונוטוניות של פונקציות בוליאניות