AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf ·...

85
35 עץ עץ עץ עץAVL הגדרה הגדרה הגדרה הגדרה: עץAVL הוא עץ חיפוש בינארי שמקיים את התנאי הבא: לכל צומתx בעץ גורם האיזון שלx הוא0 , 1 , או-1 . במילים אחרות: לכל צומתx בעץ, |h(T left(x) ) - h(T right(x) )| 1 בעץAVL שומרים עבור כל צומתx ) בנ וסף לשדות ששומרים בעץ חיפוש בינארי( שדה נוסף שנקראbalance(x) שמכיל את גורם האיזון שלx . לדוגמה, העץ הבא הוא עץAVL : אם נוריד מהעץ הנ" ל את הצומת9 ) או את הצומת14 ( הוא לא יהיה עץAVL 5 3 10 18 14 8 2 7 6 9 1 4

Transcript of AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf ·...

Page 1: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

35

AVLעץ עץ עץ עץ

: הוא עץ חיפוש בינארי שמקיים את התנאי הבאAVLעץ : הגדרההגדרההגדרההגדרה

.1-או , 1, 0 הוא x בעץ גורם האיזון של x לכל צומת

, בעץxלכל צומת : במילים אחרות

|h(Tleft(x)) - h(Tright(x))| ≤ 1

וסף לשדות ששומרים בעץ חיפוש בנ (x שומרים עבור כל צומת AVLבעץ

.x שמכיל את גורם האיזון של balance(x)שדה נוסף שנקרא ) בינארי

:AVLהעץ הבא הוא עץ , לדוגמה

AVLהוא לא יהיה עץ ) 14או את הצומת (9ל את הצומת "אם נוריד מהעץ הנ

5

3 10

18

14

8 2

7

6

9 1

4

Page 2: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

36

.h=θ(log n): אזי. hצמתים וגובה n בעל AVL עץ Tיהי : משפטמשפטמשפטמשפט

הוכחההוכחההוכחההוכחה

בעל המספר הגדול ביותר של צמתיםAVL - את עץ ה Tmax(h) -נסמן ב

את מספר הצמתים בעץn(Tmax(h)( -נסמן ב. h בגובה AVL -מבין כל עצי ה

Tmax(h) .עבור , לדוגמהh=1 העץ Tmax(1) נראה כך

נראה כךTmax(2) העץ h=2עבור

נראה כך Tmax(3) העץ h=3עבור

ברמה הראשונה יש: לפי רמותTmax(h)נספור את מספר הצמתים בעץ

2 צמתים ברמה השלישית יש 2 יש הצומת אחד ברמה השניי2

צמתים וכן

2עד הרמה האחרונה שבה יש , הלאהh-1

לכן נקבל את הנוסחה. צמתים

:הבאה

n(Tmax(h)) = 1 + 2 + 22 + 2

3 + ... + 2

h-1 =

קטןT -מספר הצמתים ב. h צמתים וגובה n כלשהו בעל AVL עץ Tיהי או שווה למספר הצמתים בעץ בעל מספר הצמתים הגדול ביותר מבין כל

≥ n(Tmax(h)) n : ולכן נקבל. hהעצים בגובה

: ו בנוסחה הקודמת ונקבל שמצאנn(Tmax(h))נציב את הערך של

:ולכן

-ולכן הראנו ש

1212

12 hh

−=−−

12n h −≤

h21n ≤+

h)1n(log2 ≤+

)n(log)1n(logh 2 θ=+≥

)n(logh Ω=

Page 3: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

37

בעל המספר הקטן ביותר של צמתיםAVL - את עץ ה Tmin(h) -נסמן ב

). במקרה הזה העץ לא בהכרח יחיד. (h בגובה AVL -מבין כל עצי ה

.Tmin(h) את מספר הצמתים בעץ n(Tmin(h)( -נסמן ב

נראה כך Tmin(1) העץ h=1עבור , לדוגמה

נראה כך Tmin(2) העץ h=2עבור

נראה כך Tmin(3) העץ h=3עבור

נראה כך Tmin(4) העץ h=4עבור

: טענת עזרטענת עזרטענת עזרטענת עזר

n(Tmin(h)) = n(Tmin(h-1)) + n(Tmin(h-2)) + 1

בעל מספר קטן ביותר של צמתיםh בגובה AVL עץ Tיהי : הוכחת טענת העזרהוכחת טענת העזרהוכחת טענת העזרהוכחת טענת העזר

T -מספר הצמתים ב, לפי הגדרה. h בגובה AVL -מבין כל עצי ה

אם הגובה של תת העץ השמאלי. T את שורש העץ r -נסמן ב. n(Tmin(h))הוא

חייב להיות אזי הגובה של שניהםr שווה לגובה של תת העץ הימני של rשל

h-1) אחרת הגובה שלT לא יהיה h( , ואז אפשר להוריד צומת אחת מאחד

שמספר h בגובה AVLולקבל עץ ) לא חשוב מאיזה(משני העצים האלה

דהינו מספר הצמתים בעץ, Tהצמתים בו הוא אחד פחות ממספר הצמתים בעץ

. סתירה, n(Tmin(h))-1שנקבל יהיה

.r שונה מהגובה של תת העץ הימני של rמאלי של לכן הגובה של תת העץ הש והגובה של השני h-1חייב להיות ) נניח השמאלי(ולכן הגובה של אחד מהם

. h-2חייב להיות ) נניח הימני(

כי זה המספר n(Tmin(h-1))מספר הצמתים בתת העץ השמאלי חייב להיות

אז , גדול מזה ואם מספר הצמתים יהיה h-1הקטן ביותר האפשרי לעץ בגובה

בעל מספר קטן ביותר של h בגובה AVL הוא עץ Tנקבל סתירה לכך ש מספר הצמתים בתת העץ הימני חייב , באופן דומה. צמתים

Page 4: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

38

לסיכום הנוסחה שלעיל נובעת מכך שמספר הצמתים . n(Tmin(h-2))להיות

ועוד מספר הצמתים r שווה למספר הצמתים בתת העץ השמאלי של Tבעץ

ל .ש.מ). rעבור השורש ( ועוד אחד rץ הימני של בתת הע :מטענת העזר נקבל

n(Tmin(h)) = n(Tmin(h-1)) + n(Tmin(h-2)) + 1 ≥ n(Tmin(h-2)) + n(Tmin(h-2)) + 1 ≥ n(Tmin(h-2)) + n(Tmin(h-2)) = 2 n(Tmin(h-2))

-ולכן קיבלנו ש

(1) n(Tmin(h)) ≥ 2 n(Tmin(h-2))

: ונקבלh במקום h-2) 1 (-נציב ב

(2) n(Tmin(h-2)) ≥ 2 n(Tmin(h-4))

:נקבל) 2 (-ו) 1 (-מ

(3) n(Tmin(h)) ≥ 22 n(Tmin(h-4))

:באופן כללי נקבל

n(Tmin(h)) ≥ 2i n(Tmin(h-2i))

ונקבל h-2i = 1ים שמקיiנחפש

. אי זוגיh הזה רק עבור i - חייב להיות מספר שלם נוכל להציב את הi -מאחר

: אי זוגי נקבלh -ולכן במקרה ש

ונקבל h-2i = 2 שמקיים i זוגי נחפש h -במקרה ש

: זוגי נקבלh -ולכן במקרה ש

2

1hi

−=

2

1h

min2

1h

min 2))1(T(n2))h(T(n

−−

=≥

2

2hi

−=

2

1h

2

h

2

2h

min2

2h

min 2222))2(T(n2))h(T(n

−−−

≥=⋅=≥

Page 5: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

39

:לנוקיב) אי זוגיh - זוגי וh(בשני המקרים , לסיכום

גדולT -מספר הצמתים ב. h צמתים וגובה n כלשהו בעל AVL עץ Tיהי או שווה למספר הצמתים בעץ בעל מספר הצמתים הקטן ביותר מבין כל

≤ n(Tmin(h)) n : ולכן נקבל. hהעצים בגובה

: בנוסחה הקודמת ונקבלn(Tmin(h)) שמצאנו עבור ןנציב את אי השוויו

:ולכן

-ולכן הראנו ש

-הראנו ש, לסיכום

לללל....שששש....ממממ

2

1h

min 2))h(T(n

2

1h

min 2))h(T(nn

≥≥

2

1h

2n

2

1hnlog2

−≥

)n(log1nlog2h 2 θ=+≤

)n(logh Ο=

)n(logh θ=

Page 6: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

40

AVLדוגמאות לאלגוריתם ההוספה לעץ דוגמאות לאלגוריתם ההוספה לעץ דוגמאות לאלגוריתם ההוספה לעץ דוגמאות לאלגוריתם ההוספה לעץ

LLהוספה עם גלגול הוספה עם גלגול הוספה עם גלגול הוספה עם גלגול : : : : 1111דוגמה דוגמה דוגמה דוגמה

. שבו מעל כל צומת רשום גורם האיזון שלהAVLלהלן עץ

.ל" לעץ הנ2נראה איך מוסיפים צומת

לעץ כמו שמוסיפים לעץ חיפוש בינארי2בשלב ראשון מוספים את

:והתוצאה היא

10

7 20

5 25

4

0

0

+1 -1

0

8

0

+1

6

0

Page 7: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

41

מתחילים לטפס מהצומת שהוספנו כלפי מעלה ומעדכנים גורמי, בשלב הבא -1 או ל 1 משנים אותו ל0אם הגענו לצומת שגורם האיזון שלה היה . איזון

בדוגמה שלנו נשנה. וממשיכים לטפס למעלה, תלוי מאיזה כוון הגענו :ונקבל את העץ הבא+ 1 להיות 5 -ו , 4את גורמי האיזון של הצמתים

10

7 20

5 25

4

0

0

+1 -1

0

8

0

+1

2

6

0

Page 8: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

42

נקרא +. 2 שגורם האיזון שלה הופך להיות 7נגיע לצומת , כשנמשיך לטפס י אסור לנו לשנות את גורם האיזון שלהכ" (צומת בעיתית"לצומת הזאת

נבצע, תבמקום לשנות את גורם האיזון של הצומת הבעייתי+). 2 - שלה ל לפני שנבצע את הגלגול עלינו לקבוע. תסביב הצומת הבעייתי" גלגול"

כדי לקבוע את סוג הגלגול נלך שני צעדים מהצומת". סוג הגלגול"את . לעבר הצומת שהוספנותהבעייתי

LLאז הגלגול הוא מסוג ) ל"כמו במקרה הנ( הלכנו פעמיים שמאלה אם

RRאם הלכנו פעמים ימינה אז הגלגול הוא מסוג

LRאם הלכנו שמאלה ואחר כך ימינה אז הגלגול הוא מסוג

RLאם הלכנו ימינה ואחר כך שמאלה אז הגלגול הוא מסוג

ול מתבצע על הגלג. 7 סביב צומת LLל נבצע גלגול מסוג "בדוגמה הנ ולכן נסתכל עכשיו על תת העץ הזה ונראה איך, 7תת העץ ששורשו .מתבצע הגלגול

10

7 20

5 25

4

+1←0

+1 -1

0

8

0

+1

2

6

0

+1←0

Page 9: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

43

הופכת 5זאת אומרת . ת מסובבים ימינה סביב הצומת הבעייתיLLבגלגול

בנוסף שומרים על כל . 5 הופכת להיות הבן הימני של 7 -להיות השורש ו חוץ מהקשר החדש שמתבטא בציור למעלה על ידי, מקודםהקשרים שהיו :לכן לאחר הגלגול התוצאה היא. 6- ל 7שמחבר בין , והקו המקווק

בתת העץ שהתקבל לאחר , 7כעת נחליף בעץ המקורי את תת העץ ששורשו

: ונקבל את העץ הבא) 5ששורשו הוא (הגלגול

5

4 7

2 6 8

7

5

4

8

0

2

6

0

L

L

Page 10: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

44

כולל התוספת של (10מאחר ולאחר הגלגול הגובה של תת העץ השמאלי של ,2 לפני שהוספנו את צומת 10שווה לגובה של תת העץ השמאלי של ) 2הצומת

ולכן אפשר , )נשאר כפי שהיה בעץ המקורי( הוא נכון 10גורם האיזון של . לעץ2ולסיים את הוספת ) 10 -בלי להמשיך לטפס ל(לעצור את האלגוריתם

5

4 7

2 6 8

10

25

20

Page 11: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

45

RRהוספה עם גלגול הוספה עם גלגול הוספה עם גלגול הוספה עם גלגול : : : : 2222דוגמה דוגמה דוגמה דוגמה

. שבו מעל כל צומת רשום גורם האיזון שלהAVLלהלן עץ

.ל" לעץ הנ30נראה איך מוסיפים צומת

לעץ כמו שמוסיפים לעץ 30כמו בדוגמה הקודמת בשלב ראשון מוספים את

השני מטפסים מהצומת שהוספנו למעלה ומעדכנים חיפוש בינארי ובשלב :והתוצאה היא". צומת בעיתית"עד שמגיעים ל, גורמי איזון

כדי לקבוע את סוג הגלגול, כמו קודם". צומת בעיתית" היא 20כאשר הצומת

מאחר והלכנו פעמים. נלך שני צעדים מהצומת הביתית לעבר הצומת שהוספנו

. RRימינה סוג הגלגול הוא

הופכת 25זאת אומרת . ת מסובבים שמאלה סביב הצומת הבעייתיRRבגלגול בנוסף שומרים על כל . 25 הופכת להיות הבן השמאלי של 20 -להיות השורש ו

אם היה (25 לבן השמאלי של 20חוץ מהקשר החדש בין , הקשרים שהיו מקודםזה מקרה מנוון שאין , אין בן שמאלי25 -למאחר ובדוגמה הזאת ). לו בן כזה

: לכן לאחר הגלגול התוצאה הסופית היא. בו קשר חדש

10

7 20

25

0 -1

0→ -1

-1

30

R

R

10

7 20

25

0 -1

0

-1

Page 12: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

46

LRהוספה עם גלגול הוספה עם גלגול הוספה עם גלגול הוספה עם גלגול : : : : 3333דוגמה דוגמה דוגמה דוגמה

. שבו מעל כל צומת רשום גורם האיזון שלהAVLלהלן עץ

.ל"נ לעץ ה6נראה איך מוסיפים צומת

לעץ כמו שמוסיפים לעץ 6כמו בדוגמאות הקודמת בשלב ראשון מוספים את חיפוש בינארי ובשלב השני מטפסים מהצומת שהוספנו למעלה ומעדכנים

:והתוצאה היא". צומת בעיתית"עד שמגיעים ל, גורמי איזון

10

5 20

4 25

7

0

0

0 -1

0

8

0

+1

9

0 3

0

10

7 25

0 0

-1

30 20

0 0

Page 13: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

47

נלך שני צעדים מהצומת הביתית לעבר כדי לקבוע את סוג הגלגול, כמו קודם

. LRמאחר והלכנו שמאלה ואחר כך ימינה סוג הגלגול הוא . הצומת שהוספנו

דהינו (RRבשלב ראשון מבצעים גלגול מסוג : מורכב משני שלביםLRגלגול על (בשלב שני . תסביב הבן השמאלי של הצומת הבעייתי) מסובבים שמאלה

) דהינו מסובבים ימינה(LL עים גלגול מסוג מבצ) התוצאה של השלב הקודם . תסביב הצומת הבעייתי

: העץ נראה כך5 סביב צומת RRדהינו גלגול , לאחר השלב הראשון

10

5 20

4 25

0

0

-1 ← 0 -1

0

8

0→ -1

+1

9

+1←0 3

0

7

R

L

6

Page 14: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

48

: העץ נראה כך10 סביב צומת LLדהינו גלגול, לאחר השלב השני

. לעץ6כך מסתימת הוספת וב

8

10 5

20

-1

0

9

0

3

7

6

25

10

8 20

5 25

-1

0

9

+1

3 7

6

Page 15: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

49

RLהוספה עם גלגול הוספה עם גלגול הוספה עם גלגול הוספה עם גלגול : : : : 4444דוגמה דוגמה דוגמה דוגמה

.AVLלהלן עץ

. לעץ הזה9נראה איך מוסיפים

ת וביצוע השלב הראשון והשני עד שמגיעים לצומת הבעייתי9לאחר הוספת

:מתקבל העץ הבא

ת סוג הגלגול נלך שני צעדים מהצומת הביתית לעבר כדי לקבוע א, כמו קודם

. RLמאחר והלכנו ימינה ואחר כך שמאלה סוג הגלגול הוא . הצומת שהוספנו

דהינו (LLבשלב ראשון מבצעים גלגול מסוג: מורכב משני שלביםLRגלגול על (בשלב שני . תסביב הבן הימני של הצומת הבעייתי) מסובבים ימינה

) דהינו מסובבים שמאלה(RR מבצעים גלגול מסוג ) הקודםהתוצאה של השלב . תסביב הצומת הבעייתי

: העץ נראה כך10 סביב צומת LLדהינו גלגול , לאחר השלב הראשון

8

10

9

R

L

8

10

Page 16: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

50

: העץ נראה כך8 סביב צומת RRדהינו גלגול , לאחר השלב השני

. לעץ המקורי9וזה העץ הסופי לאחר הוספת

9

10 8

8

9

10

Page 17: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

51

AVLדוגמאות לאלגוריתם ההוצאה מעץ דוגמאות לאלגוריתם ההוצאה מעץ דוגמאות לאלגוריתם ההוצאה מעץ דוגמאות לאלגוריתם ההוצאה מעץ

LLהוצאה עם גלגול הוצאה עם גלגול הוצאה עם גלגול הוצאה עם גלגול : : : : 1111דוגמה דוגמה דוגמה דוגמה

. שבו מעל כל צומת רשום גורם האיזון שלהAVLלהלן עץ

.ל" מהעץ הנ8נראה איך מוציאים צומת

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

:והתוצאה היא

מתחילים לטפס מהאבא של הצומת שהוצאנו כלפי מעלה , בשלב הבא משנים 0אם הגענו לצומת שגורם האיזון שלה היה . ומעדכנים גורמי איזון

מה בדוג. וממשיכים לטפס למעלה, תלוי מאיזה כוון הגענו-1 או ל 1אותו ל שגורם האיזון שלה אחרי ההוצאה הופך להיות 7שלנו אנחנו מגיעים לצומת

10

7 20

5 25

4

0

0

+1 -1

0

+1

6

0

10

7 20

5 25

4

0

0

+1 -1

0

8

0

+1

6

0

Page 18: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

52

סוג הגלגול יקבע באופן . ונבצע סביבה גלגול" צומת בעיתית"נקרא לה +. 2 :הבא

, תאם הצומת שהוצאנו נמצא בתת העץ השמאלי של הצומת הבעייתי •ימני אזי נלך שני צעדים ראשונים לכוון העלה העמוק ביותר בתת העץ ה

. תשל הצומת הבעייתי

אזי , תאם הצומת שהוצאנו נמצא בתת העץ הימני של הצומת הבעייתי •נלך שני צעדים ראשונים לכוון העלה העמוק ביותר בתת העץ השמאלי

. תשל הצומת הבעייתי

:בשני המקרים

LLאם הלכנו פעמיים שמאלה נבצע גלגול

RRאם הלכנו פעמים ימינה נבצע גלגול

LRנו שמאלה ואחר כך ימינה נבצע גלגול אם הלכ

RLאם הלכנו ימינה ואחר כך שמאלה נבצע גלגול

.LLנבחר בגלגול , LR וגם בגלגול LLאם אפשר לבחור גם בגלגול

.RR נבחר בגלגול RL וגם בגלגול RRאם אפשר לבחור גם בגלגול

ולכןLR וגם בגלגול LLבדוגמה שלנו אפשר לבחור גם בגלגול

:7 ת ונבצע אותו סביב הצומת הבעייתיLL בגלגול נבחר

הגלגולים מתבצעים בדיוק באותו אופן כמו הגלגולים שתוארו

סביב הצומתLLולכן לאחר ביצוע גלגול . באלגוריתם ההוספה : התוצאה תהיה7

10

7 20

5 25

4

0

0

+1 -1

0

+1

6

0

L

L

Page 19: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

53

.וע גלגול אחד האלגוריתם עוצרבאלגוריתם ההוספה לאחר ביצ

:באלגוריתם ההוצאה לאחר ביצוע גלגול בודקים

לפני ההוצאה שווה לגובה תאם גובה תת העץ מתחת הצומת הבעייתי • . תת העץ שנוצר לאחר ביצוע הגלגול אזי האלגוריתם עוצר

לפני ההוצאה קטן מגובה תאם גובה תת העץ מתחת הצומת הבעייתי •ר ביצוע הגלגול אזי האלגוריתם ממשיך לטפס תת העץ שנוצר לאח

).ולבצע גלגולים אם צריך(למעלה לעדכן גורמי איזון

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

תת לפני ההוצאה שווה לגובה 7בדוגמה שלנו מאחר וגובה תת העץ ששורשו

.האלגוריתם עוצר, 5העץ שנוצר אחרי הגלגול ששורשו

10

5 20

4 25

-1

0

+1

6

7

Page 20: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

54

LRהוצאה עם גלגול הוצאה עם גלגול הוצאה עם גלגול הוצאה עם גלגול : : : : 2222דוגמה דוגמה דוגמה דוגמה

. שבו מעל כל צומת רשום גורם האיזון שלהAVLלהלן עץ

.ל" מהעץ הנ25נראה איך מוציאים את צומת

ים מעץ חיפוש כמו שמוציא25כמו בדוגמה הקודמת בשלב ראשון מוציאים את בינארי ובשלב השני מטפסים מהאבא של הצומת שהוצאנו למעלה ומעדכנים

:והתוצאה היא". צומת בעיתית"עד שמגיעים ל, גורמי איזון

כדי לקבוע את סוג הגלגול, כמו קודם". צומת בעיתית" היא 10כאשר הצומת

10

7 20

-1 → 0

+1

8

-1

9

0

2

0

-1 L

R

10

7 20

25

-1

0

+1

8

-1

9

0

2

0

-1

Page 21: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

55

עבר העלה העמוק ביותר בתת העץ המנוגד נלך שני צעדים מהצומת הביתית ל לכוון 10 -בדוגמה שלנו נלך שני צעדים החל מ. לזה שממנו הוצאנו את הצומת

. 10 סביב צומת LR ומאחר והלכנו שמאלה ואחר כך ימינה נבצע גלגול מסוג 9

. הוא אותו גלגול כפי שתואר באלגוריתם ההוספהLRגלגול

:התוצאה היא) 7 סביב צומת RRגלגול (LR לאחר השלב הראשון של הגלגול

:התוצאה היא) 10 סביב צומת LLגלגול (LRלאחר השלב השני של הגלגול

לא 8ולכן אם צומת , 1 -במקרה זה גובה תת העץ לאחר ביצוע הגלגול קטן ב

היא8מאחר וצומת . ה ממשיך ומטפס למעלה השורש האלגוריתם היההיית .השורש האלגוריתם עוצר

8

7 10

2 9 20

10

8 20

9 7

2

Page 22: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

56

LL ולאחריו גלגול ולאחריו גלגול ולאחריו גלגול ולאחריו גלגול RLהוצאה עם גלגול הוצאה עם גלגול הוצאה עם גלגול הוצאה עם גלגול : : : : 3333דוגמה דוגמה דוגמה דוגמה

. מעץ זה17נראה איך מוציאים את צומת . AVLלהלן עץ

כמו שמוציאים מעץ 17כמו בדוגמאות הקודמת בשלב ראשון מוציאים את :והתוצאה היא. נאריחיפוש בי

ושסוג הגלגול הנדרש הוא , היא צומת בעיתית20מזהים שהצומת , בשלב שני

RL . לאחר ביצוע הגלגולRLהתוצאה היא :

16

12 20

7

9

13

14 5

25

22

2

L

R

16

12 20

7 25

9

13

14 5

17

22

2

Page 23: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

57

, ממשיכים לטפס כלפי מעלה1 -מאחר וגובה תת העץ לאחר הגלגול קטן במזהים שהיא צומת בעיתית ושסוג הגלגול הנדרש סביבה , 16מת מגיעים לצו

: לאחר ביצוע הגלגול התוצאה היא. LLהוא

. מאחר והגענו לשורש האלגוריתם עוצר

12

22

7

9

13

14

5

20 25 2

L

16

16

12 22

7

9

13

14 5

20 25

2

L

L

Page 24: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

58

.AVLאלגוריתם הוספת איבר לעץ

)w,T(Insert

. x=wבצע . לעץw של עץ חיפוש בינארי להוםפת Insert(T,w)קציה קרא לפונ) 1

2 (y=parent(x)

. סייםy=NULLאם ) 3

: בצע)0 היה w בעץ לפני הוספת yא גורם האיזון בצומת "ז ( Balance(y) = 0אם ) 4 .2ור לצעד וחזBalance(y) = -1 ; x=y: בצעy בן ימני של xאם ) 4.1 .2 וחזור לצעד Balance(y) = +1 ; x=y: בצעy בן שמאלי של xאם ) 4.2

: בצעBalance(y) = +1אם ) 5

