תרגול 7 B-Trees Probability intro152 26.01.2020.

Slides:



Advertisements
מצגות קשורות
ילדי גן "יסמין" וגן פרפר נחמד" נוטעים יחד עם חיילי סמ"ג חוף
Advertisements

כרטיסי מידע להכרת הציפורים שבקרבת משכנות האדם
الاشكال الهندسية צורות הנדסיות
עמל שפרעם-מודל להתמודדות עם תלמידים תת משיגים
وظائف الفجوة الخلوية وظائف الفجوة المحافظة علي استمرارية ضغط الامتلاء Turger pressure للخلية وهو هام جدا للتركيب الدعامي وللتحكم في حركة الماء.
מגמת ניהול עסקי "קציר".
מיפוי הנשים הפלסטיניות הכותבות אחרי 1948
תמליל מצגת:

תרגול 7 B-Trees Probability intro152 26.01.2020

מוטיבציה מבנה הזיכרון: מהיר איטי intro152 26.01.2020

עץ B - תכונות t = the minimal rank of a B-Tree (דרגת המינימום). Each node except the root, has at least t-1 keys and at most 2t-1 keys All the leaves are in the same level (= the height of the tree, h) If X is an inner node with nx keys (K1,…Knx) in ascending order, then X has nx+1 children (C1,…Cnx+1) If ki is the i'th key in X, then all keys of Ci are smaller than ki, and all keys of Ci+1 are larger than ki Each node x has the following fields: nx - the number of keys in X leaf(X) - true if x is a leaf and false otherwise intro152 26.01.2020

עץ B תמיד דוחפים את העץ כלפי מעלה intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z קודקוד מלא (3=2t-1 קודקודים) – צריך לפצל A B C intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z קודקוד מלא (4=2t קודקודים) – צריך לפצל A A B C B C intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z מסלול הכנסת קודקוד חדש B A C D intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z מסלול הכנסת קודקוד חדש B קודקוד מלא – צריך לפצל A C D G intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z מסלול הכנסת קודקוד חדש B קודקוד מלא – צריך לפצל D A C G intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z מסלול הכנסת קודקוד חדש B D A C G H intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z מסלול הכנסת קודקוד חדש קודקוד מלא – צריך לפצל B D A C G H K intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z מסלול הכנסת קודקוד חדש קודקוד מלא – צריך לפצל B D H A C G G H K K intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z קודקוד מלא – צריך לפצל מסלול הכנסת קודקוד חדש B D H A C G K M intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z קודקוד מלא – צריך לפצל מסלול הכנסת קודקוד חדש D A C B G K M H intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z קודקוד מלא – צריך לפצל מסלול הכנסת קודקוד חדש D A C B H K K M R M G R intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z מסלול הכנסת קודקוד חדש D A C B H M K G R W intro152 26.01.2020

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ B עם t=2 (העץ ריק בהתחלה): A, B, C, D, G, H, K, M, R, W, Z D A C B H M K G R W Z intro152 26.01.2020

שאלה 2 כעת, מחקו מהעץ את G, ולאחר מכן את M D A C B H M K G R W Z intro152 26.01.2020

מחיקה מעץ B Delete(k) (Intuition) Go down from the root to a node containing k while making manipulations on the tree to ensure that the current node X (except the root node) on the search path has at least t keys (the ancestor of X may have only t-1 keys after the manipulations on X). Thus, when the Delete function gets to a node containing k, the node will have at least t keys. intro152 26.01.2020

מחיקה מעץ B Delete (Node X, Key k) Delete(k) Algorithm Delete (Node X, Key k) If node X has less than t keys (t-1 keys): a. if node X has a sibling Y with t keys: lend one key from it (key k goes to the father node of X and Y, replaces key k' such that X and Y are its child pointers and the key k' is added to X). b. node X has both siblings with only t-1 keys: merge X and one of its siblings Y, while adding the key k from the father node as a median key (X and Y are child pointers of k), into new node W, remove k and pointers to X and Y from the father node, add pointer to the newly created node W to the father node of X and Y. intro152 26.01.2020

