Presentation is loading. Please wait.

Presentation is loading. Please wait.

Reporting (1-D) Given a set of points S on the line, preprocess them to build structure that allows efficient queries of the from: Given an interval I=[x1,x2]

Similar presentations


Presentation on theme: "Reporting (1-D) Given a set of points S on the line, preprocess them to build structure that allows efficient queries of the from: Given an interval I=[x1,x2]"— Presentation transcript:

1 Reporting (1-D) Given a set of points S on the line, preprocess them to build structure that allows efficient queries of the from: Given an interval I=[x1,x2] find all points in S that are in the interval. 6 17 2 4 5 7 8 12 15 19

2 Reporting (1-D) Build a balanced tree over the points
Concatenate them in a list 6 17 2 4 5 7 8 12 15 19 query: O(log n+k) 7 space: O(n) Let us now talk about a more sophisticated data structure : Range Trees. The 1-D case is straightforward.. Even a sorted list of the points would suffice. But a sorting wouldn’t generalize to higher dimensions, so we use binary trees instead. Build a perfectly balanced binary tree on the sorted list of points.. Input points r stored in leaves (all leaves are linked in a list), each internal node stores the highest value in it’s left subtree. Comparing the query boundary with this value will help us reach the first point falling in the query. Consider the following example … Query time is O(log n + k) for reporting case, and O(log n) for counting. 4 12 2 5 8 15 2 4 5 7 8 12 15 19

3 Reporting (2-D) Given a set of points S on the plane, preprocess them to build structure that allows efficient queries of the from: Given an rectangle R=[x1,x2][y1,y2] find all points in S that are in the rectangle. P3 P8 P5 P2 P6 P4 P7 P1

4 Range Trees (2-D) Maintain the points in a balanced search tree ordered by x-coor. In each internal node maintain the points in its subtree in a balanced search tree ordered by y P3 P3 P2 For the d-D case, we generalize our 1D tree. Start with the first dimension and build a 1-D tree. P2 P4 P4 P1 P1 P1 P2 P3 P4

5 Range Trees (Contd.) P3 P8 P5 P2 P6 P4 P7 P1 P3 P2 P4 P1 P1 P2 P3 P4

6 Range Trees (Contd.) P3 P8 P5 P2 P6 P4 P7 P1 P3 P2 P4 P1 P1 P2 P3 P4

7 Query processing Search by the first dimension gives us O(logn) trees which together contain the output. We search each of these trees to get the answer Construction Time?

8 Analysis (2-D) Space O(nlog n) Query O(log2 n+k)

9 דוגמה למבנה נתונים כזה: עץ +B 3-5
שני סוגי צמתים – צומת פנימי (מכיל מפתחות ומצביעים) מספר המצביעים גדול באחד ממספר המפתחות צומת עלה – מכיל את הנתונים עצמם כל צומת, פרט לשורש תמיד לפחות ½ מלא. נניח מספר בנים מינימלי (פרט לשורש) 3 מספר בנים מקסימלי 5 מספר המפתחות בצומת פנימי מספר הערכים בצומת עלה

10 דוגמה למבנה נתונים כזה: עץ +B 3-5
שני סוגי צמתים – צומת פנימי (מכיל מפתחות ומצביעים) מספר המצביעים גדול באחד ממספר המפתחות צומת עלה – מכיל את הנתונים עצמם כל צומת, פרט לשורש תמיד לפחות ½ מלא. נניח מספר בנים מינימלי (פרט לשורש) 3 מספר בנים מקסימלי 5 מספר המפתחות בצומת פנימי 4 מספר הערכים בצומת עלה

11 דוגמא לעץ +B לכל צומת פנימי עד חמישה בנים (ולא פחות משלושה)
כל הערכים הקטנים ממש מ 25 נמצאים בתת העץ השמאלי ביותר כל הערכים השווים או גדולים מ 25 אך קטנים ממש מ 50 נמצאים בתת העץ השני משמאל כל הערכים השווים או גדולים מ 50 אך קטנים ממש מ 75 נמצאים בתת העץ השליש משמאל כל הערכים הגדולים או שווים 75 נמצאים בתת העץ הרביעי משמאל

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

13 הוספת מפתח 28 לעץ הקודם