. וסייםBalance(y)=0 בצע y בן ימני של xאם ) 5.1 : הציור המתאים למצב זה

y +1

x h+1

h

w

Page 25: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

59

: בצע y בן שמאלי של x אם 5.2) . וסייםyבצומת LL בצע גלגול מסוג x נמצא בתת העץ השמאלי של w אם 5.2.1)

: הציור המתאים למצב זה

.ם וסייy בצומת LR בצע גלגול מסוג x נמצא בתת העץ הימני של w אם 5.2.2)

: הציור המתאים למצב זה

: בצעBalance(y) = -1אם ) 6 . וסייםBalance(y)=0 בצע y בן שמאלי של xאם ) 6.1

: הציור המתאים למצב זה

y -1

x

h+1 h

w

x 0

a b

y +1

c R

L

w

x 0

a b

y +1

c

L

L

w

Page 26: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

60

: בצע y בן ימני של x אם 6.2) . וסייםy בצומת RR בצע גלגול מסוג x נמצא בתת העץ הימני של w אם 6.2.1)

: הציור המתאים למצב זה

. וסייםy בצומת RL בצע גלגול מסוג xעץ השמאלי של נמצא בתת הw אם 6.2.2)

: הציור המתאים למצב זה

x 0 a

b

y -1

c