מחיקה מעץ B Delete (Node X, Key k) Delete(k) Algorithm Delete (Node X, Key k) 2. if k is in X and X is an internal node: a. if the child node Y that precedes k in X has at least t keys: -k'=Max(Y) //find maximal key k' in subtree rooted in Y -Delete(Y, k') -replace k with k' in X b. symmetrically, if the child node Z that follows k in X has at least t keys: -k'=Min(Z) //find minimal key k' in subtree rooted in Z -Delete(Z, k') c. both Y and Z have t-1 keys -merge Y, k and Z into one node W -delete k from X and pointers to Y and Z and add instead pointer to W -Delete(W,k) intro152 26.01.2020

מחיקה מעץ B Delete (Node X, Key k) Delete(k) Algorithm Delete (Node X, Key k) 3. else if k is in X and X is a leaf node: -delete k from X -return 4. else // k is not in X -find child node Yi+1 of X such that keyi(X)<k<keyi+1(X) // the pointer between keyi(X) and keyi+1(X) points to Yi+1 -Delete (Yi+1, k) intro152 26.01.2020

שאלה 2 כעת, מחקו מהעץ את G, ולאחר מכן את M D A C B H M K G R W Z intro152 26.01.2020

שאלה 2 מחיקת G D A C B H M K G R W Z זהו השורש, לכן אין חשיבות לגודלו (אם זה לא היה השורש היינו צריכים לבצע את 1 כיוון שיש פחות מt=2 מפתחות). G לא נמצא כאן, לכן נבצע את 4. D A C B H M K G R W Z intro152 26.01.2020

שאלה 2 מחיקת G D A C B H M K G R W Z יש מספיק מפתחות בקודקוד. intro152 26.01.2020

שאלה 2 מחיקת G D A C B H M K G R W Z יש פחות מt=2 מפתחות. כיוון שאי-אפשר להלוות מהאחים השכנים, נבצע איחוד עם האח הימני. A C B H M K G R W Z intro152 26.01.2020

שאלה 2 מחיקת G D A C B H M K G R W Z יש פחות מt=2 מפתחות. כיוון שאי-אפשר להלוות מהאחים השכנים, נבצע איחוד עם האח הימני. A C B H M K G R W Z intro152 26.01.2020

שאלה 2 מחיקת G D A C B M G H K R W Z intro152 26.01.2020

שאלה 2 מחיקת G D A C B M H K R W Z intro152 26.01.2020

שאלה 2 מחיקת M D A C B M H K R W Z זהו השורש, לכן אין חשיבות לגודלו. G לא נמצא כאן, לכן נבצע את 4. D A C B M H K R W Z intro152 26.01.2020

שאלה 2 מחיקת M D A C B M H K R W Z יש פחות מt=2 מפתחות. כיוון שאי-אפשר להלוות מהאחים השכנים, נבצע איחוד עם האח השמאלי. D A C B M H K R W Z intro152 26.01.2020

שאלה 2 מחיקת M D B M A C H K R W Z יש פחות מt=2 מפתחות. כיוון שאי-אפשר להלוות מהאחים השכנים, נבצע איחוד עם האח השמאלי. D B M A C H K R W Z intro152 26.01.2020

שאלה 2 מחיקת M B D M A C H K R W Z intro152 26.01.2020

שאלה 2 מחיקת M M נמצא בקודקוד, וזהו קודקוד פנימי. לכן נבצע 2. כיוון שבבן השמאלי (של M) יש מספיק מפתחות, נבצע את (2a) (תמיד ננסה קודם לקחת מצד שמאל) B D כעת ממשיכים באופן רקורסיבי למחיקת K מכאן A C H K R W Z intro152 26.01.2020

שאלה 2 מחיקת M(כעת, מחיקת K) B D K A C H K R W Z יש בקודקוד מספיק מפתחות. זהו עלה ו K נמצא, לכן נבצע את 3 (מחיקה פשוטה) B D K A C H K R W Z intro152 26.01.2020

שאלה 2 מחיקת M(כעת, מחיקת K) B D K A C H R W Z intro152 26.01.2020

עוד דוגמאות למחיקות t=3 Delete(2) (case 3) מחיקה פשוטה 56 2 31 7 43 9 52 12 29 15 22 69 56 31 7 43 9 52 12 29 15 22 69 intro152 26.01.2020

עוד דוגמאות למחיקות t=3 Delete(52) (case (2c)) איחוד הבנים 56 31 7 43 9 52 12 29 15 22 69 69 31 7 43 9 56 12 29 15 22 intro152 26.01.2020

עוד דוגמאות למחיקות t=3 Delete(15) (case (1a) and then case 3) 69 31 7 43 9 56 12 29 15 22 12 31 7 9 15 22 29 43 56 69 intro152 26.01.2020

שאלה 3 נתונים שני עצי B, T1 וT2, שניהם עם t=2. נתון בנוסף שכל הערכים בעץ T1 קטנים ממש מכל הערכים בעץ T2. הציעו אלגוריתם יעיל לאיחוד שני העצים לעץ B יחיד. intro152 26.01.2020

שאלה 3 פתרון: ראשית נחשב את גבהי העצים בזמן O(h(T1)+h(T2)) k← min T 2 + max T 1 2 נייצר שורש חדש עם הערך k T1 יהיה הבן השמאלי וT2 הבן הימני כעת נבצע מחיקה של k k T1 T2 intro152 26.01.2020

שאלה 3 פתרון: ראשית נחשב את גבהי העצים בזמן O(h(T1)+h(T2)) מקרה 2: h(T1)>h(T2) ( המקרה h(T1)<h(T2) באופן סימטרי) k← min T 2 + max T 1 2 נרד בעץ T1 ימינה, תוך כדי פיצול קודקודים מלאים (כמו בהכנסה) עד לקודקוד y בגובה h(T2)+1 כיוון שפיצלנו, הקודקוד y אינו מלא. נוסיף לו את k, וT2 יהיה הבן הימני החדש של y. T1 y1 y2 T2 intro152 26.01.2020

שאלה 3 פתרון: ראשית נחשב את גבהי העצים בזמן O(h(T1)+h(T2)) מקרה 2: h(T1)>h(T2) ( המקרה h(T1)<h(T2) באופן סימטרי) k← min T 2 + max T 1 2 נרד בעץ T1 ימינה, תוך כדי פיצול קודקודים מלאים (כמו בהכנסה) עד לקודקוד y בגובה h(T2)+1 כיוון שפיצלנו, הקודקוד y אינו מלא. נוסיף לו את k, וT2 יהיה הבן הימני החדש של y. כעת נבצע מחיקה של k T1 y1 y2 k T2 intro152 26.01.2020

שאלה 4 נתון שT הינו עץ B עם (105+1) מפתחות, וכן שמספר המפתחות המקסימלי בקודקוד הינו 17. לכמה קריאות לכל היותר נדרש על מנת למצוא מפתח נתון כלשהו? פתרון 1: מספר המפתחות המקסימלי בקודוקוד הוא 17 ⇐ 17=2t-1 ⇐ t=9. לכל קודקוד, פרט אולי לשורש, יש לפחות t-1)) מפתחות, ולפחות t בנים. מספר הקודקודים המינימלי בעומק 1 הינו 2 (לשורש לפחות 2 בנים) מספר הקודקודים המינימלי בעומק 2 הינו 2*t מספר הקודקודים המינימלי בעומק 3 הינו 2*t*t ... מספר הקודקודים המינימלי בעומק h(T) הינו 2*th(T)-1 מספר המפתחות בעץ = מספר המפתחות בשורש + מספר המפתחות בעומק 1 + מספר המפתחות בעומק 2 + ... + מספר המפתחות בעומק h(T). intro152 26.01.2020