14 הוספת מפתח 70 עלה ימני עלה שמאלי 60 65 70 50 55
המפתח שייך לעלה השלישי משמאל (50, 55, 60, 65), כי כל מה שבין 50 ל 75 צריך להיות בתת העץ השלישי. אין מקום, ולכן מפצלים: מוסיפים עלה חדש ומחלקים בינו לבין העלה החדש את המפתחות (1/2 –1/2 בערך). שומרים על הסדר. עלה ימני עלה שמאלי 50 55

15 הוספת מפתח 70 (המשך) לפני אחרי (מעדכנים את הערכים והמצביעים בהורה – היה מקום פנוי בצומת ההורה)

16 הוספת מפתח 95 שוב צריך לפצל, הפעם את העלה (75, 80, 85, 90). במקומו יהיו שני עלים בעץ, בשמאלי יהיו המפתחות (75, 80) ובימני המפתחות (85, 90, 95). אבל עכשיו צריך להוסיף מפתח (ומצביע) להורה. אמורים להיות בו המפתחות: (25, 50, 60, 75, 85). אך יש מקום לארבעה מפתחות בלבד. מה עושים? מפצלים (אך לא בדיוק כמו מקודם)

17 הוספת מפתח 95 (המשך) צומת ימני מפתח אמצעי צומת שמאלי 75 85 60 25 50
מפצלים את (25, 50, 60, 75, 85) לשלושה חלקים: צומת שמאלי, מפתח אמצעי וצומת ימני, באופן הבא: צומת ימני מפתח אמצעי צומת שמאלי 75 85 60 25 50 הצומת הימני והשמאלי יישארו ברמה הנוכחית והמפתח האמצעי עולה לרמה הבאה (אם יש רמה כזאת), שם הוא יוכנס אם יש מקום ואם אין שוב מפצלים ... אם אין יותר לאן לעלות, יוצרים צומת שורש חדש.

18 הוספת מפתח 95 (המשך) אחרי שכבר פיצלנו את העלה, נפצל גם את הרמה הבאה ונארגן את המצביעים. את המפתח האמצעי(60) נשלח עוד רמה כלפי מעלה 60

19 הוספת מפתח 95 (סיום) לא הייתה רמה נוספת, לכן נוצר שורש חדש (מותר שלא יהיה ½ מלא לפחות)

20 יתרונות תהליך החיפוש מהיר לפחות כמו חיפוש בינארי על טבלה, עם היתרון הנוסף של גמישות המבנה. ביישומים פרקטים: העובדה שהרבה מפתחות ומצביעים נמצאים באותו צומת חוסכת פעולות גישה לדיסק תיאורטית (אסימפטוטית) אין יתרון על עצים אדומים-שחורים (למה?)

21 שאלות מציאת מינימום ומקסימום ב-O(1) מיון
האם +B עדיף על B לקבלת רשימה ממוינת? כנ"ל לגבי עוקב? אם המפתחות נשמרים במערך, כיצד נייעל את החיפוש? מדוע לא קיים עץ 1-2?

22 מיון אם עוברים משמאל לימין בעץ +B על העלים נקבל רשימה ממוינת של המפתחות בעץ. נהוג להוסיף מצביעים בין העלים כדי לאפשר מעבר נוח.

23 עץ חיפוש בינארי עם מפתחות בכל העץ
עץ חיפוש בינארי עם מפתחות בעלים

24 הכנסת 5.5

25 הכנסת 15 לעץ אדום-שחור

26 הכנסת 15 לעץ אדום-שחור

27 רוטציה שמאלית (14)

28 רוטציה שמאלית (14)

29 רוטציה ימנית (20)

30 רוטציה ימנית (20)

31 הכנסת 16

32 הכנסת 16

33 דוד שמאלי אדום – שינוי צבעים

34 דוד שמאלי אדום – שינוי צבעים

35 מחיקת 12

36 מחיקת 12

37 רוטציה שמאלית (9)

38 רוטציה שמאלית (9)

39 רוטציה ימנית (11)

40 רוטציה ימנית (11)

41 מחיקת 9


Download ppt "Reporting (1-D) Given a set of points S on the line, preprocess them to build structure that allows efficient queries of the from: Given an interval I=[x1,x2]"

Similar presentations


Ads by Google