R

w

L

x 0 a

b

y -1

c

R

w

R

Page 27: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

61

.AVLעץ אלגוריתם הוצאת איבר מ

)z,T(Delete

הצומתwיהי . מהעץzי להוצאת של עץ חיפוש בינארDelete(T,z)קרא לפונקציה ) 1 w=z היה לכל היותר בן אחד אזי z-אם ל. ( שהוצא מהעץ

). w=Minimum(Tright(z)) אחרת

.x=w: בצע 2 (y=parent(x)

. סייםy=NULLאם ) 3

: בצע)0 היה wני הוצאת בעץ לפyא גורם האיזון בצומת "ז ( Balance(y) = 0אם ) 4

. וסייםBalance(y) = +1: בצעy בן ימני של xאם ) 4.1 .וסיים Balance(y) = -1: בצעy בן שמאלי של xאם ) 4.2

: בצעBalance(y) = +1אם ) 5

. 2 וחזור לצעד Balance(y)=0 ; x=y בצע y בן שמאלי של xאם ) 5.1 : הציור המתאים למצב זה

y +1

x h+1

w

h

Page 28: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

62

a=left(y) ; b=left(a) ; c=right(a)יהיו : בצע y בן ימני של x אם 5.2)

. y בצומת LLבצע גלגול מסוג H(Tb) ≥ h(Tc) אם5.2.1)

. לא השתנה סייםTy אם לאחר הגלגול גובה העץ

.2 וחזור לצעד x=y: אחרת בצע

: הציור המתאים למצב זה

.y בצומת LRבצע גלגול מסוג H(Tb) < h(Tc) אם5.2.2)

.2ר לצעד וחזוx=y: בצע

: הציור המתאים למצב זה

: בצעBalance(y) = -1אם ) 6

. 2 וחזור לצעד Balance(y)=0 ; x=y בצע y בן ימני של xאם ) 6.1 : הציור המתאים למצב זה

y -1

x

h+1 h

w

a

b c

y +1

x

w

L

R

a

b c

y +1

x

w

L

L

Page 29: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

63

a=right(y) ; b=left(a) ; c=right(a)יהיו : בצע y בן שמאלי של x אם 6.2)

. y בצומת RRבצע גלגול מסוג H(Tc) ≥ h(Tb) אם6.2.1)

. לא השתנה סייםTy אם לאחר הגלגול גובה העץ

.2לצעד וחזור x=y: אחרת בצע

: הציור המתאים למצב זה

.y בצומת RLבצע גלגול מסוג H(Tc) < h(Tb) אם6.2.2)

.2 וחזור לצעד x=y: בצע

: הציור המתאים למצב זה

a

y -1

b c

x

R

L

w

a

y -1

b c

x

R

R

w

Page 30: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

64

בהוספה LLגלגול

:LL לפני ביצוע הגלגול מסוג 5.2.1 להלן המצב המתואר בצעד

.h(Ta)=hדהינו , w לפני שהוספנו את Ta את הגובה של תת העץ h - נסמן ב

w :(h(Tb)=h, h(Tc)=h, h(Ty)=h+2וללא הוספת ( אזי נקבל שלפני ביצוע הגלגול

: נקבלy בצומת LL לאחר ביצוע גלגול

ובה תת העץ מכיוון שג ).wכולל את הצומת (h(Tx)=h+2 לאחר ביצוע הגלגול הגובה .אלגוריתם ההוספה עוצר, w שסביבו נעשה הגלגול נשאר כמו שהיה לפני הוספת

a

c b

x 0

y 0

L

w

x 0

a b

y +1

c

L

L

w

Page 31: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

65

בהוספה RRגלגול

:RR לפני ביצוע הגלגול מסוג 6.2.1 להלן המצב המתואר בצעד

: נקבלy בצומת RRאחר ביצוע גלגול ל

.אלגוריתם ההוספה עוצר, wמכיוון שגובה תת העץ שסביבו נעשה הגלגול נשאר כמו שהיה לפני הוספת

y 0

a b

x 0

c

w

x 0 a

b

y -1

c

R

w

R

Page 32: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

66

בהוספה LRגלגול

:LRצוע הגלגול מסוג לפני בי5.2.2 להלן המצב המתואר בצעד

. e או של d יכול להיות צאצא של wהצומת . e - וd ונקרא להם bנוסיף לציור את שני הבנים של

: ונקבל את הציור הבאd הוא צאצא של w -לצורך ההדגמה נניח ש

x סביב צומת RRגלגול ) 1: שלבים מתבצע בשניy סביב צומת LRגלגול

y סביב צומת LLגלגול ) 2 :הבא יתקבל הציור y סביב צומת LRלאחר גלגול

.אלגוריתם ההוספה עוצר, wת מכיוון שגובה תת העץ שסביבו נעשה הגלגול נשאר כמו שהיה לפני הוספ

x 0

a d

b 0

y 0

w

e c

x 0

a b

y +1

c R

L

e d

w

x 0

a b

y +1

c R

L

w

Page 33: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

67

בהוספה RLגלגול

:RL לפני ביצוע הגלגול מסוג 6.2.2 להלן המצב המתואר בצעד

. e או של d יכול להיות צאצא של wהצומת . e - וd ונקרא להם bנוסיף לציור את שני הבנים של

: ונקבל את הציור הבאd הוא צאצא של w -לצורך ההדגמה נניח ש

x סביב צומת LLגלגול ) 1: מתבצע בשני שלביםy סביב צומת RLגלגול

y סביב צומת RRגלגול ) 2

:הבא יתקבל הציור y סביב צומת RLחר גלגול לא

.אלגוריתם ההוספה עוצר, wמכיוון שגובה תת העץ שסביבו נעשה הגלגול נשאר כמו שהיה לפני הוספת

x 0 a

b

y -1

c

R

w

L

y 0

a d

b 0

x 0

w

e c

a

b

y -1

c

R

L

w

d e

x 0

e

Page 34: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

68

בהוצאהLLגלגול

:LLפני ביצוע הגלגול מסוג ל5.2.1 להלן המצב המתואר בצעד

: נקבלy בצומת LL לאחר ביצוע גלגול

: מחישובי הגבהים נקבל שקימות שתי אפשרויות ביבו נעשה הגלגול אזי מכיוון שגובה תת העץ שס 0 גורם האיזון היה )לפני ההוצאה (aאם בצומת ) 1

.אלגוריתם ההוצאה עוצר, w נשאר כמו שהיה לפני הוצאת אזי מכיוון שגובה תת העץ שסביבו נעשה 1+ גורם האיזון היה )לפני ההוצאה (aאם בצומת ) 2

.אלגוריתם ההוצאה ממשיך, 1 - הגלגול קטן ב

b

x c

a

y

L

w

a 0 1+ או

b c

y +1

x

w

L

L

Page 35: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

69

בהוספה RRגלגול

:RR לפני ביצוע הגלגול מסוג 6.2.1 להלן המצב המתואר בצעד

: נקבלy בצומת RR לאחר ביצוע גלגול

: מחישובי הגבהים נקבל שקימות שתי אפשרויות

אזי מכיוון שגובה תת העץ שסביבו נעשה הגלגול 0ם האיזון היה גור )לפני ההוצאה (aאם בצומת ) 1 .אלגוריתם ההוצאה עוצר, w נשאר כמו שהיה לפני הוצאת