שאלה 4 נתון שT הינו עץ B עם (105+1) מפתחות, וכן שמספר המפתחות המקסימלי בקודקוד הינו 17. לכמה קריאות לכל היותר נדרש על מנת למצוא מפתח נתון כלשהו? פתרון 1, המשך: מספר המפתחות בעץ = מספר המפתחות בשורש + מספר המפתחות בעומק 1 + מספר המפתחות בעומק 2 + ... + מספר המפתחות בעומק h(T). 10 5 +1 ≥1+8∗2+8∗2∗9+8∗2∗9∗9+…+8∗2∗ 9 ℎ 𝑇 −1 =1+8∗2∗ 1+9+…+ 9 ℎ 𝑇 −1 =1+8∗2∗ 9 ℎ 𝑇 −1 9−1 =1+2∗ (9 ℎ 𝑇 −1) ⇒ℎ 𝑇 ≤ log 9 (50001)≈4.92 לכן h(T) ≤ 4. כלומר, יש לכל היותר 5 קריאות (כולל השורש) מהזיכרון. מספר מפתחות מינימלי בשורש מספר המפתחות המינימלי בקודקוד מספר הקודקודים המינימלי ברמה intro152 26.01.2020

שאלה 4 שאלה נוספת (אם יש זמן): מהו מספר הרמות המינימלי של העץ? נתון שT הינו עץ B עם (105+1) מפתחות, וכן שמספר המפתחות המקסימלי בקודקוד הינו 17. לכמה קריאות לכל היותר נדרש על מנת למצוא מפתח נתון כלשהו? פתרון 2: נשתמש בנוסחה שנלמדה בכיתה ℎ 𝑇 ≤ log 𝑡 𝑛+1 2 = log 9 10 5 +2 2 ≈4.92 שאלה נוספת (אם יש זמן): מהו מספר הרמות המינימלי של העץ? intro152 26.01.2020

שאלה 1 - הסתברות את עונה על מבחן סיבירי עם 30 שאלות, בו לכל שאלה 5 תשובות אפשריות. הציון של המבחן מחושב ע"י הנוסחה: Number of answers right – ¼(Number of answers wrong) על 20 שאלות את בטוחה שענית נכון ואילו ב10 השאלות שנותרו הצלחת לעשות אלימינציה ל2 תשובות שבטוח היו שגויות (בכל שאלה). אם ניחשת באופן רנדומלי מ3 התשובות שנותרו בכל שאלה, מהי תוחלת הציון שתקבלי (Expected grade)? פתרון: 20∗1 + 1 3 10− 1 4 ∗ 2 3 ∗10=21.666 intro152 26.01.2020