אזי מכיוון שגובה תת העץ שסביבו נעשה 1- גורם האיזון היה )לפני ההוצאה (aאם בצומת ) 2 .אלגוריתם ההוצאה ממשיך, 1 - הגלגול קטן ב

a 0 1- או

y -1

b c

x

R

R

w

y

x b

a

c

w

Page 36: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

70

בהוצאהLRגלגול

:LR לפני ביצוע הגלגול מסוג 5.2.2 להלן המצב המתואר בצעד

:נקבל את הציור הבא. e - וd ונקרא להם cנוסיף לציור את שני הבנים של

:הבא יתקבל הציור yסביב צומת LRלאחר גלגול

. ולכן אלגוריתם ההוצאה ממשיך1 -מחישובי הגבהים נקבל שגובה תת העץ שסביבו נעשה הגלגול קטן ב

a

b d

c

y

e x

w

a -1

b c

y +1

x R

L

e d

w

a -1

b c

y +1

x

w

L

R

Page 37: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

71

בהוצאהRLגלגול

:RLלגול מסוג לפני ביצוע הג6.2.2 להלן המצב המתואר בצעד

:נקבל את הציור הבא. e - וd ונקרא להם bנוסיף לציור את שני הבנים של

:הבא יתקבל הציור y סביב צומת RLלאחר גלגול

. ולכן אלגוריתם ההוצאה ממשיך1 -עשה הגלגול קטן במחישובי הגבהים נקבל שגובה תת העץ שסביבו נ

y

x d

b

a

e c

w

x

b

y -1

c

R

L

w

d e

a +1

a +1

y -1

b c

x

R

L

w

Page 38: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

72

3-2עץ עץ עץ עץ

:2-3להלן דוגמה לעץ

2222----3333תכונות עץ תכונות עץ תכונות עץ תכונות עץ

ישנו איבר 2-3אם בעץ : יוצא מן הכלל. בנים3 או 2לכל צומת פנימית )1ורק במקרה זה מותר שלשורש יהיה בן (אחד בלבד אז הוא נראה כך

):אחד

האיברים . info - וkeyאין להם שדות , הצמתים הפנימיים הם צמתי דמה )2

.info - וkeyשל מבנה הנתונים נמצאים בעלים ולהם יש שדות

העלים מסודרים משמאל לימין בסדר עולה לפי מפתחות האיברים )3 .אותם הם מיצגים

).א כולם באותו מרחק מהשורש"ז(כל העלים באותה רמה )4

2 16 7

2 − 5 7 12 8 16 19 18

2 5 7 8 12 16 18 19

2 −

2

Page 39: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

73

: בעץ ישנם את השדות הבאיםx עלה לכל )5

parent(x), first(x), second(x), third(x),key(x),info(x)

: בעץ ישנם את השדות הבאיםxלכל צומת פנימית )6

parent(x), first(x), second(x), third(x),s1(x),s2(x),s3(x)

: כאשר

s1(x) - המפתח הקטן ביותר בתת העץ ששורשו מציין אתfirst(x)

Tfirst(x) דהינו בתת העץ

s2(x) - מציין את המפתח הקטן ביותר בתת העץ ששורשו second(x)

Tsecond(x) דהינו בתת העץ

s3(x) - מציין את המפתח הקטן ביותר בתת העץ ששורשו third(x)

Tthird(x) דהינו בתת העץ

Page 40: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

74

.h=θ(log n): אזי. h צמתים וגובה n בעל 2-3 עץ Tיהי : משפטמשפטמשפטמשפט

הוכחההוכחההוכחההוכחה

בעל המספר הגדול ביותר של צמתים2-3 - את עץ ה Tmax(h) -נסמן ב

את מספר הצמתים בעץn(Tmax(h)( -נסמן ב. h בגובה AVL -מבין כל עצי ה

Tmax(h) .עבור , לדוגמהh=1 העץ Tmax(1) נראה כך

נראה כך Tmax(2) העץ h=2עבור

נראה כך Tmax(3) העץ h=3עבור

ברמה הראשונה יש: לפי רמותTmax(h)נספור את מספר הצמתים בעץ

3יש צמתים ברמה השלישית 3 יש הצומת אחד ברמה השניי2

צמתים וכן

3עד הרמה האחרונה שבה יש , הלאהh-1

לכן נקבל את הנוסחה. צמתים

:הבאה

n(Tmax(h)) = 1 + 3 + 32 + 3

3 + ... + 3

h-1 =

קטןT -מספר הצמתים ב. h צמתים וגובה n כלשהו בעל 2-3 עץ Tיהי בין כל או שווה למספר הצמתים בעץ בעל מספר הצמתים הגדול ביותר מ

≥ n(Tmax(h)) n : ולכן נקבל. hהעצים בגובה

: שמצאנו בנוסחה הקודמת ונקבלn(Tmax(h))נציב את הערך של

:ולכן

-ולכן הראנו ש

2

13

13

13 hh −=

2

13n

h −≤

h31n2 ≤+

h)1n2(log3 ≤+

)n(log)1n2(logh 3 θ=+≥

)n(logh Ω=

Page 41: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

75

בעל המספר הקטן ביותר של צמתים2-3 - את עץ ה Tmin(h) -נסמן ב

את מספר הצמתים בעץn(Tmin(h)( -נסמן ב. h בגובה AVL -מבין כל עצי ה

Tmin(h) .עבור , לדוגמהh=1 העץ Tmin(1) נראה כך

נראה כך Tmin(2) העץ h=2עבור

נראה כך Tmin(3) העץ h=3עבור

ברמה הראשונה יש: לפי רמותTmin(h)נספור את מספר הצמתים בעץ

2 צמתים ברמה השלישית יש 2 יש הומת אחד ברמה השנייצ2

צמתים וכן

2עד הרמה האחרונה שבה יש , הלאהh-1

לכן נקבל את הנוסחה. צמתים

:הבאה

n(Tmin(h)) = 1 + 2 + 22 + 2

3 + ... + 2

h-1 =

גדולT -מספר הצמתים ב. h צמתים וגובה n כלשהו בעל 2-3 עץ Tיהי למספר הצמתים בעץ בעל מספר הצמתים הקטן ביותר מבין כל או שווה

≤ n(Tmin(h)) n : ולכן נקבל. hהעצים בגובה

: שמצאנו בנוסחה הקודמת ונקבלn(Tmin(h))נציב את הערך של

:ולכן

-ולכן הראנו ש

-הראנו ש, לסיכום

לללל....שששש....ממממ

1212

12 hh

−=−−

12n h −≥

h21n ≥+

h)1n(log2 ≥+

)n(log)1n(logh 2 θ=+≤

)n(logh Ο=

)n(logh θ=

Page 42: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

76

3-2דוגמאות לאלגוריתם ההוספה לעץ דוגמאות לאלגוריתם ההוספה לעץ דוגמאות לאלגוריתם ההוספה לעץ דוגמאות לאלגוריתם ההוספה לעץ

: : : :1111דוגמה דוגמה דוגמה דוגמה

. לעץ הזה4נראה איך מוסיפים . 2-3להלן עץ

. 4בעזרת צמתי הדמה נגיע לצומת הדמה שמתחתיו נרצה להוסיף את

: נגיע לצומת הדמה, במקרה שלנו

, במקום המתאים4 בנים נוסיף לו את 2מאחר ולצומת הדמה הזה יש רק :העץ שיתקבל יראה כך. נעדכן מפתחות ונסים

2 16 7

2 54 7 12 8 16 19 18

2 5 7 8 12 16 18 19 4

2 16 7

2 − 5 7 12 8 16 19 18

2 5 7 8 12 16 18 19

2 − 5

Page 43: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

77

: : : :2222דוגמה דוגמה דוגמה דוגמה

. לעץ הזה11נראה איך מוסיפים . 2-3להלן עץ

מתי הדמה נגיע לצומת הדמה שמתחתיו נרצה כמו בדוגמה הקודמת בעזרת צ

: במקרה שלנו נגיע לצומת הדמה. 11להוסיף את

. 11 בנים לא נוכל להוסיף לה את צומת 3מאחר ולצומת הזה יש כבר

ואז 7,8,11,12: בנים 4כך שיהיו לה , כבן נוסף באופן זמני11נוסיף לה את לאחר התהליך הזה העץ . שה הבנים הימניים שלה לצומת דמה חד2נעביר את :יראה כך

עכשיו נחזור על התהליך כאשר אנחנו מוסיפים את צומת הדמה

: כבן נוסף של צומת הדמה

בנים נוסיף לה את 3מאחר ולצומת יש כבר

הבנים הימניים 2ואז נעביר את , בנים4ו לה באופן זמני כבן נוסף כך שיהי

זה מקרה מיוחד בו ניצור שורש חדש, מאחר הגענו לשורש. שלה לצומת חדשה :לאחר התהליך הזה העץ יראה כך. לעץ

2 16 7

5

16 19 18 − 12 − 8 − 5 11 2 7

16 16 16 16 16 16 7 2 8 16 16 16 16 16 16 11 16 16 16 16 16 16 12 16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

2 16 7

2 − 5 7 12 8 16 19 18

2 5 7 8 12 16 18 19

7 12 8

− 12 11

2 16 7

16 7 − 12 2 11

Page 44: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

78

2 − 7

5

16 19 18 − 12 − 8 − 5 11 2 7

16 16 16 16 16 16 7 2 8 16 16 16 16 16 16 11 16 16 16 16 16 16 12 16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

11 − 16

2 − 11

Page 45: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

79

3-2דוגמאות לאלגוריתם ההוצאה מעץ דוגמאות לאלגוריתם ההוצאה מעץ דוגמאות לאלגוריתם ההוצאה מעץ דוגמאות לאלגוריתם ההוצאה מעץ

: : : :1111דוגמה דוגמה דוגמה דוגמה

. מהעץ הזה12נראה איך מוציאים את . 2-3להלן עץ

12 בנים לא נוכל להוציא את 2מאחר ולצומת יש רק

במקרה זה מאחר ולצומת . מהצומת ולהשאיר אותה עם בן אחד .ונסיים, ונשאיל בן אחד מהאח שלה12 בנים נוציא ממנה את 2יש אח עם

:ל יתקבל העץ הבא" מהעץ הנ12לאחר הוצאת , לכן

2 − 7

5

18 − 19 − 16 − 8 − 5 11 2 7

16 16 16 16 16 16 7 2 8 16 16 16 16 16 16 11

16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

11 − 18

2 − 11

2 − 7

5

16 19 18 − 12 − 8 − 5 11 2 7

16 16 16 16 16 16 7 2 8 16 16 16 16 16 16 11 16 16 16 16 16 16 12 16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

11 − 16

2 − 11

− 12

− 12

11

11

Page 46: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

80

מימין (שימו לב שבאלגוריתם ההוצאה מותר להשאיל בן מאח צמוד : 1111 הערההערההערההערהל "בדוגמה הנ. (אבל אסור להשאיל בן מבן דוד או מאח שאינו צמוד) ומשמאל

). שאינו צמוד לו16 הוא אח של 19

גם לא (וספה אסור להשאיל בנים בכלל שימו לב שבאלגוריתם הה: 2222 הערההערההערההערה ). מאח צמוד

: : : :2222דוגמה דוגמה דוגמה דוגמה

. מהעץ הזה8נראה איך מוציאים את . 2-3להלן עץ

8 בנים לא נוכל להוציא את 2מאחר ולצומת יש רק

בנים3ין אח צמוד עם מאחר ולצומת זו א. מהצומת ולהשאיר אותה עם בן אחדבמקרה זה נוציא . לא נוכל להשאיל מאח שלה בן כפי שעשינו בדוגמה הקודמת

להיות ) 7במקרה זה את (8נעביר את האח של , מהעץ8את :לאחר התהליך הזה העץ יראה כך. בן נוסף של

2 − 7

5

16 19 18 − 12 − 8 − 5 11 2 7

16 16 16 16 16 16 7 2 8 16 16 16 16 16 16 11 16 16 16 16 16 16 12 16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

11 − 16

2 − 11

− 8 7

− 5 2

Page 47: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

81

ונחזור על התהליך להוציא את , ת אין בניםכעת מתחת הצומ

: דהינו מהצומת, הצומת מאביה

נעביר את הבן, מאחר ואי אפשר להשאיל בן מאח צמוד, כמו במקרה הקודם

לאחר התהליך הזה העץ . של להיות בן נוסף של

:יראה כך

2 − 7

5

16 19 18 − 12 7 5 11 2

16 16 16 16 16 16 7 2 16 16 16 16 16 16 11 16 16 16 16 16 16 12 16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

2 16 11

2 − 11

2 − 7

5

16 19 18 − 12 − 8 7 5 11 2 7

16 16 16 16 16 16 7 2 16 16 16 16 16 16 11 16 16 16 16 16 16 12 16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

11 − 16

2 − 11

− 8 7

− 8 7 2 − 7

− 7 11 − 16 2

Page 48: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

82

מאחר ואביה הוא . עכשיו נמשיך להוציא את הצומת מאביה

שבו אנחנו הופכים את, זה מקרה מיוחד, שורש העץ ויש לו רק בן אחד :קבל הואהעץ הסופי שמת, לכן. םהאח שלה להיות שורש העץ ומסיימי

5

16 19 18 − 12 7 5 11 2

16 16 16 16 16 16 7 2 16 16 16 16 16 16 11 16 16 16 16 16 16 12 16 16 16 16 16 16 16 16 16 16 16 16 16 18 19

2 16 11

2 − 7

Page 49: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

83

.3-2אלגוריתם הוספת איבר לעץ

)x,T(Insert

הוסף , yצור צומת דמה ) root(T)=NULLא אם "ז(אם העץ ריק ) 1 . וסייםroot(T)=yעדכן , yהראשון של להיות הבן xאת

xהוסף את ). שאינו צומת דמה(בר אחד בלבד אם בעץ ישנו אי) 2

.וסיים להיות אח של איבר זה yמצא את צומת הדמה , בעזרת המפתחות של צמתי הדמה) 3

נמצא רמה אחת מעל yצומת הדמה ( . xשמתחתיו יש להוסיף את ).לרמת העלים

במקום (yל כבן נוסף שxהוסף את : יש שני בניםy -אם ל) 4

.צמתי הדמה וסיים עדכן מפתחות, )המתאים

במקום המתאים y כבן נוסף של xאת ) באופן זמני בלבד(הוסף ) 5 ). בנים4 יש כרגע y -ל(

צור צומת דמה root(T)≠y)אם א" ז( אינו שורש העץ yאם ) 6

עדכן מפתחות צמתי , 'y - לy -מ העבר שני בנים 'yחדשה .4 - וחזור לx=y', y=parent(y)בצע , הדמה

צור צומת דמה root(T)=y)אם א"ז( הוא שורש העץ yאם ) 7

, עדכן מפתחות צמתי הדמה , 'y - לy -מ העבר שני בנים 'yחדשה כבנים 'y - וyאת חבר, ) הוא צומת דמהz) zצור שורש חדש לעץ . וסייםzעדכן מפתחות צומת הדמה , zשל

Page 50: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

84

.3-2אלגוריתם הוצאת איבר מעץ

)x,T(Delete איבר זה חייב , )שאינו צומת דמה(אם בעץ ישנו איבר אחד בלבד ) 1

. וסייםroot(T)=NULL בצע. xלהיות אחד מהם , )אינם צומתי דמהש(אם בעץ ישנם שני איברים בלבד ) 2

את האבא y -נסמן ב. xחייב להיות אח של z והשני xחייב להיות . וסייםyשל ) והראשון( להיות הבן היחיד zהעבר את . z - וxשל

3 (y=parent(x) הזז (y מקבוצת הבנים של xהוצא את : יש שלושה בניםy -אם ל) 4

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

, x אחיו של z יהיה root(T)=y)אם א"ז( הוא שורש העץ yאם ) 5

. וסייםroot(T)=z ,parent(z)=NULLבצע

: יש לו שלושה בניםש) מימין או משמאל (p ישנו אח y -אם ל) 6 עדכן , y - לp -העבר בן אחד מ , yשל מקבוצת הבנים xהוצא את .מפתחות צמתי הדמה וסיים

האח zיהיה ). יש שני בניםp -ל (y - אח מימין או משמאל לpיהיה ) 7

עדכן ,)במקום במתאים (pלהיות בן נוסף של zהעבר את . xשל ).3 - וחזור לx=yבצע , מפתחות צמתי הדמה

Page 51: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

85

ערימהערימהערימהערימה

וכל העלים נמצאים, עץ שלם הוא עץ שבו לכל צומת יש שני בנים::::הגדרההגדרההגדרההגדרה . באותו מרחק מהשורש

:לדוגמה העץ הבא הוא עץ שלם

או 0 הוצאה של הוא עץ שמתקבל מעץ שלם על ידיכמעט שלםכמעט שלםכמעט שלםכמעט שלם עץ ::::הגדרההגדרההגדרההגדרה

.יותר צמתים באופן רציף מהחלק הימני של הרמה האחרונה בעץ

:כמעט שלםלדוגמה העץ הבא הוא עץ

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

: עץ כמעט שלםאינואינואינואינוולכן העץ הבא , לימין

. ל עץ שלם הוא עץ כמעט שלם"לפי ההגדרות הנ

Page 52: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

86

היא מבנה נתונים שבו האיברים נמצאים בעץ כמעט שלם ובנוסףHערימה .מהבנים שלו" חביב"כל איבר בעץ יותר

.הערימה נקראת ערימת מקסימום, גדול" = חביב"כאשר .הערימה נקראת ערימת מינימום, קטן" = חביב"כאשר

.כאשר נדבר על ערימה נתכוון לערימת מקסימום) נאמר אחרתאם לא(בהמשך

:דהינו, בערימה יש את השדות הרגילים כמו בעץ בינאריxלכל איבר

left(x), right(x),parent(x),key(x),info(x).

:בנוסף לערימה יש שני מצביעים

root(H) -מצביע לשורש העץ .

F(H) -אזי , אם העץ אינו שלםF(H)ע לאיבר ברמה הלפני אחרונה בעץ מצבי , . שניתן להוסיף לו בן כך שלאחר ההוספה העץ יהיה עץ כמעט שלם

מצביע לעלה השמאלי ביותר ברמה האחרונה F(H)אזי , אם העץ שלם בעץ

:לדוגמה

F(H)

F(H)

Page 53: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

87

.האיברים בערימה לא שומרים על הסדר כמו בעץ בינארי .החוק היחיד הוא שהאבא גדול מהבנים

:העץ הבא מתאר ערימה, לדוגמה

80

60 20

50 1

40-

8

35

12

F(H)

F(H)

Page 54: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

88

דוגמה לאלגוריתם ההוספה לערימהדוגמה לאלגוריתם ההוספה לערימהדוגמה לאלגוריתם ההוספה לערימהדוגמה לאלגוריתם ההוספה לערימה

:להלן עץ שמתאר ערימה

.ל" לערימה הנ70נראה איך מוסיפים

כך שלאחר ההוספה העץ F(H)בשלב ראשון מוסיפים את האיבר כבן של :ונקבל, 8 כבן שמאלי של 70נוסיף את , בדוגמה שלנו. יהיה עץ כמעט שלם

שאר ללא נF(H)בדוגמה שלנו . F(H)אם יש צורך מעדכנים את , בשלב השני

. שינוי את האיבר שהוספנו כלפי מעלה על ידי" בעבע"מתחילים ל, בשלב השלישי עד שהאיבר מגיע למקום שבו הוא, )אם הוא גדול מאביו(החלפתו באביו

. םואז האלגוריתם מסתיי, )או שהוא בעצמו השורש(קטן מאביו

80

60 20

50 1

40-

8

35

12

F(H) 70

80

60 20

50 1

40-

8

35

12

F(H)

Page 55: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

89

: נקבל, לאחר צעד אחד של בעבוע

: נקבל, לאחר צעד נוסף של בעבוע

. נמצא במקום המתאים והאלגוריתם מסתיים70כעת

80

70 20

50 1

40-

60

35

12

F(H) 8

80

60 20

50 1

40-

70

35

12

F(H) 8

Page 56: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

90

))))בעבוע כלפי מטהבעבוע כלפי מטהבעבוע כלפי מטהבעבוע כלפי מטה((((דוגמה לאלגוריתם ההוצאה מערימה דוגמה לאלגוריתם ההוצאה מערימה דוגמה לאלגוריתם ההוצאה מערימה דוגמה לאלגוריתם ההוצאה מערימה

:להלן עץ שמתאר ערימה

.ל" מהערימה הנ80נראה איך מוציאים

, וציאים את האיבר הימני ביותר ברמה האחרונה בעץבשלב הראשון מ

בדוגמה שלנו נוציא את. ומציבים אותו במקום האיבר שאותו רוצים להוציא . 80 ונציב אותו במקום 35

יש צורך לעדכן, בדוגמה שלנו. אם יש צורךF(H)בשלב השני מעדכנים את

: והעץ שמתקבל אחרי שני שלבים אלה נראה כךF(H)את

35

60 20

50 1

40-

8 12

F(H)

80

60 20

50 1

40-

8

35

12

F(H)

Page 57: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

91

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

בבעבוע כלפי מטה מחליפים את הצומת בבן . לה בעץ והאלגוריתם מסתיים . ת באביובבעבוע כלפי מעלה מחליפים את הצומ. הגדול שלו

אחרי צעד אחד של בעבוע מתקבל. כלפי מטה35בדוגמה שלנו מבעבעים את

:העץ הבא

:אחרי צעד נוסף של בעבוע מתקבל העץ הבא

. םוהאלגוריתם מסתיי, ואחרי צעד נוסף של בעבוע מתקבל העץ הבא

60

50 20

35 1

40-

8 12

F(H)

60

35 20

50 1

40-

8 12

F(H)

Page 58: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

92

60

50 20

40 1

35-

8 12

F(H)

Page 59: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

93

))))בעבוע כלפי מעלהבעבוע כלפי מעלהבעבוע כלפי מעלהבעבוע כלפי מעלה((((דוגמה לאלגוריתם ההוצאה מערימה דוגמה לאלגוריתם ההוצאה מערימה דוגמה לאלגוריתם ההוצאה מערימה דוגמה לאלגוריתם ההוצאה מערימה

. מהערימה הזאת1ונראה איך מוציאים את , נסתכל על הערימה האחרונה

בשלב השני . 1 - מהעץ ומחליפים אותו ב35בשלב הראשון מוציאים את

.F(H)בדוגמה שלנו אין צורך לעדכן את , אם יש צורךF(H)מעדכנים את : מתקבל לאחר שני השלבים הראשונים נראה כךהעץ ש

לאחר צעד אחד של ). הפעם כלפי מעלה (35בשלב השלישי מבעבעים את . םבעבוע מתקבל העץ הבא והאלגוריתם מסתיי

60

50 35

40 20 8 12

F(H)

60

50 20

40 35 8 12

F(H)

Page 60: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

94

.H(Remove(אלגוריתם הוצאת השורש מערימה

. היא ערימת מקסימום שאינה ריקהH: הנחה root(H)=NULLאם הערימה מכילה איבר אחד בלבד עדכן ) 1

F(H)=NULLוסיים .

. העלה הימני ביותר מבין העלים שברמה העמוקה ביותר בעץxיהי ) 2 ).F(H) בעזרת O(log n(בסיבוכיות זמן xניתן למצוא את (

. מהערימה והצב אותו במקום שורש הערימהxהוצא את ) 3

).אם יש צורך (F(H)עדכן את ) 4

אחרת . גדול מהמפתחות של הבנים שלו סייםxאם המפתח של ) 5

בבן בעל המפתח הגדול יותר מבין הבנים xהחלף את ). 5ור לצעד וחזxשל

Page 61: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

95

.z,H(Delete(אלגוריתם הוצאת איבר מערימה

.z היא ערימת מקסימום שנמצא בה האיבר H: הנחה

. העלה הימני ביותר מבין העלים שברמה העמוקה ביותר בעץxיהי ) 2 ).F(H) בעזרת O(log n(בסיבוכיות זמן xניתן למצוא את (

. שבערימהz מהערימה והצב אותו במקום האיבר xהוצא את ) 3

).אם יש צורך (F(H)עדכן את ) 4

גדול מהמפתחות של הבנים שלו וקטן מהמפתח xאם המפתח של ) 5

. של אביו סיים

:ו גדול מהמפתחות של הבנים שלו בצע אינxאם המפתח של ) 6

. בבן בעל המפתח הגדול יותר מבין הבנים שלוxהחלף את ) 6.1 אינו גדול מהמפתחות של xאם לאחר ההחלפה המפתח של .אחרת סיים. 6.1)הבנים שלו חזור לצעד