שאלה 2 - הסתברות יש לכם n קוביות, לכל קוביה n פנים. מהו הסיכוי שבהטלה של כל n הקוביות תקבלו 1,2,3,…,n ? (כלומר בדיוק קוביה אחת תיפול על 1, בדיוק קוביה אחת על 2 וכו') פתרון: ישנן סה"כ nn תוצאות אפשריות. מתוכן, ב n! מהאפשרויות כל קוביה מראה מספר שונה. זהומספר הפרמוטציות האפשריות. לכן ההסתברות הינה 𝑛! 𝑛 𝑛 לאן שואף ביטוי זה כאשר n שואף לאינסוף? intro152 26.01.2020

הסתברות – שאלה 3 הציעו אלגוריתם (יעיל) לביצוע פרמוטציה רנדומלית על מערך נתון. פתרון: RandomeShuffle(A) n=length(A) for i=1 to n A[i] ← A[Random(i, n)] האלגוריתם מבצע פרמוטציה רנדומלית (כלומר, לכל אחת מ n! הפרמוטציות האפשריות יש הסתברות של 1 𝑛! שהאלגוריתם ייצר אותה.) שאלה: מהו זמן הריצה של האלגוריתם הנ"ל? תשובה: O(n) (בהנחה שRandom(i,n) מתבצע בO(1)) intro152 26.01.2020

הסתברות – שאלה 4 הטילו את המטבע פעמיים נתונה פרוצדורה flip_bias() המבצעת הטלת מטבע עם הטיה – כלומר ישנה הסתברות של p ל1 והסתברות (1-p) ל0. אולם, p אינו ידוע. הציעו כיצד ניתן להשתמש בflip_bias() כדי ליצור אלגוריתם flip_fair() המבצע הטלת מטבע הוגנת, כלומר נקבל 1 או 0 בהסברות שווה. (ללא שימוש באקראיות פרט לflip_bias()) פתרון (של פון נוימן): הטילו את המטבע פעמיים אם יצא פעמיים 0 או פעמיים 1 חזרו על שלב 1 אם יצא קודם 0 ואח"כ 1 החזירו 0 אם יצא קודם 1 ואח"כ 0 החזירו 1 הסבר: ההסתברות שבשתי הטלות יצא קודם 0 ואח"כ 1 היא (1-p)p, וההסתברות שבשתי הטלות יצא קודם 1 ואח"כ 0 היא p(1-p). כלומר ההסתברות שהאלגוריתם יחזיר 0 ו1 שווה. האם האלגוריתם חייב לעצור? מה ההסתברות שהאלגוריתם הנ"ל לא עוצר? intro152 26.01.2020

הסתברות – שאלה 5 Let A[1,…,n] be an array of n distinct numbers. If i < j and A[i] > A[j] then the pair (i, j) is called an inversion of A. Suppose that the elements of A are a random permutation of (1,2,..,n). What is the expected number of inversions in A? intro152 26.01.2020

הסתברות – שאלה 5 Solution: Let 𝑋 𝑖𝑗 be an indicator random variable, for each 1≤𝑖, 𝑗≤𝑛, 𝑖<𝑗 . 𝑋 𝑖𝑗 = 1, 𝑖𝑓 𝐴 𝑖 >𝐴 𝑗 0, 𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒 Define 𝑋= 𝑖=1 𝑛−1 𝑗=𝑖+1 𝑛 𝑋 𝑖𝑗 . X is a random variable counting the number of inversions in A. Hence, the expected number of inversions of A is: 𝐸[𝑋] 𝐸 𝑋 =𝐸 𝑖=1 𝑛−1 𝑗=𝑖+1 𝑛 𝑋 𝑖𝑗 = 𝑖=1 𝑛−1 𝑗=𝑖+1 𝑛 𝐸 𝑋 𝑖𝑗 = 𝑖=1 𝑛−1 𝑗=𝑖+1 𝑛 1 2 We have Pr[ 𝑋 𝑖𝑗 =1]= 1 2 , because given two distinct random numbers from the {1,…n}, the probability that the first is bigger than the second is 1 2 (Number of all pairs: n(n-1), number of the pairs ai, aj s.t. ai>aj is: n(n-1)/2 ). 𝐸 𝑋 = 𝑖=1 𝑛−1 𝑗=𝑖+1 𝑛 1 2 = 𝑛 2 1 2 = 𝑛 (𝑛−1) 4 [Note, we expect half of all the pairs to be inversions, i.e. Θ(n^2) pairs.]   Question to think about at home: Given an array of integers A suggest an algorithm which finds in O(n log n) worst case (not expected) time the number of inversions in A. intro152 26.01.2020