: גדול מהמפתח של אביו בצעxאם המפתח של ) 7

גדול xאם לאחר ההחלפה המפתח של . באביו xהחלף את ) 7.1

.אחרת סיים. 7.1)חזור לצעד מהמפתח של אביו

Page 62: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

96

שיכון ערימה בתוך מערךשיכון ערימה בתוך מערךשיכון ערימה בתוך מערךשיכון ערימה בתוך מערך

: שמתאר ערימהנסתכל על הציור הבא

לצורך כך נמספר את אברי. אנחנו נרצה לשכן את הערימה הזאת בתוך מערך

: הערימה באופן הבא 1של העץ יקבל מספר ) דהינו השורש (1האיבר ברמה

. לפי הסדר משמאל לימן2,3 של העץ יקבלו את המספרים 2האיברים ברמה לפי הסדר משמאל 4,5,6,7העץ יקבלו את המספרים של 3האיברים ברמה

לימין ....וכן הלאה

:ל יתקבל המספור הבא"לדוגמה עבור הערימה הנ

80

60 20

50 1

40-

8

35

12

F(H)

1

2

8

657

3

4

9

80

60 20

50 1

40-

8

35

12

F(H)

Page 63: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

97

של המערךA[i] כאשר האיבר Aכעת נשכן את האיברים של הערימה במערך

.ל" במספור הנiיהיה האיבר שמתאים לאיבר בעץ שקיבל מספר

:בדוגמה שלנו יתקבל המערך הבא

: נשמור שני משתניםAעבור המערך

array-size - גודל המערך A heap-size -מספר האיברים של הערימה שמשוכנים במערך .

heap-size=9 - וarray-size=10: בדוגמה שלנו

:ל יש את התכונה הבאה"למספור הנ

2i ≤ heap-size כאשר A[2i] הוא A[i]הבן השמאלי של האיבר 2i > heap-size כאשר NULL או

2i+1 ≤ heap-size כאשר A[2i] הוא A[i]הבן הימני של האיבר 2i+1 > heap-size כאשר NULL או

i > 1 הוא כאשר A[i]אבא של האיבר ה

.i = 1 כאשר NULL או

במקום לומר שהמפתח של A[j] גדול מאיבר A[i]בהמשך נאמר בקיצור שאיבר

.A[j] גדול מהמפתח של האיבר A[i]האיבר

התכונה הבאה שנובעת מכך תמתקיימ, כאשר משכנים ערימה בתוך מערך : שבערימה המפתח של האבא גדול מהמפתחות של שני הבנים שלו

: מתקייםi>1 -כך ש, iלכל

הגדרנו פעולת בעבוע של איבר , נזכיר שבהצגת אלגוריתם ההוספה לערימהכפעולה שמחליפה את האיבר באיבר הגדול יותר מבין שני בניו , כלפי מטה . כל עוד האיבר אינו גדול משני הבנים שלו, ילהוחוזר חל

. במערך כלפי מטהA[i]התוכנית הבאה מבצעת בעבוע של איבר

80 60 20 50 35 40 1 12 8

1 2 3 9 8 7 6 5 4 10

]2

i[A

]2i

A[A[i]

<

Page 64: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

98

heapify (A, i) if ( 2i > heap-size ) return if ( 2i == heap-size ) x = max ( A[i], A[2i] ) if ( 2i < heap-size ) x = max ( A[i], A[2i],A[2i+1] ) if ( x == A[i] ) return if ( x == A[2i]) swap ( A, i, 2i ) heapify(A,2i) if ( x == A[2i+1]) swap ( A, i, 2i+1 ) heapify(A,2i+1) swap (A, i, j) temp=A[i] A[i]=A[j] A[j]=temp

.heap - בA[i] את גובה האיבר h(i) -נסמן ב

.θ(h(i)) היא heapify(A,i) סיבוכיות זמן הריצה של התוכנית:טענהטענהטענהטענה

כאשרh=θ(logn)ובערימה מתקיים , מציין את גובה הערימהh(1) -מאחר ו

nדהינו (, מציין את מספר האיברים בערימהn=heap-size( ,אזי מהטענה

.θ(logn) היא heapify(A,1)ל נובע שסיבוכיות זמן הריצה של התוכנית "הנ

Page 65: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

99

דוגמה לאלגוריתם בנית ערימהדוגמה לאלגוריתם בנית ערימהדוגמה לאלגוריתם בנית ערימהדוגמה לאלגוריתם בנית ערימה

:כלשהו איברים בסדר 8 שמכיל Aנסתכל על מערך

במילים . כך שהוא יכיל ערימהAלשנות את סדר האיברים במערך : המטרה

: כך שיתקיים כלל הערימהAצריך לשנות את סדר האיברים במערך , אחרות

: מתקייםi>1 -כך ש, iלכל

דהינו בהתחלה, הפוך בסדרheapify(A,i): נבצע4 - ל1 בין iעבור : הפתרון

בסוף התהליך... וכן הלאהheapify(A,3) אחר כך נבצע heapify(A,4)נבצע . המערך יכיל ערימה

. להלן תאור מפורט של התהליך

:ל נראה כך"העץ המתאים למערך הנ

10

30 40

50 60

80

70 35

1

2

8

657

3

4

10 30 40 50 80 60 35 70

1 2 3 8 7 6 5 4

]2i

A[A[i]

<

Page 66: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

100

: העץ יראה כךheapify(A,4)לאחר ביצוע

:והמערך המתאים לו נראה כך

: העץ יראה כךheapify(A,3)לאחר ביצוע

:והמערך המתאים לו נראה כך

10 30 60 80 50 40 35 70

10 30 60 80 50 40 35 70

10

30 60

80 40

50

70 35

1

2

8

657

3

4

10

30 40

80 60

50

70 35

1

2

8

657

3

4

1 2 3 8 7 6 5 4

1 2 3 8 7 6 5 4

Page 67: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

101

: העץ יראה כךheapify(A,2)לאחר ביצוע

:והמערך המתאים לו נראה כך

: העץ יראה כךheapify(A,1)לאחר ביצוע

:והמערך המתאים לו נראה כך

80

70 60

50 40

30

10 35

1

2

8

657

3

4

10

80 60

50 40

30

70 35

1

2

8

657

3

4

80 70 60 50 30 40 35 10

10 80 60 50 30 40 35 70

1 2 3 8 7 6 5 4

1 2 3 8 7 6 5 4

Page 68: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

102

אלגוריתם בנית ערימהאלגוריתם בנית ערימהאלגוריתם בנית ערימהאלגוריתם בנית ערימה

:ם בנית ערימה נראה כךהפסיאודו קוד של אלגורית

Build-Heap(A) n = length(A) heap-size = n

for i =

2

n to 1

do Heapify(A,i) done

A עבור מערך קלט Build-Heap(A) סיבוכיות זמן הריצה של התוכנית: טענהטענהטענהטענה .θ(n) היא nבגודל

וכחהוכחהוכחהוכחההההה

: מתקייםk < 1 > 0ידוע שעבור

: מתקיים= kבפרט עבור

בעץ המתאים A[i] את גובה האיבר h(i) -נסמן ב. A את גודל המערך n -נסמן ב

עבור Build-Heap(A) את זמן הריצה של התוכנית T(n) -נסמן ב. Aלמערך

מתבצעת בסיבוכיותHeapify(A,i) -כל קריאה ל. n בגודל Aמערך קלט

:לכן נקבל. ולכן לוקחת לכל היותר פעולותθ(h(i))זמן

נזכיר שרמה של צומת בעץ שווה. A את גובה העץ המתאים למערך h -נסמן ב . למספר הצמתים במסלול שמחבר בין הצומת לשורש העץ

21x

x

)k1(

kkx

−=⋅∑

=

2

1

2

4

12

1

2

11

2

1

...2

4

2

3

2

2

2

1

2

1x

24321x

x

==

=++++=

⋅∑∞

=

)i(hC2 ⋅

∑=

=

⋅+⋅+≤ni

1i210 )i(hC

2

nCC)n(T

Page 69: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

103

h בעץ יש צומת אחד שגובהו 1ברמה

h-1 צמתים שגובה כל אחד מהם הוא לכל היותר 2שנם בעץ י2ברמה

h-2 בעץ ישנם צמתים שגובה כל אחד מהם הוא לכל היותר 3ברמה

h-(i-1) בעץ ישנם צמתים שגובה כל אחד מהם הוא לכל היותר iברמה ....

2יותר בעץ ישנם צמתים שגובה כל אחד מהם הוא לכל הh-1ברמה

. 1 בעץ ישנם לכל היותר צמתים שגובה כל אחד מהם הוא hברמה

-לכן נקבל ש

-לסיכום קיבלנו ש

, ולכן

: הקודם נקבלןובהצבה באי השוויו

,h צמתים וגובה n עץ כמעט שלם בעל Tיהיה : טענת עזרטענת עזרטענת עזרטענת עזר אזי

22

1i2 −

2h2 −

1h2 −

≤+++=∑=

=

)n(h)...3(h)2(h)1(h)i(hni

1i

=⋅+⋅++−⋅+−⋅+⋅≤ −− 1222...)2h(2)1h(2h1 1h2h2

=⋅+−⋅+−⋅++⋅+⋅+⋅= −−− h1)1h(2)2h(2...322212 23h2h1h

+

−+

−++++⋅=

−− h1h2h32h

2

h

2

1h

2

2h...

2

3

2

2

2

12

1hh32

h 222...2

3

2

2

2

12 +=⋅=

+++⋅≤

1hni

1i

2)i(h +=

=

≤∑

1h2

ni

1i2

ni

1i2 2C)i(hC)i(hC +

=

=

=

=

⋅≤⋅=⋅ ∑∑

1h210

ni

1i210 2C

2

nCC)i(hC

2

nCC)n(T +

=

=

⋅+⋅+≤⋅+⋅+≤ ∑

)1n(log1h 2 ++≤

Page 70: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

104

: ת טענת העזרת טענת העזרת טענת העזרת טענת העזרהוכחהוכחהוכחהוכח

לפי רמות עד הרמה לפני האחרונהTנספור את האיברים בעץ

איבר1ברמה הראשונה יש

איברים2 יש הברמה השניי

ברמה השלישית יש איברים...

ש איבריםי) שהיא הרמה הלפני אחרונה (h-1 -ברמה ה

מאחר ולא ספרנו את האיברים ברמה האחרונה מספר האיברים הכולל

: ולכןh-1 עד 1 קטן ממספר האיברים ברמות nבעץ

))))טענת העזרטענת העזרטענת העזרטענת העזר((((ל ל ל ל ....שששש.... מ מ מ מ

:נחזור לנוסחה האחרונה שקיבלנו ונשתמש בטענת העזר

. T(n)=О(n) - שולכן הראנו

-נקבל ש, מאחר ונכנסים ללולאה לפחות פעמים

.T(n)=θ(n) -לסיכום נקבל ש. T(n)=Ω(n) -ולכן הראנו ש

לללל....שששש.... מ מ מ מ

22

2h2 −

1212

122...221n 1h

1h2h2 −=

−=++++≥ −

−−

12n 1h −≥ −

1h21n −≥+

1h)1n(log 2 −≥+

h)1n(log1 2 ≥++

)1n(log1h 2 ++≤

=⋅+⋅+≤⋅+⋅+≤ ++++ 1)1n(log1210

1h210

22C2

nCC2C

2

nCC)n(T

)n()1n(2C2

nCC22C

2

nCC 2

210)1n(log2

2102 θ=+⋅+⋅+=⋅+⋅+= +

2

n

)n(2

n)n(T θ=≥

Page 71: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

105

בעית המיוןבעית המיוןבעית המיוןבעית המיון

Aמערך : נתוןנתוןנתוןנתון .תחות בסדר עולה לפי מפ A סידור האיברים במערך :מטרהמטרהמטרהמטרה

: הבאAאם נתון המערך , לדוגמא

: נראה כךAהמערך , לאחר המיון

AVLפתרון בעית המיון בעזרת עץ פתרון בעית המיון בעזרת עץ פתרון בעית המיון בעזרת עץ פתרון בעית המיון בעזרת עץ

ונעביר אליו אתAVLניצור תחילה עץ , הפתרון יתבצע באופן הבא

של העץinorderלאחר מכן נבצע סריקת . אחדכל אברי המערך אחד

.Aונציב את האיברים שלו לפי סדר הסריקה לתוך המערך

: יראה כךAVL - עץ ה1אחרי צעד , לדוגמא

: יראה כךAVL - עץ ה2אחרי צעד

10 30 35 40 80 70 60 50

10 30 40 50 80 60 35 70

1 2 3 8 7 6 5 4

1 2 3 8 7 6 5 4

10

10

30

Page 72: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

106

: נראה כךAVL - עץ ה3אחרי צעד

: נראה כךAVL - עץ ה4אחרי צעד

: נראה כךAVL - עץ ה8אחרי צעד , וכן הלאה

. inorderכעת נשכן את האיברים שבעץ במערך לפי סדר

:אחרי הצעד הראשון המערך נראה כך

10 30 40 50 80 60 35 70

40

30 60

10 70 35

80

50

30

40 10

30

10

50

40

1 2 3 8 7 6 5 4

Page 73: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

107

:אחרי הצעד השני המערך נראה כך

:אחרי הצעד השלישי המערך נראה כך

:וכן הלאה עד שלבסוף אחרי הצעד השמיני המערך נראה כך

10 30 35 40 80 70 60 50

10 30 35 50 80 60 35 70

10 30 40 50 80 60 35 70

1 2 3 8 7 6 5 4

1 2 3 8 7 6 5 4

Page 74: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

108

:AVLהפסיאודו קוד של אלגוריתם המיון בעזרת עץ , להלן

sort(A) ----------- T=create-empty-AVL-tree() for (i=1 ; i ≤ n; i++) insert-AVL(T,A[i]) i=1 /* i is a global variable */ inorder(T,A)

קוד שלה - והפסיאודוi משתמשת במשתנה גלובלי inorder(T,A)הפונקציה :הוא

inorder(T,A) ------------------ x=root(T) if (x==NULL) return

inorder(Tleft(x),A) A[i]=x i++

inorder(Tright(x),A)

.θ(nlogn)סיבוכיות אלגוריתם המיון בעזרת עץ היא : טענהטענהטענהטענה

על סמך העובדה , c·lognכל צעד לוקח לכל היותר , בלולאה הראשונה: הוכחההוכחההוכחההוכחה

על . θ(logn) היא AVLשסיבוכיות זמן הריצה של אלגוריתם ההוספה לעץ

כ הלולאה הראשונה לוקחת לכל היותר "לכן סה פעמים nהלולאה חוזרים

c·nlognבאופן דומה לניתוח של סריקת . פעולותinorder אפשר להראות

ולכן לוקחת θ(n) היא inorder(T,A)שסיבוכיות זמן הריצה של פונקצית העזר

-לכן נקבל ש. פעולותc1·nלכל היותר

-ומכאן נובע ש

, להוכחת הכוון השני

ת האיבר לעץ לוקחת לפחות פעולותהוספ

הוספת האיבר לעץ לוקחת לפחות פעולות...

. הוספת האיבר לעץ לוקחת לפחות פעולות

)nlogn(ncnlognc)n(T 1 ⋅θ=+⋅⋅≤

)nlogn()n(T ⋅Ο=

2

nA

2

nlog

+ 12

nA

[ ]nA

2

nlog

2

nlog

Page 75: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

109

כ מספר הפעולות של הלולאה הראשונה הוא לפחות "סה

,ולכן

.T(n)=θ(n·logn) -לסיכום נקבל ש. T(n)=Ω(n·logn) -אנו שולכן הר

לללל....שששש.... מ מ מ מ

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

. לתוכנית כפרמטרים

ל " הנAVLסיבוכיות המקום של תוכנית המיון בעזרת עץ , לדוגמה

כמו כל (AVLועץ , AVLמאחר והיא משתמשת במבנה נוסף של עץ , θ(n)היא

בעץ xמאחר ולכל איבר , תאי זכרוןc·nניתן לאיחסון על ידי ) עץ בינארי

שהזכרוןkey(x),info(x),left(x),right(x),parent(x)מספיק לשמור את השדות

. n - שאינו תלוי בcהנתפש על ידם הוא קבוע

⋅2

nlog

2

n

)nlogn(2

nlog

2

n)n(T ⋅θ=

⋅≥

Page 76: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

110

פתרון בעית המיון בעזרת ערימהפתרון בעית המיון בעזרת ערימהפתרון בעית המיון בעזרת ערימהפתרון בעית המיון בעזרת ערימה

: הבאAנניח שנתון לנו המערך . נציג את הפתרון בעזרת דוגמה

,נשנה את סדר האיברים במערך כך שהוא יכיל ערימה, בשלב הראשון

:התוצאה שנקבל היא. ידי אלגוריתם בנית ערימה שתיארנו קודםעל

ל מתקיים"ולכן עבור המערך הנ, ל שיכים לערימה"כל האיברים במערך הנ

heap-size=8 ,והערימה המתאימה לו נראית כך:

80

70 60

50 40

30

10 35

1

2

8

657

3

4

80 70 60 50 30 40 35 10

heap-size

10 30 40 50 80 60 35 70

1 2 3 8 7 6 5 4

1 2 3 8 7 6 5 4

Page 77: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

111

נקטין את A[n] ,1 לבין האיבר האחרון בערימה A[1] בשלב הבא נחליף בין

heap-sizeהתוצאה נראית כך , 1 - ב:

העץ. נמצא במקום המתאים לו במערך הממוין הסופי80נשים לב האיבר

:נראה כך) heap-size=7 איברים כי 7שמכיל (ל "המתאים למערך הנ

כדי להפוך אותו. 30בגלל האיבר , העץ אינו מכיל ערימה חוקית

30לאחר בעבוע האיבר . כלפי מטה30לערימה חוקית נבעבע את האיבר :יתקבל העץ הבא) את הבעבוע נבצע ישירות על המערך כפי שתיארנו קודם(

70

50 60

30 40 10 35

1

2

657

3

4

30

70 60

50 40 10 35

1

2

657

3

4

30 70 60 50 80 40 35 10

heap-size

1 2 3 8 7 6 5 4

Page 78: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

112

: כךל נראה"המערך שמתאים לעץ הנ

, לאיבר האחרון בערימהA[1]נחליף בין , כעת נחזור על התהליך פעם נוספת

: והתוצאה נראית כך 1 - בheap-sizeנקטין , A[n-1]שעכשיו הוא

. מערך הממוין הסופי נמצאים במקום המתאים להם ב70,80נשים לב שאיברים

:נראה כך) heap-size=6 איברים כי 6שמכיל (ל "העץ המתאים למערך הנ

: כלפי מטה ונקבל את העץ הבא40נבעבע את האיבר

60

50 40

30 10 35

1

2

65

3

4

40

50 60

30 10 35

1

2

65

3

4

40 50 60 30 80 70 35 10

heap-size

70 50 60 30 80 40 35 10

heap-size

1 2 3 8 7 6 5 4

1 2 3 8 7 6 5 4

Page 79: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

113

:ל נראה כך"המערך שמתאים לעץ הנ

: פעמים נוספות עד שנקבל את התוצאה5ל "חזור על התהליך הננ

. כעת המערך ממוין ואין צורך לחזור על התהליך פעם נוספת

:הפסיאודו קוד של אלגוריתם המיון בעזרת ערימה נראה כך

heap-sort(A) n = length(A) build-heap(A) for (i=n ; i ≥ 2; i--) swap (A[1],A[i]) heap-size = heap-size - 1 heapify(A,1)

Aעבור מערך קלט heap-sort(A)סיבוכיות זמן הריצה של אלגוריתם : טענהטענהטענהטענה .θ(n·logn) היא nבגודל

הראנו . c·n לוקח לכל היותר build-heap(A)הראנו קודם שהתוכנית : הוכחההוכחההוכחההוכחה

מאחר וגובה . c1·h(1) לוקחת לכל היותר heapify(A,1) -גם שכל קריאה ל

heapify(A,1) - נקבל שכל קריאה לc2·logn הוא לכל היותר A[1]הצומת

פעמים n-1מאחר ונכנסים ללולאה לכל היותר . c1·c2·lognלוקחת לכל היותר :נקבל

T(n)=O(n·logn (-ולכן הראינו ש

10 30 35 40 80 70 60 50

heap-size

60 50 40 30 80 70 35 10

heap-size

1 2 3 8 7 6 5 4

1 2 3 8 7 6 5 4

)nlogn(nlognccnc)n(T 21 ⋅θ=⋅⋅⋅+⋅≤

Page 80: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

114

, להוכחת הכוון השני

לוקחת לפחות n כאשר גודל הערימה הוא heapify(A,1) -הקריאה ל .פעולות

לוקחת לפחות n-1 כאשר גודל הערימה הוא heapify(A,1) -הקריאה ל .פעולות

......

כאשר גודל הערימה הוא לוקחת לפחות heapify(A,1) -הקריאה ל .פעולות

כ מספר הפעולות של הלולאה הוא לפחות "הס

,ולכן

.T(n)=θ(n·logn) -לסיכום נקבל ש. T(n)=Ω(n·logn) -ולכן הראנו ש

לללל....שששש.... מ מ מ מ

אלא במספר קבוע ( לא משתמשת במבנה עזר heap-sort(A)מאחר והתוכנית

.θ(1)סיבוכיות המקום שלה היא , )של משתנים בלבד

⋅2

nlog

2

n

)nlogn(2

nlog

2

n)n(T ⋅θ=

⋅≥

2

nlog

2

nlog

2

nlog

2

n

Page 81: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

115

מבנה נתונים לדרישותמבנה נתונים לדרישותמבנה נתונים לדרישותמבנה נתונים לדרישותהתאמת התאמת התאמת התאמת

מציין את מספר nכאשר ( הצע מבנה נתונים העונה לדרישות הבאות ....1111 ): האיברים במבנה הנתונים

) כפעולה אחת( איברים nה הנתונים ריק ניתן להוסיף לו כאשר מבנ-

. O(n)בזמן

O(n) זמן הריצה של פעולת חיפוש איבר במבנה הנתונים הוא -

מהאיברים זמן הריצה של פעולת n/logn לפחות אבל עלW.Cבמקרה

O(logn)חיפוש הוא נתונים אינם ל הוספה והוצאה של איברים למבני הה שיצ זמני הר-

. וגבליםמ

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

הצע מבנה נתונים שאיבריו הם מספרים טבעיים והוא עונה לדרישות ....2222

). מציין את מספר האיברים במבנה הנתונים nכאשר (הבאות

O(logn)וספת איבר למבנה מבוצעת בזמן ה- O(logn) מחיקת איבר מהמבנה מבוצעת בזמן - O(logn) חיפוש איבר במבנה מבוצע בזמן - אם קיימים (x = 3y שמקימים x,yבמבנה ) כלשהם( מציאת זוג מספרים -

.O(1)מבוצע בזמן ) כאלו

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

התומך ) עם חזרות( של מספרים שלמים Sהצע מבנה נתונים עבור קבוצה ....3333 בפעולות

): S מציין את מספר האיברים השונים בקבוצה nכאשר ( הבאות

- insert(x)ופע של מספר הוספת מx לקבוצה S) במידה והמספרx לא

O(logn)מבוצעת בזמן ) לקבוצההוא מתוסף S -קיים ב - delete(x) מחיקת מופע של מספר x מהקבוצה S) במידה

מבוצעת ) S -מ הוא מוצא S מופיע רק פעם אחת בקבוצה xוהמספר

.O(logn)בזמן - multiplicity(x) מחזירה את הריבוי של x) כלומר את מספר המופעים

.O(logn)בזמן ) S - בxשל

- max_val()מחזירה את המספר המקסימלי ב - S בזמן O(1).

- max_mull()מחזירה את הריבוי המקסימלי ב - S בזמן O(1) .

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

Page 82: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

116

תאר באופן . תאר מבנה נתונים התומך בפעולות הבאות בסיבוכיות הנדרשת ....4444ניתן . ריצה שלהםה זמן אתמילולי את האלגוריתמים למימוש הפעולות ונתח

.בכיתהלהסתמך על אלגוריתמים שהוצגו

• init – בהינתן רשימה לא ממוינת של Nאתחל את המבנה בזמן , מספרים

O(NlogN). • insert(x) – הכנס איבר חדש x למבנה בזמן O(logN). • find_min, find_max –מכסימלי במבנה בזמן / החזר ערך מינימליO(1). • find_mid – את ערך ה( החזר את הערך החציון במבנה- (N+1)/2

בזמן ) זוגיN בגודלו אם N/2 -זוגי או את הערך ה- איNם בגודלו א

O(1). • del_min, del_max –מכסימלי מהמבנה בזמן / מחק ערך מינימלי

O(logN). • del_mid – מחק את הערך החציון מהמבנה בזמן O(logN) . • find(k) –מצא את האיבר ה -k בגודלו בזמן O(logN).

בקבוצה מכיל את השדות x שכל איבר איברים כךn של Dנתונה קבוצה ....5555

:הבאים

id(x) הינו מספר שמזהה את xבאופן יחיד

key(x) הינו מספר שמכיל את המפתח של x) . יתכנו מספר איברים שונים ב- D ). זהה מפתחעם

info(x) על האיבר ) כלשהי( אינפורמציה נוספתx.

O(logn) הוא D -הנח כי מספר המפתחות השונים ב

התומך בפעולות הבאות בסיבוכיות Dהצע מבנה נתונים עבור הקבוצה ) א :הנדרשת

insert(x) הוספת איבר x לקבוצה D בזמן )O(log logn delete(k) מחיקת איבר כלשהו בעל מפתח k מהקבוצה D

O(log logn( בזמן search(k)תח מציאת איבר כלשהו בעל מפkבקבוצה D בזמן )O(log logn

ריצה הזמן את תאר באופן מילולי את האלגוריתמים למימוש הפעולות ונתח . ניתן להסתמך על אלגוריתמים שהוצגו בכיתה. שלהם

התומך בפעולות הבאות בסיבוכיות Dהצע מבנה נתונים עבור הקבוצה ) ב :הנדרשת

insert(x) הוספת איבר x לקבוצה Dמן בז )O(logn search_and_delete(k,id) בהינתן מפתח האיבר)k ( והמזהה היחיד שלו)id (

O(logn( בזמן Dמהקבוצה חיפוש האיבר ומחיקתו search(k) מציאת איבר כלשהו בעל מפתח kבקבוצה D בזמן )O(log logn

ונתח זמן ריצה תאר באופן מילולי את האלגוריתמים למימוש הפעולות . ניתן להסתמך על אלגוריתמים שהוצגו בכיתה. שלהם

Page 83: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

117

התומך) עם חזרות( של מספרים שלמים Sהצע מבנה נתונים עבור קבוצה ....6666 שנמצאים השוניםהשוניםהשוניםהשונים הוא חסם על מספר האיברים nכאשר ( בפעולות הבאות

): בו זמניתS - ב

- init(S)בנה הנתונים בזמן אתחל את מO(n)במקרה הגרוע .

- delete(x) מחיקת מופע של מספר x מהקבוצה S) במידה

) S - הוא מוצא מS מופיע רק פעם אחת בקבוצה x והמספר . בממוצעO(1) בזמן

- multiplicity(x) מחזירה את הריבוי של x) ים כלומר את מספר המופע

. בממוצעO(1)בזמן ) S - בx של

- Print_same_mul_as(x) מדפיסה את מפתחות כל האיברים שהריבוי

, במקרה הגרועO(k) + בממוצע O(1)בזמן , x שלהם שווה לריבוי של

.x מציין את מספר האיברים שהריבוי שלהם זהה לריבוי של k כאשר

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

כמספר בינארי k כיצוג המספר bin(n,k) נגדיר את kלכל מספר טבעי ....7777

.01001 הנו המספר הבינארי bin(5,9), לדוגמה .nבאורך ותומך ) ללא חזרות( שמכיל מספרים טבעיים הציעי מבנה נתונים/הצע

N - הבינארי של המספרים וג מיצג את אורך הייצוnכאשר , בפעולות הבאות :מיצג את מספר המספרים שבמבנה

הוספת המספר למבנה , n וייצוגו הבינארי באורך kבהינתן מספר טבעי •

.O(maxlogN,nlogn)בזמן .O(logN)נה בזמן חיפוש המספר במבkבהינתן מספר טבעי • חיפוש המספר והוצאתו מהמבנה במידה והוא kבהינתן מספר טבעי •

.O(maxlogN,n)קיים בזמן i - מציאת מספר המספרים במבנה הנתונים שהביט הiבהינתן אינדקס •

.O(1)שלהם דלוק בזמן כ מספר הביטים הדלוקים בכל המספרים במבנה הנתונים "מציאת סה •

.O(1)בזמן מציאת מספר iואינדקס ) הבינאריוללא ייצוג (kמספר טבעי בהינתן •

בזמן k הבינארי של ג בייצוi -הביטים הדלוקים בעלי אינדקס קטן מ

O(log(maxN,n)).

.ל"י באופן מילולי איך מתבצעת כל אחת מהפעולות הנ/תאר

Page 84: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

118

שבו יש בנוסף לשדות הרגילים2-3 בעץ k -להלן פונקציה למציאת האיבר ה שמכיל את מספר העלים שנמצאים בתת העץx לכל צומת size(x)שדה ).Txדהינו בתת העץ . (x ששורשו T של

θ(logn): סיבוכיות זמן הריצה

find-element(T,k) /* find k-th element of a rank 2-3 tree T */ x=root(T) if (x==NULL || size(x) < k) return NULL while true if (first(x)=NULL) return x /* x is a leaf , return it */ if (size(first(x)) ≥ k) x=first(x) continue if (size(first(x)) + size(second(x)) ≥ k) k=k-size(first(x)) x=second(x) continue k=k-(size(first(x)) + size(second(x))) x=third(x)

Page 85: AVL ץץעע ץע - Netanya Academic Collegemars.netanya.ac.il/~datastr/RESOURCES/hoveret-2.pdf · 2013-02-28 · 35 AVL ץץעע ץע: אבה יאנתה תא םייקמש יראניב

119

שבו יש 2-3 בעץ k -ספר האיברים שהמפתח שלהם קטן מפונקציה למציאת מלהלן שמכיל את מספר העלים שנמצאים x לכל צומת size(x)שדה בנוסף לשדות הרגילים

).Txדהינו בתת העץ . (x ששורשו Tשל בתת העץ

θ(logn): סיבוכיות זמן הריצה

find-munber-of-elements(T,k) /* find the number of elements having a key less than k, of a rank 2-3 tree T */ x=root(T) if (x==NULL) return 0 count=0 while true if (first(x)=NULL) return count+1 /* x is a leaf , return count +1 +1 is added for the leaf itself */ if (s2(x) ≥ k) x=first(x) continue if (third(x)==NULL || s3(x) ≥ k) count=count+size(first(x)) x=second(x) continue count=count+size(first(x))+size(second(x)) x=third(x)