SlideShare a Scribd company logo
1 of 16
Download to read offline
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫נתונים‬ ‫מבני‬
‫לונדון‬ ‫ערן‬ ‫ד"ר‬
I ‫חלק‬
‫מיון‬
‫ואז‬ ‫הבעיה‬ ‫את‬ ‫להגדיר‬ ‫כל‬ ‫קודם‬ ‫ראוי‬
...‫לפתרונה‬ ‫דרכים‬ ‫להציע‬
‫מיון‬ ‫המושג‬ ‫של‬ ‫הגדרה‬ 0.1
‫בגודל‬ A ‫מערך‬ ‫הוא‬ ‫שלו‬ ‫הקלט‬ ‫אשר‬ ‫אלגוריתם‬ ‫הוא‬ ‫מיון‬
:n
A = [a1, a2, . . . , an]
‫או‬ ‫עולה‬ ‫בסדר‬ ,‫המערך‬ ‫של‬ 1
‫פרמוטציה‬ ‫הינו‬ ‫הפלט‬ ‫ואילו‬
:‫דהיינו‬ ,‫יורד‬
A = aσ(1), aσ(2), . . . , aσ(n)
.aσ(1) ≤ aσ(2) ≤ · · · ≤ aσ(n) :‫כאשר‬
Sorts in) ‫במקום‬ ‫ממין‬ ‫מכונה‬ ‫מיון‬ ‫אלגוריתם‬ 0.1 ‫הגדרה‬
,‫כלומר‬ ,n‫ב־‬ ‫תלוי‬ ‫אינו‬ ‫הנוספים‬ ‫התאים‬ ‫מספר‬ ‫אם‬ (place
.O (1) ‫־‬ ‫קבוע‬ ‫הוא‬ ‫הנדרשים‬ ‫הנוסיפים‬ ‫התאים‬ ‫מספר‬
‫ניתן‬ .‫במערך‬ ‫האיברים‬ ‫של‬ ‫כלשהו‬ ‫סדר‬ ‫כלומר‬ .‫פרמוטציה=תמורה‬1
‫)עמוד‬ 12.5 ‫בסעיף‬ ‫אלגבריים‬ ‫מבנים‬ ‫של‬ ‫בסיכום‬ ‫פרמוטציות‬ ‫על‬ ‫עוד‬ ‫לקרוא‬
.(8 ‫)עמוד‬ 18 ‫ובפרק‬ (SX :‫שם‬ ‫שנקרא‬ ‫מה‬ ,5
(Heapsort) ‫ערימה‬ ‫מיון‬ 1
‫ערימה‬ ‫הגדרת‬ 1.1
‫עץ‬ ‫כמו‬ ‫להציגו‬ ‫ניתן‬ ‫אשר‬ ‫מערך‬ ‫הינה‬ (‫)בינארית‬ ‫ערימה‬
‫מתאים‬ ‫בעץ‬ ‫קודקוד‬ ‫כל‬ ‫כאשר‬ ‫מלא‬ ‫כמעט‬ ‫או‬ ‫מלא‬ ‫בינארי‬
.2
‫במערך‬ ‫לתא‬
(‫)השורה‬ ‫הרמה‬ ‫מלבד‬ ‫הרמות‬ ‫בכל‬ ‫מלא‬ ‫הינו‬ ‫העץ‬ ‫־‬
‫שיכולה‬ (‫מלא‬ ‫כמעט‬ ‫הינו‬ ‫העץ‬ ‫שבהם‬ ‫)במקרים‬ ‫האחרונה‬
‫השמאלי‬ ‫מהקצה‬ ‫מלאה‬ ‫תהיה‬ ‫היא‬ ‫אבל‬ ‫שלמה‬ ‫לא‬ ‫להיות‬
‫־‬ (‫)שורה‬ ‫רמה‬ ‫באותה‬ ‫כלשהו‬ ‫לקודקוד‬ ‫עד‬
:‫נסמן‬
.‫המערך‬ ‫גודל‬ ‫־‬ length [A]
.‫בערימה‬ ‫האלמנטים‬ ‫מספר‬ ‫־‬heap − size [A]
‫שלא‬ ‫)מכיוון‬ heap − size [A] ≤ length [A] ‫ש־‬ ‫כמובן‬
.(‫המערך‬ ‫לגודל‬ ‫זהה‬ ‫יהיה‬ ‫הערימה‬ ‫גודל‬ ‫תמיד‬
:‫עצים‬ ‫לגבי‬ ‫תזכורת‬
.2 ‫היותר‬ ‫לכל‬ ‫היא‬ ‫קודקוד‬ ‫כל‬ ‫של‬ ‫הדרגה‬ ‫־‬ ‫בינארי‬ ‫עץ‬ l
‫ולכל‬ ‫העומק‬ ‫באותו‬ ‫העלים‬ ‫כל‬ ‫־‬ ‫שלם‬ ‫בינארי‬ ‫עץ‬ l
.2 ‫דרגה‬ ‫הקודקודים‬
2 ‫שדרגתו‬ ‫או‬ ‫עלה‬ ‫הוא‬ ‫קודקוד‬ ‫כל‬ ‫־‬ ‫מלא‬ ‫בינארי‬ ‫עץ‬ l
.‫בדיוק‬
:‫העץ‬ ‫בנוי‬ ‫בעיקרון‬ ‫וככה‬ ,A [1] ‫הינו‬ ‫העץ‬ ‫שורש‬
ai
2i 2i+1
b c
.a ≥ b ∧ a ≥ c :‫שלו‬ ‫מהילדים‬ ‫גדול‬ ‫יהיה‬ ‫תמיד‬ ‫האבא‬
:(i = 1) ‫השורש‬ ‫אינו‬ ‫שהוא‬ ‫קודקוד‬ ‫לכל‬ ‫אחרות‬ ‫במילים‬
.A [Parent (i)] ≥ A [i]
‫בשורש‬ ‫נמצא‬ ‫בערימה‬ ‫גבוה‬ ‫הכי‬ ‫הערך‬ :‫מסקנה‬
!‫העץ‬
:(‫בתרשים‬ ‫)כמתואר‬ ‫לזכור‬ ‫כדאי‬
Parent (i) = i
2
Left (i) = 2i
Right (i) = 2i + 1
‫בעץ‬ (‫)קודקוד‬ ‫צומת‬ ‫של‬ ‫גובה‬ ‫הגדרת‬ 1.1.1
‫מטה‬ ‫כלפי‬ ‫המסילה‬ ‫ע"י‬ ‫מוגדר‬ ‫בעץ‬ ‫קודקוד‬ ‫של‬ ‫הגובה‬
‫רחוק‬ ‫הכי‬ ‫לעלה‬ ‫עד‬ ‫קודקוד‬ ‫מאותו‬ ‫בעץ‬ ‫לעבור‬ ‫שצריך‬
‫)זה‬ ‫ערימה‬ ‫הוא‬ ‫מערך‬ ‫כל‬ ‫לא‬ .‫מדובר‬ ‫מערך‬ ‫איזה‬ ‫על‬ ‫תלוי‬ ‫שזה‬ ‫כמובן‬2
.(‫שבו‬ ‫הערכים‬ ‫במיקומי‬ ‫תלוי‬
1
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫כמה‬ ‫כמובן‬ ‫להיות‬ ‫יכולות‬ ,‫נמוכה‬ ‫הכי‬ ‫ברמה‬ ‫עלה‬ ‫)כלומר‬
.(‫מעגלים‬ ‫)ללא‬ ‫פשוטה‬ ‫מסילה‬ ‫ע"י‬ ,(‫כאלה‬ ‫דרכים‬ ‫או‬ ‫מסילות‬
:(‫ערימה‬ ‫שאינו‬ ‫בינארי‬ ‫עץ‬ ‫)ניקח‬ ‫למשל‬
19
11 4
7 10
5 3
.2 ‫הינו‬ 11 ‫קודקוד‬ ‫של‬ ‫הגובה‬
.0 ‫הינו‬ 3 ‫קודקוד‬ ‫של‬ ‫הגובה‬
.1 ‫הינו‬ 10 ‫של‬ ‫הגובה‬
‫־‬ ‫שלנו‬ ‫במקרה‬ ,‫השורש‬ ‫של‬ ‫הגובה‬ ‫הינו‬ ‫העץ‬ ‫של‬ ‫הגובה‬ ,‫לכן‬
.3 ‫־‬ 19 ‫קודקוד‬ ‫של‬ ‫הגובה‬ ‫זה‬
‫־‬ ‫היא‬ ‫איברים‬ n ‫עם‬ ‫ערימה‬ ‫של‬ ‫הגובה‬ 1.1 ‫טענה‬
.Θ (log n)
‫בערימה‬ ‫שונים‬ ‫שימושים‬ 1.2
‫הריצה‬ ‫זמן‬ ‫הפעולה‬
O (log n) HEAPIFY
Θ (n) BUILD-HEAP
O (n log n) HEAPSORT
O (log n) EXTRACT-MAX
O (log n) INSERT
HEAPIFY 1.2.1
.‫הערימה‬ ‫מיון‬ ‫מאלגוריתם‬ ‫חלק‬ ‫מהווה‬ ‫אשר‬ ‫אלגוריתם‬ ‫זהו‬
:‫האלגוריתם‬ ‫קלט‬
.‫במערך‬ ‫לאינדקס‬ ‫מצביע‬ ‫־‬ i ,‫מערך‬ ‫־‬ A
‫בעצם‬ ‫שאנחנו‬ (‫סדר‬ ‫קצת‬ ‫לעשות‬ ‫)בשביל‬ ‫כאן‬ ‫לציין‬ ‫חשוב‬
‫אבל‬ ,‫מערך‬ ‫בעצם‬ ‫היא‬ ‫ערימה‬ ,‫כלומר‬ ,‫מערך‬ ‫עם‬ ‫עובדים‬
‫שלם‬ ‫בינארי‬ ‫עץ‬ ‫והיא‬ ‫מערך‬ ‫לאותו‬ ‫נוחה‬ ‫הצגה‬ ‫דרך‬ ‫ישנה‬
.(‫שלם‬ ‫כמעט‬ ‫)או‬
‫אזי‬ ,‫בעץ‬ ‫קודקוד‬ ‫ניקח‬ ‫אם‬ :‫הקלט‬ ‫לגבי‬ ‫הנחה‬
:‫כלומר‬ ,‫שמשמאלו‬ ‫והתת־עץ‬ ‫שמימינו‬ ‫התת־עץ‬
.‫ערימות‬ ‫הינן‬ ,Left (i) , Right (i)
‫קטן‬ A [i] ‫קודקוד‬ ‫שאותו‬ ‫להיות‬ ‫יכול‬ ‫שעדיין‬ ‫לזכור‬ ‫חשוב‬
:‫למשל‬ ,‫שלו‬ ‫הילדים‬ ‫משני‬
12
98 35
‫הקודקוד‬ ‫את‬ ‫נבחר‬ ‫שאם‬ ‫לנו‬ ‫מבטיחה‬ ‫הקלט‬ ‫לגבי‬ ‫ההנחה‬
‫מה‬ ‫כל‬ ‫אזי‬ (‫הכפול‬ ‫העיגול‬ ‫עם‬ ‫)הקודקוד‬ 12 ‫בו‬ ‫שיש‬
‫הם‬ 35, 98‫)ש־‬ ‫ערימה‬ ‫הוא‬ ,‫ומשמאלו‬ ‫מימינו‬ ,‫מתחתיו‬ ‫שיש‬
.((‫העצים‬ ‫שני‬ ‫)של‬ ‫הערימות‬ ‫שתי‬ ‫של‬ ‫השורשים‬
‫מופיעים‬ ‫אינם‬ ‫הם‬ ‫אך‬ 98, 35‫ל־‬ ‫מתחת‬ ‫קודקודים‬ ‫יש‬
.‫בשרטוט‬
3
‫גדול‬ ‫הקודקוד‬ ‫האם‬ :‫בודקים‬ ‫אנחנו‬ :‫האלגוריתם‬ ‫רעיון‬
.‫סיימנו‬ ‫אז‬ ‫כן‬ ‫אם‬ ?‫שלו‬ ‫הבנים‬ ‫משני‬
.‫בניו‬ ‫משני‬ ‫הגדול‬ ‫עם‬ ‫אותו‬ ‫מחליפים‬ ‫־‬ ‫לא‬ ‫אם‬
‫לקודקוד‬ ‫הדבר‬ ‫אותו‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ,‫שהחלפנו‬ ‫אחרי‬ ,‫כעת‬
:‫כלומר‬ ,‫שהחלפנו‬
,(‫הכפול‬ ‫העיגול‬ ‫עם‬ ‫)זה‬ 12 ‫הערך‬ ‫עם‬ ‫בקודקוד‬ ‫שבחרנו‬ ‫נניח‬
:‫כך‬ ‫יראה‬ ‫זה‬ ‫ההחלפה‬ ‫אחרי‬ ‫אזי‬
98
12 35
‫הילדים‬ ‫עם‬ ‫בדיוק‬ ‫בדיוק‬ ‫אותה‬ ‫את‬ ‫נבצע‬ ‫אנחנו‬ ‫כעת‬
...‫שוב‬ ‫נחליף‬ ‫הצורך‬ ‫ובמידת‬ 12 ‫של‬ ‫החדשים‬
...‫לעלים‬ ‫שנגיע‬ ‫עד‬ ,‫הלאה‬ ‫וכך‬
‫הנבחר‬ ‫הקודקוד‬ ‫של‬ ‫מהמיקום‬ ‫שהחל‬ ‫כמובן‬ ‫הוא‬ ‫הפלט‬
...‫ערימה‬ ‫לנו‬ ‫יש‬ ‫בהתחלה‬
‫־‬ ‫הוא‬ n ‫בגודל‬ ‫ערימה‬ ‫עבור‬ ‫זה‬ ‫אלגוריתם‬ ‫של‬ ‫הריצה‬ ‫זמן‬
.O (log n)
BUILD-HEAP ‫ערימה‬ ‫בניית‬ 1.2.2
.O (n) ‫הינו‬ ‫נתון‬ ‫ממערך‬ ‫ערימה‬ ‫בניית‬ ‫של‬ ‫הריצה‬ ‫זמן‬
,‫העלים‬ ‫את‬ ‫לבדוק‬ ‫צורך‬ ‫לנו‬ ‫אין‬ :‫בקצרה‬ ‫הרעיון‬ ‫)התחלת‬
‫נתחיל‬ ‫אנחנו‬ ‫ממערך‬ ‫ערימה‬ ‫נבנה‬ ‫אנחנו‬ ‫כאשר‬ ‫לכן‬
. length(A)
2 :‫שזה‬ ‫עלים‬ ‫שאינם‬ ‫מהקודקודים‬
‫)וככה‬ length(A)
2 ‫שמספרו‬ ‫מהקודקוד‬ ‫נתחיל‬ ,‫כלומר‬
‫בינארי‬ ‫שבעץ‬ ‫בעבר‬ ‫הוכחנו‬ ‫כי‬ ,‫העלים‬ ‫כל‬ ‫על‬ ‫מדלגים‬ ‫אנחנו‬
‫הקודקוד‬ ‫ולכן‬ ,‫עלים‬ ‫שאינם‬ ‫קודקודים‬ length(A)
2 ‫יש‬
‫אינו‬ ‫בוודאי‬ ‫הוא‬ ‫אזי‬ length(A)
2 ‫הוא‬ ‫הסידורי‬ ‫שמספרו‬
‫הם‬ ‫השאר‬ ‫כל‬ ,‫ממנו‬ ‫קטן‬ ‫הסידורי‬ ‫שמספרם‬ ‫אלה‬ ‫וכך‬ ‫עלה‬
‫מהקודקודים‬ ‫אחד‬ ‫כל‬ ‫על‬ ,1 ‫מספר‬ ‫לקודקוד‬ ‫עד‬ ‫ונרד‬ (‫עלים‬
.‫במערך‬ ‫התא‬ ‫־‬ ‫או‬ ‫־‬ ‫הקודקוד‬ ‫לערך‬ ‫היא‬ ‫כמובן‬ ‫הכוונה‬3
2
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
.(...‫אינדוקציה‬ ‫יש‬ ‫גם‬ ‫הדרך‬ ‫בהמשך‬ .HEAPIFY ‫נעשה‬
:‫למשל‬
98
12 35
32 22 29
‫ש"מספרו‬ ‫הקודקוד‬ ‫כי‬ 35‫מ־‬ ‫מתחילים‬ ‫היינו‬ ‫הזה‬ ‫במקרה‬
‫גבוה‬ ‫הכי‬ ‫הסידורי‬ ‫המספר‬ ‫עם‬ ‫הקודקוד‬ ‫הוא‬ ,3 ,"‫הסידורי‬
...‫עלה‬ ‫שאינו‬
‫)כי‬ 12 ‫הוא‬ ‫שערכו‬ ‫לקודקוד‬ ‫ממשיכים‬ ‫אנחנו‬ ‫מכן‬ ‫לאחר‬
.(2 ‫הוא‬ ‫הסידורי‬ ‫מספרו‬
HEAPSORT ‫־‬ ‫הערימה‬ ‫מיון‬ ‫אלגוריתם‬ 1.3
(1.2‫)ב־‬ ‫הנ"ל‬ ‫הפעולות‬ ‫הפעולות‬ ‫שתי‬ ‫את‬ ‫שהגדרנו‬ ‫אחרי‬
‫באמצעות‬ ‫למיון‬ ‫אלגוריתם‬ ‫בעזרתן‬ ‫לבנות‬ ‫יכולים‬ ‫אנחנו‬
.‫ערימה‬
‫באופן‬ ‫ויעבוד‬ ‫ערימה‬ ‫כבר‬ ‫שהוא‬ ‫מערך‬ ‫שיקבל‬ ‫אלגוריתם‬
:‫הבא‬
"‫"בצד‬ ‫בתא‬ ‫אותן‬ ‫וישים‬ ‫העץ‬ ‫שורש‬ ‫את‬ ‫יוציא‬ ‫הוא‬ ‫פעם‬ ‫כל‬
A [i] ‫את‬ ‫וישים‬ ,(‫ביותר‬ ‫הגדול‬ ‫הערך‬ ‫עם‬ ‫התא‬ ‫יהיה‬ ‫זה‬ ‫)כי‬
.‫השורש‬ ‫במקום‬ ‫קטן‬ ‫הכי‬ ‫הערך‬ ‫עם‬ ‫העלה‬ ‫־‬
‫פעם‬ ‫ושוב‬ ‫־‬ (‫)לשורש‬ HEAPIFY (A, 1) ‫עושים‬ ‫אז‬
.‫בשורש‬ ‫שיש‬ ‫מה‬ ‫את‬ HEAPIFY ‫ה־‬ ‫אחרי‬ ,‫מוציאים‬
:‫למשל‬
‫ובמקומו‬ 98 ‫את‬ ‫שנוציא‬ ‫הוא‬ ‫לנו‬ ‫שיהיה‬ ‫מה‬ ‫הזה‬ ‫במקרה‬
‫־‬ 12 ‫את‬ ‫נשים‬
98
12 35
:‫הוא‬ ‫שנקבל‬ ‫מה‬ ,‫ולכן‬
12
98 35
:‫ונקבל‬ ‫העץ‬ ‫לראש‬ HEAPIFY ‫נעשה‬ ‫כעת‬
35
98 12
‫הסתיים‬ ‫האלגוריתם‬ ‫קודקודים‬ ‫שני‬ ‫רק‬ ‫לנו‬ ‫שיש‬ ‫בגלל‬ ,‫כעת‬
‫־‬ ‫וקיבלנו‬ 12‫ה־‬ ‫את‬ ‫ואז‬ 98‫ה־‬ ‫לפני‬ ‫השורש‬ ‫את‬ ‫)שמים‬
.(12, 35, 98
‫מהיר‬ ‫מיון‬ 2
‫ההפרד‬ ‫בשיטת‬ ‫שעובד‬ ‫רקורסיבי‬ ‫אלגוריתם‬ ‫הוא‬ ‫מהיר‬ ‫מיון‬
‫חלקים‬ ‫לשני‬ ‫המערך‬ ‫את‬ ‫מחלקים‬ ‫אנחנו‬ ,‫כלומר‬ ,‫ומשול‬
,‫כלומר‬ ‫־‬ ‫מהם‬ ‫אחד‬ ‫בכל‬ "‫ו"שולטים‬ ‫רקורסיבי‬ ‫באופן‬
‫גם‬ ‫)ולכן‬ ‫הגדול‬ ‫את‬ ‫כמו‬ 2‫ל־‬ ‫מהחלקים‬ ‫אחד‬ ‫כל‬ ‫ממינים‬
.(2‫ל־‬ ‫מחלקים‬ ‫אותו‬
‫מקבלים‬ ‫אנחנו‬ ‫המערכים‬ ‫תתי‬ ‫את‬ ‫משלבים‬ ‫אנחנו‬ ‫וכאשר‬
‫ההתחלתי‬ ‫המערך‬ ‫גם‬ ‫בעצם‬ ‫וכך‬ .‫ממוינים‬ ‫כבר‬ ‫שהם‬ ‫אותם‬
.‫ממוין‬ ‫כמערך‬ ‫כפלט‬ ‫מתקבל‬
‫ששום‬ ‫אסור‬ ‫המערך‬ ‫את‬ ‫מפצלים‬ ‫אנחנו‬ ‫כשאר‬ :‫לזכור‬ ‫חשוב‬
‫אזי‬ n ‫בגודל‬ ‫מערך‬ ‫לנו‬ ‫יש‬ ‫אם‬ ‫כלומר‬ ,‫ריק‬ ‫יהיה‬ ‫תת־מערך‬
‫והצד‬ 1 ≤ i ≤ n − 1 ‫בגודל‬ ‫יהיה‬ ‫אחד‬ ‫צד‬ 2‫ל־‬ ‫בחלוקה‬
.n − i ‫בגודל‬ ‫יהיה‬ ‫השני‬
‫ובמקרה‬ O (n log n) ‫הינו‬ ‫מהיר‬ ‫מיון‬ ‫של‬ ‫הממוצע‬ ‫הריצה‬ ‫זמן‬
.O n2
‫הינו‬ ‫הריצה‬ ‫זמן‬ ‫ביורת‬ ‫הגרוע‬
?‫עובד‬ ‫מהיר‬ ‫מיון‬ ‫אלגוריתם‬ ‫כיצד‬ 2.1
:‫למשל‬ ,‫כלשהו‬ ‫מערך‬ ‫לנו‬ ‫נתון‬
6 3 8 1 4 2
‫ולשם‬ ,(‫)הציר‬ ‫הפיבוט‬ ‫איבר‬ ‫הינו‬ ‫שנבחר‬ ‫מה‬ ‫כל‬ ‫ראישת‬
‫הציר‬ ‫להיות‬ ‫הראשון‬ ‫האיבר‬ ‫שהוא‬ 6 ‫את‬ ‫ניקח‬ ‫הפשטות‬
‫נבחר‬ ‫הפשטות‬ ‫בשביל‬ ‫אבל‬ ,‫אחר‬ ‫איבר‬ ‫גם‬ ‫להיות‬ ‫יכול‬ ‫)זה‬
‫שיהיה‬ ‫מה‬ ‫כל‬ ‫כי‬ ‫רוצים‬ ‫אנחנו‬ :‫למיין‬ ‫ונתחיל‬ ,(‫הראשון‬ ‫את‬
‫לו‬ ‫שווה‬ ‫או‬ ‫קטן‬ ‫יהיה‬ ‫משמאלו‬
?‫זאת‬ ‫עושים‬ ‫כיצד‬
:‫כלומר‬ ,‫הצדדים‬ ‫משני‬ ‫המערך‬ ‫את‬ ‫לסרוק‬ ‫מתחילים‬ ‫אנחנו‬
6 3 8 1 4 2
i
OO
j
OO
:‫הבא‬ ‫הדבר‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ‫כאת‬
‫יהיה‬ ‫עליו‬ ‫מצביע‬ j‫ש־‬ ‫שהאיבר‬ ‫עד‬ (i ‫)לכיוון‬ j ‫את‬ ‫מקדמים‬
,‫לפיבוט‬ ‫שווה‬ ‫או‬ ‫קטן‬
3
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫או‬ ‫גדול‬ ‫יהיה‬ ‫עליו‬ ‫יצביע‬i‫ש־‬ ‫שהאיבר‬ ‫עד‬ (j ‫)לכיוון‬ i ‫ואת‬
.‫לפיבוט‬ ‫שווה‬
.‫התאים‬ ‫בין‬ ‫נחליף‬ i < j ‫אם‬ ,‫כעת‬
‫מיון‬ ‫שוב‬ ‫ונעשוה‬ ‫חלקים‬ ‫לשני‬ ‫המערך‬ ‫את‬ ‫נחלק‬ ‫־‬ ‫אחרת‬
....‫מהחלקים‬ ‫אחד‬ ‫לכל‬ ‫מהיר‬
.(‫בודדים‬ ‫תאים‬ ‫שיש‬ ‫למצב‬ ‫שנגיע‬ ‫עד‬ ‫נמשיך‬ ‫)ככה‬
:‫שלנו‬ ‫במקרה‬ ,‫למשל‬
:‫האיברים‬ ‫בןי‬ ,‫נחליף‬ ‫ולכן‬ ‫מתקיים‬ ‫הזה‬ ‫התנאי‬ ‫ההתחלה‬ ‫על‬
2 3 8 1 4 6
i
OO
j
OO
‫איבר‬ ‫שנמצא‬ ‫עד‬ i ‫את‬ ‫נקדם‬ ‫וכמו־כן‬ ,1‫ב־‬ j ‫את‬ ‫ונקדם‬
:(6‫)ל־‬ ‫לפיבוט‬ ‫שווה‬ ‫או‬ ‫גדול‬ ‫שהוא‬
2 3 8 1 4 6
i
OO
j
OO
:‫בניהם‬ ‫ונחליף‬
2 3 4 1 8 6
i
OO
j
OO
‫ש־‬ ‫למצב‬ ‫נגיע‬ ‫שלב‬ ‫שבאיזשהו‬ ‫לב‬ ‫נשים‬
2 3 4 1 8 6
j
OO
i
OO
.(j ≤ i ‫)כלומר‬
:2‫ל־‬ ‫המערך‬ ‫את‬ ‫נחלק‬ ‫זה‬ ‫במקרה‬
2 3 4 1 8 6
....‫הלאה‬ ‫וכך‬ ‫מהמערכים‬ ‫אחד‬ ‫לכל‬ ‫מהיר‬ ‫מיון‬ ‫ונעשה‬
‫באותו‬ ‫עדיין‬ ‫מדובר‬ ‫כלומר‬ ,‫וירטואלית‬ ‫היא‬ ,‫כמובן‬ ‫החלוקה‬
.‫אותם‬ ‫לחבר‬ ‫צריך‬ ‫מכן‬ ‫שלאחר‬ ‫מערכים‬ ‫בשני‬ ‫ולא‬ ‫מערך‬
‫מיזוג‬ ‫מיון‬ 3
‫הינו‬ ‫שלו‬ ‫הריצה‬ ‫שזמן‬ ‫אלגוריתם‬ ‫הינו‬ ‫מיזוג‬ ‫מיון‬ ‫גם‬
.O (n log n)
‫הכללי‬ ‫הרעיון‬ ‫אבל‬ ,‫זה‬ ‫לאלגוריתם‬ ‫גירסאות‬ ‫מספר‬ ‫ישנן‬
:‫כזה‬ ‫הינו‬
‫אלגוריתם‬ ‫זה‬ ‫)גם‬ 2‫ל־‬ ‫המערך‬ ‫את‬ ‫מחלקים‬ ‫פעם‬ ‫כל‬ ‫אנחנו‬
‫את‬ 4
‫ממזגים‬ ‫ואז‬ ,‫לחלק‬ ‫ניתן‬ ‫לא‬ ‫שכבר‬ ‫עד‬ (‫ומשול‬ ‫הפרד‬
:‫למשל‬ ,‫המערכים‬
:2‫ל־‬ ‫נחלק‬
6 3 8 1 4 2
:2‫ל־‬ ‫נחלק‬ ‫פעם‬ ‫שוב‬ ‫וכעת‬
6 3 8 1 4 2
:‫פעם‬ ‫ושוב‬
6 3 8 1 4 2
:‫למזג‬ ‫נתחיל‬ ‫כעת‬
:‫מימין‬ ‫הגדול‬ ‫את‬ ‫ונשים‬ 2 ‫כל‬ ‫ניקח‬ ‫בהתחלה‬
3 6 1 8 2 4
‫הראשונים‬ ‫הזוגות‬ ‫שתי‬ ‫את‬ ‫נמזג‬ :‫הבא‬ ‫הדבר‬ ‫את‬ ‫נעשה‬ ‫כעת‬
‫שלבסוף‬ ‫הוא‬ ‫שחשוב‬ ‫מה‬ ‫אבל‬ ,‫למזג‬ ‫דרכים‬ ‫מיני‬ ‫כל‬ ‫)ישנן‬
.5
‫הכנסה‬ ‫מיון‬ ‫ע"י‬ ‫זאת‬ ‫לעשות‬ ‫ניתן‬ ,(‫ממוין‬ ‫מערך‬ ‫נקבל‬
:‫נקבל‬ ‫מכן‬ ‫ולאחר‬
1 3 6 8 2 4
.‫שונות‬ ‫גירסאות‬ ‫ישנן‬ ‫המיזוג‬ ‫לפעולת‬4
‫יחסית‬ ‫פשוט‬ ‫מיון‬ ‫שזה‬ ‫אורמ‬ ‫רק‬ ‫עצמו‬ ‫המיון‬ ‫על‬ ‫כאן‬ ‫אסביר‬ ‫לא‬ ‫אני‬5
.‫ממוין‬ ‫למערך‬ ‫איברים‬ ‫להכנסת‬ ‫השאר‬ ‫בין‬ ‫שמתאים‬
4
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫המערך‬ ‫את‬ ‫ונקבל‬ ‫האחרון‬ ‫הזוג‬ ‫את‬ ‫דרך‬ ‫באותה‬ ‫נמזג‬ ‫וכעת‬
...‫ממוין‬
1 2 3 4 6 8
‫לינארי‬ ‫בזמן‬ ‫מיונים‬ 4
‫הוא‬ ‫הריצה‬ ‫שזמן‬ ‫אומר‬ ‫)שזה‬ O (n) ‫ריצה‬ ‫בזמן‬ ‫מיונים‬ ‫ישנם‬
‫שמיון‬ ‫כדי‬ ‫הקלט‬ ‫על‬ ‫מסוימות‬ ‫הנחות‬ ‫ישנן‬ ...‫אבל‬ ,(‫לינארי‬
.‫יעבוד‬ ‫אכן‬ ‫זה‬
‫המושג‬ ‫את‬ ‫שנגדיר‬ ‫חשוב‬ ‫לינארי‬ ‫בזמן‬ ‫למיונים‬ ‫שניגש‬ ‫לפני‬
.‫יציב‬ ‫מיון‬ :‫הבא‬
‫אזי‬ ‫שווים‬ ‫איברים‬ ‫שני‬ ‫ויש‬ ‫שבמקרה‬ ‫מיון‬ ‫הינו‬ ‫יציב‬ ‫מיון‬
.‫נשמר‬ ‫שלהם‬ ‫הסדר‬ ‫המיון‬ ‫בסוף‬
21 ‫מספר‬ ‫ובתא‬ 7 3 ‫מספר‬ ‫בתא‬ ‫לנו‬ ‫יש‬ ‫במערך‬ ‫אם‬ ,‫למשל‬
‫שהיה‬ ‫זה‬ ‫אבל‬ ,‫צמודים‬ ‫יהיו‬ ‫ה־7־ים‬ ‫שני‬ ‫המיון‬ ‫בסוף‬ ‫אזי‬ ,7
.21 ‫בתא‬ ‫שהיה‬ ‫זה‬ ‫לפני‬ ‫יהיה‬ 3 ‫בתא‬
‫מנייה‬ ‫מיון‬ 4.1
‫קבוע‬ ‫ע"י‬ ‫הקלט‬ ‫את‬ ‫לחסום‬ ‫שניתן‬ ‫היא‬ ‫מניה‬ ‫במיון‬ ‫ההנחה‬
‫הינו‬ ‫בקלט‬ ‫גדול‬ ‫הכי‬ ‫האיבר‬ ‫אבל‬ n ‫הינו‬ ‫הקלט‬ ‫גודל‬ ‫כלומר‬
.n ‫כפול‬ K ‫קבוע‬ ‫כלומר‬ O (n) = K · n
?‫עובד‬ ‫הזה‬ ‫המיון‬ ‫כיצד‬
‫כמו‬ ‫מערך‬ ‫)אותו‬ A ‫המערך‬ ‫הינו‬ ‫לנו‬ ‫הנתון‬ ‫המערך‬ ‫נניח‬
B, C ‫עזר‬ ‫מערכי‬ ‫בשני‬ ‫נשתמש‬ ‫אזי‬ (‫הקודמות‬ ‫בדדוגמאות‬
.‫הממוין‬ ‫המערך‬ ‫יהיה‬ B ‫כאשר‬
‫ולכן‬ 8 ‫ע"י‬ ‫המערך‬ ‫אבירי‬ ‫את‬ ‫לחסום‬ ‫ניתן‬ ‫כי‬ ‫לראות‬ ‫ניתן‬
‫תדירויות‬ ‫את‬ ‫יכיל‬ C ‫מערך‬ .C ‫מערך‬ ‫של‬ ‫הגודל‬ ‫יהיה‬ ‫זה‬
.A ‫אברי‬
6 3 8 1 3 2
‫התא‬ ‫מספר‬ ‫את‬ ‫מציינת‬ ‫התחתונה‬ ‫)השורה‬ ‫יהיה‬ C ‫אזי‬
:(‫המקורי‬ ‫במערך‬ ‫שלו‬ ‫התידרות‬ ‫מה‬ ‫עצמו‬ ‫ובמערך‬
1 1 2 0 0 1 0 1
1 2 3 4 5 6 7 8
‫כלומר‬ ,‫המערך‬ ‫אברי‬ ‫את‬ ‫שנסכות‬ ‫הוא‬ ‫שנעשה‬ ‫מה‬ ‫כעת‬
‫התא‬ ‫של‬ ‫ערכו‬ ‫את‬ ‫נשים‬ ‫השני‬ ‫ובתא‬ ‫הראשון‬ ‫מהתא‬ ‫נתחיל‬
‫השני‬ ‫בתא‬ ‫שיש‬ ‫מה‬ ‫את‬ ‫נשים‬ ‫בשלישי‬ ,‫השני‬ ‫התא‬ + ‫הראשון‬
.‫האחרון‬ ‫התא‬ ‫עד‬ ‫הלאה‬ ‫וכך‬ ,‫השלישי‬ ‫שבתא‬ ‫הערך‬ +
:‫כך‬ ‫יראה‬ C ‫כעת‬
1 2 4 4 4 5 5 6
1 2 3 4 5 6 7 8
:B ‫הפלט‬ ‫מערך‬ ‫את‬ ‫לבנות‬ ‫נתחיל‬ ‫כעת‬
.j‫ב־‬ ‫ערכו‬ ‫את‬ ‫ונסמן‬A‫ב־‬ ‫האחרון‬ ‫התא‬ ‫אל‬ ‫נלך‬
.j ‫את‬ ‫נכניס‬ ‫ולשם‬ B [C [j]] ‫על‬ ‫נסתכל‬
‫הדבר‬ ‫אותו‬ ‫את‬ ‫ונעשה‬ 1‫ב־‬ C [j] ‫של‬ ‫ערכו‬ ‫את‬ ‫נוריד‬ ‫כעת‬
‫לתא‬ ‫שנגיע‬ ‫עד‬ ‫הלאה‬ ‫וכך‬ 1 ‫פחות‬ ‫המערך‬ ‫אורך‬ ‫עבור‬
.‫הראשון‬
:‫שלנו‬ ‫בדוגמא‬
j = 2 ‫בהתחלה‬
,‫אותו‬ ‫שעידכנו‬ ‫אחרי‬ ‫המערך‬ ‫על‬ ‫)מדברים‬ C ‫למערך‬ ‫נפנה‬
‫נראה‬ ‫השני‬ ‫בתא‬ ‫ונסתכל‬ (...‫למעלה‬ ‫ממש‬ ‫כאן‬ ‫שנמצא‬ ‫זה‬
2 ‫מספר‬ ‫בתא‬ ‫ונשים‬ B‫ל־‬ ‫נלך‬ ‫כעת‬ ,2‫ל־‬ ‫שווה‬ ‫שם‬ ‫שהערך‬
.1‫ב־‬ ‫הערך‬ ‫את‬ C‫ב־‬ ‫ונקטין‬ (2 ‫גם‬ ‫)שהוא‬ j ‫את‬
:‫כך‬ ‫יראה‬ C ‫מערך‬ ‫כעת‬
1 1 5 5 5 6 6 7
1 2 3 4 5 6 7 8
:‫כך‬ ‫נראה‬ ‫כבר‬ B ‫ומערך‬
• 2 • • • •
‫שערכו‬ ‫נראה‬ A‫ב־‬ ‫אחרון‬ ‫לפני‬ ‫האחד‬ ‫התא‬ ‫על‬ ‫נסתכל‬ ‫כעת‬
.j = 3 ‫ולכן‬ 3 ‫הוא‬
‫בתא‬ 3 ‫את‬ ‫נציב‬ ‫לכן‬ ,4 ‫שהוא‬ ‫ונראה‬ C [3] ‫על‬ ‫נסתכל‬ ‫כעת‬
:B ‫במערך‬ 4 ‫מספר‬
• 2 • 3 • •
...‫הלאה‬ ‫וכך‬ ‫בהתאם‬ C ‫את‬ ‫ונעדכן‬
.‫ממוין‬ ‫המערך‬ ‫את‬ ‫ונקבל‬ ‫כפלט‬ B ‫את‬ ‫נחזיר‬ ‫לבסוף‬
(Radix Sort) ‫בסיס‬ ‫מיון‬ 4.2
‫אותו‬ ‫לחסום‬ ‫שניתן‬ ‫הקלט‬ ‫על‬ ‫שמניח‬ ‫יציב‬ ‫מיון‬ ‫הוא‬ ‫גם‬
.O (n)‫ב־‬
5
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫המספרים‬ ‫שלכל‬ ‫דואגים‬ ‫שאנחנו‬ ‫הוא‬ ‫עושים‬ ‫שאנחנו‬ ‫מה‬
‫במידת‬ ‫לפני‬ ‫אפסים‬ ‫להוסיף‬ ‫גם‬ ‫)אפשר‬ ‫אורך‬ ‫אותו‬ ‫את‬ ‫יהיה‬
(‫האחדות‬ ‫)ספרת‬ ‫האחרונה‬ ‫מהספרה‬ ‫מתחילים‬ ‫ואז‬ ,(‫הצורך‬
:‫הבא‬ ‫באופן‬ ‫לפיה‬ ‫ממינים‬
‫הספרה‬ ‫לפי‬ ‫לערימות‬ ‫שבקלט‬ ‫המספרים‬ ‫את‬ ‫מחלקים‬
‫הספרה‬ ‫לפי‬ ‫השני‬ ‫על‬ ‫אחד‬ ‫מספר‬ ‫כל‬ ‫מסדרים‬ ‫ואז‬ ‫האחרונה‬
:‫כלומר‬ ,‫האחרונה‬
:‫הינו‬ ‫שלנו‬ ‫והקלט‬ ‫נניח‬
002 347 916 078
‫עומדה‬ ‫)בכל‬ ‫האחרונה‬ ‫הספרה‬ ‫לפי‬ ‫לנו‬ ‫מחולק‬ ‫כבר‬ ‫זה‬ ‫אזי‬
‫אותה‬ ‫עם‬ ‫מספרים‬ 2 ‫והיו‬ ‫במידה‬ ,‫אחרת‬ ‫אחרונה‬ ‫ספרה‬ ‫יש‬
,(‫לשני‬ ‫מתחת‬ ‫אחד‬ ‫אותם‬ ‫שמים‬ ‫היינו‬ ‫אזי‬ ,‫אחדות‬ ‫ספרת‬
:‫האחדות‬ ‫ספרת‬ ‫לפי‬ ‫השני‬ ‫על‬ ‫אחד‬ ‫אותם‬ ‫נערום‬ ‫כעת‬
002
916
347
078
‫אחד‬ ‫ונשים‬ ‫העשרות‬ ‫ספרת‬ ‫לפי‬ ‫לקבוצות‬ ‫זה‬ ‫את‬ ‫נחלק‬ ‫כעת‬
‫עשיתי‬ ‫לא‬ ‫לכן‬ ‫למעלה‬ ‫שיש‬ ‫מה‬ ‫את‬ ‫שוב‬ ‫)ונקבל‬ ‫שוב‬ ‫השני‬ ‫על‬
.(‫אותו‬ ‫תיארתי‬ ‫רק‬ ‫אלא‬ ‫הזה‬ ‫השלב‬ ‫את‬
‫נפזר‬ ‫כלומר‬ ,‫האחדות‬ ‫ספרת‬ ‫לפי‬ ‫זה‬ ‫את‬ ‫נעשתה‬ ‫־‬ ‫ולבסוף‬
:‫האחדות‬ ‫ספרת‬ ‫ע"פ‬ ‫המספרים‬ ‫את‬
002 078 374 916
‫המספרים‬ ‫את‬ ‫נקבל‬ ‫השני‬ ‫על‬ ‫אחד‬ ‫זה‬ ‫את‬ ‫נערום‬ ‫וכאשר‬
.(‫ממוינים‬ ‫הם‬ ‫כבר‬ ‫כי‬ ‫לראות‬ ‫)ניתן‬ .‫ממוינים‬
II ‫חלק‬
‫עצים‬
‫בינאריים‬ ‫חיפוש‬ ‫עצי‬ 5
:‫בעצים‬ ‫סימון‬ ‫לגבי‬ ‫תזכרות‬
.‫הקודקודים‬ ‫מספר‬ = n
.‫הצלעות‬ ‫מספר‬ = m
‫בסיסיים‬ ‫ומושגים‬ ‫הגדרה‬ 5.1
‫בן‬ ‫יש‬ ‫בו‬ ‫קודקוד‬ ‫שללכל‬ ‫בינארי‬ ‫עץ‬ ‫הוא‬ ‫בינארי‬ ‫חיפוש‬ ‫עץ‬
.‫והורה‬ ‫ימני‬ ‫ובן‬ ‫שמאלי‬
‫החסר‬ ‫את‬ ‫ממלאים‬ ‫אנחנו‬ ,‫חסרים‬ ‫הורה‬ ‫או‬ ‫אחד‬ ‫ילד‬ ‫אם‬
.NIL‫ב־‬
‫אחד‬ ‫את‬ ‫ניקח‬ .r ‫שורשו‬ ‫אשר‬ T ‫בינארי‬ ‫עץ‬ ‫לנו‬ ‫כי‬ ‫נניח‬
‫הינו‬ r → x ‫במסילה‬ y ‫קודקוד‬ ‫כל‬ ‫אזי‬ :x ‫בעץ‬ ‫הקודקודים‬
.x ‫של‬ ‫קדמון‬ ‫אב‬
‫צאצא‬ ‫הוא‬ x ‫אזי‬ ,x ‫של‬ ‫אב־קדמון‬ ‫הוא‬ y ‫אם‬ :‫לזכור‬ ‫כדאי‬
.y ‫של‬
‫אחרות‬ ‫במילים‬ ‫או‬ ,x ‫של‬ ‫הצאצים‬ ‫כל‬ ‫הינו‬ ‫־‬ x ‫של‬ ‫תת־העץ‬
.‫שורשם‬ ‫הוא‬ x‫ש־‬ ‫הקודקודים‬ ‫כל‬ ‫־‬
:‫בסיסיים‬ ‫מושגים‬ ‫שני‬ ‫נזכיר‬
.‫עלה‬ = ‫חיצוני‬ ‫קודקוד‬
.‫עלה‬ ‫שלא‬ ‫מה‬ = ‫פנימי‬ ‫קודקוד‬
1
2 3
6
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
.3‫ו־‬ 2 ‫של‬ ‫האבא‬ ‫הוא‬ 1
.‫אחים‬ ‫הם‬ 3‫ו־‬ 2 ‫וכמו־כן‬ ,1 ‫של‬ ‫הילדים‬ ‫הם‬ 3‫ו־‬ 2
.‫הורה‬ ‫לו‬ ‫שיאן‬ ‫בעץ‬ ‫היחיד‬ ‫הקודקוד‬ ‫הינו‬ ‫השורש‬
‫הדרגה‬ ‫נקראת‬ x ‫קודקוד‬ ‫של‬ (!‫צאצאים‬ ‫)לא‬ ‫הילדים‬ ‫מספר‬
.x ‫של‬
‫נקרא‬ r → x ‫המסילה‬ ‫אורך‬ ‫אזי‬ ‫העץ‬ ‫שורש‬ ‫הוא‬ r ‫אם‬
.x ‫של‬ ‫העומק‬
.‫העץ‬ ‫של‬ ‫גובהו‬ (‫מכונה‬ ‫)או‬ ‫נקרא‬ ‫העץ‬ ‫של‬ ‫גדול‬ ‫הכי‬ ‫והעומק‬
:‫למשל‬
4
6
1 8
9
.2 ‫היא‬ 6 ‫של‬ ‫הדרגה‬ ,1 ‫היא‬ 8 ‫של‬ ‫הדרגה‬
.2 ‫הוא‬ 6 ‫של‬ ‫והעומק‬ 1 ‫הוא‬ 8 ‫של‬ ‫העומק‬
.(‫העץ‬ ‫שורש‬ ‫הוא‬ 4) 3 = 4 ‫של‬ ‫לעומק‬ = ‫העץ‬ ‫גובה‬
.Key [x] ‫ע"י‬ ‫יסומן‬ ‫קודקוד‬ ‫בכל‬ ‫שנמצא‬ ‫הערך‬
‫בינארי‬ ‫עץ‬ 5.2
‫שאין‬ ‫או‬ ‫כאשר‬ ,‫קודקודים‬ ‫של‬ ‫סופית‬ ‫קבוצה‬ ‫של‬ ‫מבנה‬ ‫זהו‬
:6
‫זרות‬ ‫קבוצות‬ ‫משלוש‬ ‫מורכב‬ ‫שהוא‬ ‫או‬ ‫בכלל‬ ‫קודקודים‬ ‫לו‬
.‫עלה‬ ‫שהוא‬ ‫אחד‬ ‫קדוקוד‬ ˆ
.‫השמאלי‬ ‫תת־העץ‬ ‫שנקרא‬ ‫בינארי‬ ‫עץ‬ ˆ
.‫הימני‬ ‫תת־העץ‬ ‫שנקרא‬ ‫בינארי‬ ‫עץ‬ ˆ
.‫הריק‬ ‫העץ‬ ‫־‬ ‫נקרא‬ ‫קודקודים‬ ‫ללא‬ ‫בינארי‬ ‫עץ‬
‫בינארי‬ ‫חיפוש‬ ‫עץ‬ 5.3
:x ‫קודקוד‬ ‫עבור‬ :‫הבא‬ ‫הכלל‬ ‫מתקיים‬ ‫בינארי‬ ‫חיפש‬ ‫בעץ‬
Key [y] ≥ ‫אזי‬ x ‫של‬ ‫מימינו‬ ‫נמצא‬ y ‫קודקוד‬ ‫אם‬
‫מתקיים‬ ‫אזי‬ x ‫של‬ ‫משמאלו‬ ‫נמצא‬ y ‫קודקוד‬ ‫ואם‬ ,Key [x]
:‫למשל‬ ,Key [y] ≤ Key [x]
.‫אחת‬ ‫מקבוצה‬ ‫ביותר‬ ‫להיות‬ ‫לקודקוד‬ ‫אסור‬6
8
3 9
.8‫ה־‬ ‫הוא‬ x ‫קודקוד‬ ‫שלנו‬ ‫במקרה‬
‫בינאריים‬ ‫חיפוש‬ ‫בעצי‬ ‫טיולים‬ 5.4
,Inorder ‫ביארי‬ ‫חיפוש‬ ‫בעץ‬ ‫לטייל‬ ‫דרכים‬ ‫שלושה‬ ‫ישנן‬
Postorder‫ו־‬ Preorder
:‫הבא‬ ‫באופן‬ ‫פועלים‬ ‫תמיד‬ ‫אנחנו‬ ‫בעץ‬ ‫הטיולים‬ ‫שלושת‬ ‫בכל‬
,‫העץ‬ ‫שורש‬ ‫יהיה‬ ‫זה‬ ‫כלל‬ ‫)בדרך‬ ‫כלשהו‬ ‫קודקוד‬ ‫הינו‬ ‫הקלט‬
(‫כולו‬ ‫העץ‬ ‫את‬ ‫להדפיס‬ ‫נרצה‬ ‫אנחנו‬ ‫כי‬
,‫הימני‬ ‫העץ‬ ‫לתת‬ ‫ואז‬ ‫השמאלי‬ ‫לתת־העץ‬ ‫הולכים‬ ‫קודם‬ ‫אנחנו‬
.‫העלה‬ ‫ערך‬ ‫את‬ ‫מדפיסים‬ ‫אנחנו‬ ‫מתי‬ ‫היא‬ ‫השאלה‬
‫להמשיך‬ ‫לאן‬ ‫יותר‬ ‫שאין‬ ‫מתי‬ ‫מסימיים‬ ‫אנחנו‬ ‫שכאשר‬ ‫כמובן‬
.(‫ושמאלי‬ ‫ימני‬ ‫תת־עץ‬ ‫לו‬ ‫אין‬ ‫ואז‬ ‫לעלה‬ ‫הגענו‬ ‫)כי‬
:‫הבא‬ ‫לעץ‬ ‫יתחייסו‬ ‫הבאה‬ ‫בטבלה‬ ‫ההדפסה‬ ‫של‬ ‫הדוגמאות‬
6
4 8
1 5 7 9
‫בדוגמא‬ ‫ערך‬ ‫את‬ ‫מדפיסים‬ ‫מתי‬
‫העלה‬
‫הטיול‬ ‫סוג‬
1,4,5,6,7,8,9 ‫לתת‬ ‫שנכנסים‬ ‫אחרי‬
‫השמאלי‬ ‫העץ‬
Inorder
6,4,1,5,7,8,9 ‫שמגיעים‬ ‫ברגע‬
‫לקודקוד‬
‫שנכנסים‬ ‫)לפני‬
(‫השמאלי‬ ‫לתת־העץ‬
Preorder
1,5,4,7,9,8,6 ‫לתת‬ ‫שנכנסים‬ ‫אחרי‬
‫הימני‬ ‫העץ‬
Postorder
‫את‬ ‫מדפיסים‬ ‫תמיד‬ ‫אז‬ ‫לעלה‬ ‫מגיעים‬ ‫שכאשר‬ ‫לזכור‬ ‫חשוב‬
...‫אנחנו‬ ‫טיול‬ ‫של‬ ‫סוד‬ ‫באיזה‬ ‫משנה‬ ‫לא‬ ‫ערכו‬
O (n) ‫־‬ ‫והוא‬ ‫שווה‬ ‫הינו‬ ‫בעץ‬ ‫הטיולים‬ ‫של‬ ‫הריצה‬ ‫זמן‬
7
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫בעץ‬ ‫ומקסימלי‬ ‫מינמלי‬ ‫איבר‬ ‫חיפוש‬ 5.5
‫מהשורש‬ ‫מתחילים‬ ‫אנחנו‬ ‫־‬ ‫בעץ‬ ‫מינמלי‬ ‫איבר‬ ‫למצוא‬ ‫בשביל‬
‫בתת־‬ ‫המינמלי‬ ‫את‬ ‫למצוא‬ ‫רוצים‬ ‫אם‬ ‫כשלהו‬ ‫מקודקוד‬ ‫)או‬
.(‫עץ‬
‫הולכים‬ ‫הזמן‬ ‫כל‬ ‫אנחנו‬ ‫־‬ ‫המינימלי‬ ‫האיבר‬ ‫מציאת‬ ‫בשביל‬
.NIL ‫הוא‬ ‫הבא‬ ‫שהשמאלי‬ ‫עד‬ ‫שמאלה‬
.‫ימינה‬ ‫רק‬ ‫דבר‬ ‫אותו‬ ‫־‬ ‫המקסימלי‬ ‫האיבר‬ ‫לגבי‬
.O (log n) :‫אלו‬ ‫מפעולות‬ ‫אחת‬ ‫כל‬ ‫של‬ ‫הריצה‬ ‫זמן‬
‫לעץ‬ ‫איבר‬ ‫של‬ ‫הוספה‬ 5.6
.‫בלבד‬ ‫עלים‬ ‫מוסיפים‬ ‫אנחנו‬ ‫־‬ ‫פשוטה‬ ‫יחסית‬ ‫היא‬ ‫ההוספה‬
‫־‬ ‫העץ‬ ‫משורש‬ ‫מתחילים‬ ‫אנחנו‬ ‫להוסיף‬ ‫רוצים‬ ‫אנחנו‬ ‫כאשר‬
‫אנחנו‬ ‫־‬ ‫לו‬ ‫שווה‬ ‫או‬ ‫גדול‬ ‫להוסיף‬ ‫רוצים‬ ‫שאנחנו‬ ‫הערך‬ ‫אם‬
,‫השמאלי‬ ‫לבן‬ ‫הולכים‬
.‫הימני‬ ‫לבן‬ ‫הולכים‬ ‫אחרת‬
‫מההתחלה‬ ‫התהליך‬ ‫את‬ ‫מתחילים‬ ‫אנחנו‬ ‫קודקוד‬ ‫שם‬ ‫יש‬ ‫אם‬
‫אנו‬ ‫שבו‬ ‫לקדוקוד‬ ‫זה‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ‫השורש‬ ‫שבמקום‬ ‫רק‬
.‫כרגע‬ ‫נמצאים‬
.‫כעלה‬ ‫שלנו‬ ‫הערך‬ ‫את‬ ‫מוסיפים‬ ‫אנחנו‬ ‫קודקוד‬ ‫אין‬ ‫אם‬
!‫וסיימנו‬
O (log n) :‫הינו‬ ‫לעץ‬ ‫איבר‬ ‫הוספת‬ ‫של‬ ‫הריצה‬ ‫זמן‬
‫מהעץ‬ ‫איבר‬ ‫של‬ ‫השמטה‬ 5.7
‫או‬ ‫עלה‬ ‫להשמיט‬ ‫אוצים‬ ‫שאנחנו‬ ‫או‬ ‫אפרויות‬ ‫שתי‬ ‫ישנן‬
.‫עלה‬ ‫שאינו‬ ‫קודקוד‬ ‫להשמיט‬ ‫רוצים‬ ‫שאנחנו‬
‫את‬ ‫משמיטים‬ ‫פשוט‬ ‫בעיה‬ ‫אין‬ ‫אזי‬ ‫־‬ ‫עלה‬ ‫היני‬ ‫הקודקוד‬ ‫אם‬
.‫הקודקוד‬
:‫אזי‬ 9 ‫את‬ ‫להשמיט‬ ‫נרצה‬ ‫הבא‬ ‫מהעץ‬ ‫עם‬ ,‫למשל‬
8
3 9
⇓
8
3
‫פשוט‬ ‫אזי‬ ‫אחד‬ ‫בן‬ ‫לו‬ ‫יש‬ ‫אם‬ ‫אזי‬ ,‫עלה‬ ‫אינו‬ ‫הקודקוד‬ ‫אם‬
.‫היחיד‬ ‫הבן‬ ‫את‬ ‫שמים‬ ‫במקומו‬ ‫אותו‬ ‫מוחקים‬
‫צריכים‬ ‫אנחנו‬ ‫אזי‬ ‫בנים‬ ‫שני‬ ‫לו‬ ‫ויש‬ ‫עלה‬ ‫אינו‬ ‫הקודקוד‬ ‫אם‬
‫את‬ ‫לשים‬ ‫קודקוד‬ ‫אותו‬ ‫ובמקום‬ ‫שלו‬ ‫העוקב‬ ‫את‬ ‫למצוא‬
...‫העוקב‬
.O (log n) :‫הינו‬ ‫השמטה‬ ‫של‬ ‫הריצה‬ ‫זמן‬
‫עוקב‬ 5.7.1
‫הקודקוד‬ ‫הינו‬ ‫מסוים‬ ‫קודקוד‬ ‫של‬ ‫העוקב‬ ‫בינארי‬ ‫חיפוש‬ ‫בעץ‬
.‫ממנו‬ ‫הגדולים‬ ‫כל‬ ‫מבין‬ ‫קטן‬ ‫הכי‬ ‫הערך‬ ‫בעל‬
‫האיבר‬ ‫את‬ ‫מוצאים‬ ‫אנחנו‬ ‫העוקב‬ ‫את‬ ‫למצוא‬ ‫בשביל‬
‫ואז‬ ‫קודקוד‬ ‫אותו‬ ‫של‬ 7
‫השמאלי‬ ‫תת־העץ‬ ‫של‬ ‫המינימלי‬
.‫לעלה‬ ‫שנגיע‬ ‫עד‬ ‫ימינה‬ ‫ללכת‬ ‫מתחילים‬
‫קודם‬ 5.7.2
x ‫קודקוד‬ ‫של‬ ‫הקודם‬ ‫מציאת‬ ‫־‬ ‫הפוך‬ ‫רק‬ ‫בדיוק‬ ‫דבר‬ ‫אותו‬
:‫כך‬ ‫הינה‬
:‫לכן‬ ,‫הקטנים‬ ‫כל‬ ‫מבין‬ ‫גדול‬ ‫הכי‬ ‫האיבר‬ ‫את‬ ‫מחפשים‬ ‫אנחנו‬
‫ואז‬ x ‫של‬ ‫הימני‬ ‫תת־העץ‬ ‫של‬ ‫המקסימלי‬ ‫האיבר‬ ‫את‬ ‫נחפש‬
.‫לעלה‬ ‫שנגיע‬ ‫עד‬ ‫שמאלה‬ ‫הזמן‬ ‫כל‬ ‫נלך‬
:‫הערות‬
‫של‬ ‫הריצה‬ ‫זמן‬ ‫כמו‬ ‫הוא‬ ‫הקודם‬ ‫מציאת‬ ‫של‬ ‫הריצה‬ ‫זמן‬
.O (log n) :‫העוקב‬ ‫מציאת‬
‫השמאלי‬ ‫הבן‬ ‫כאשר‬ ‫המינימלי‬ ‫האיבר‬ ‫את‬ ‫לחפש‬ ‫מתחילים‬ ‫אנחנו‬ ,‫כלומר‬7
.‫העץ‬ ‫שורש‬ ‫יהיה‬ ‫קודקוד‬ ‫אותו‬ ‫של‬
8
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫שחורים‬ ‫אדומים‬ ‫עצים‬ 6
‫הגדרה‬ 6.1
‫קודקוד‬ ‫לכל‬ ‫אשר‬ ‫בינארי‬ ‫חיפוש‬ ‫עץ‬ ‫הינו‬ ‫אדום־שחור‬ ‫עץ‬
.8
‫שחור‬ ‫או‬ ‫באדום‬ ‫צבוע‬ ‫הוא‬ ‫־‬ ‫נוספת‬ ‫תוכנה‬ ‫ישנה‬
:‫תכונות‬ ‫ארבעה‬ ‫ישנן‬ ‫קודקוד‬ ‫לכל‬ ,‫כלומר‬
.(‫כמובן‬ ‫השורש‬ ‫)מלבד‬ ‫הורה‬ ˆ
.‫שמאלי‬ ‫בן‬ ˆ
.‫ימני‬ ‫בן‬ ˆ
.(‫שחור‬ ‫או‬ ‫)אדום‬ ‫צבע‬ ˆ
‫העץ‬ ‫תכונות‬ 6.1.1
:‫תכונות‬ ‫מספר‬ ‫קיימות‬ ‫אדום־שחור‬ ‫בינארי‬ ‫לעץ‬
.‫שחור‬ ‫תמיד‬ ‫הוא‬ ‫השורש‬ ˆ
‫ייתכנו‬ ‫לא‬ ,‫)כלומר‬ ‫ברצף‬ ‫אדומים‬ ‫קודקודים‬ ‫שני‬ ‫אין‬ ˆ
.(‫אדומים‬ ‫ובן‬ ‫אב‬
‫)שכאן‬ ‫־ים‬NIL‫ב־‬ ‫העץ‬ ‫תחתית‬ ‫את‬ "‫"מרפדים‬ ‫אנחנו‬ ˆ
:‫למשל‬ .( ‫כ־‬ ‫יסומנו‬
6
2
‫אם‬ ,‫כלומר‬ ,‫היטב‬ ‫מוגדר‬ ‫כלקודקוד‬ ‫של‬ ‫השחור‬ ‫הגובה‬ ˆ
‫השחורים‬ ‫העלים‬ ‫כמות‬ ‫אזי‬ ,‫בעץ‬ ‫מסויים‬ ‫קודקוד‬ ‫ניקח‬
‫מסילה‬ ‫בכל‬ (‫שחור‬ ‫והוא‬ ‫במידה‬ ‫אותו‬ ‫כולל‬ ‫)לא‬ ‫שנראה‬
.‫זהה‬ ‫תהיה‬ ‫העלים‬ ‫לאחד‬ ‫למטה‬ ‫פשוטה‬
‫שחורים‬ ‫וצמתים‬ 3 ‫־‬ ‫יסומנו‬ ‫אדומים‬ ‫צמתים‬ ‫הזה‬ ‫הסיכום‬ ‫במהלך‬8
3 ‫־‬ ‫יסומנו‬
‫אדום־שחור‬ ‫עץ‬ ‫בניית‬ 6.2
‫הוספת‬ ‫ע"י‬ ‫חוקי‬ ‫אדום־שחור‬ ‫עץ‬ ‫לבנות‬ ‫ניתן‬ ,‫בעיקרון‬
,(‫בהמשך‬ ‫יוסבר‬ ‫קודקודים‬ ‫מוסיפים‬ ‫)איך‬ ‫קודקוד־קודקוד‬
...‫שיטות‬ ‫כמה‬ ‫עוד‬ ‫ישנן‬ ‫אבל‬
:‫דומות‬ ‫מאוד‬ ‫שיטות‬ ‫שתי‬ ‫כאן‬ ‫אציג‬
(‫שניתן‬ ‫כמה‬ ‫)עד‬ 9
‫מאוזן‬ ‫בינארי‬ ‫חיפוש‬ ‫עץ‬ ‫בונים‬ ‫־‬ ‫האחת‬
‫שאינה‬ ‫הרמה‬ ‫מלבד‬ ‫בשחור‬ ‫העץ‬ ‫כל‬ ‫את‬ ‫צובעים‬ ‫ופשוט‬
:‫למשל‬ ,(‫העץ‬ ‫באיזון‬ "‫ש"פוגעת‬ ‫)זאת‬ ‫מואזנת‬
5
2 6
1 3 7 8
4
:‫חוקי‬ ‫אדום־שחור‬ ‫עץ‬ ‫זה‬
. ‫שחור‬ ‫השורש‬ ˆ
. ‫ברצף‬ ‫אדומים‬ ‫שני‬ ‫אין‬ ˆ
‫לכל‬ ‫זהה‬ ‫שלו‬ ‫השחור‬ ‫הגובה‬ ,‫בעץ‬ ‫שנבחר‬ ‫קודקוד‬ ‫כל‬ ˆ
. ‫העלים‬ ‫לאחד‬ (‫מטה‬ ‫)כלפי‬ ‫פשוטה‬ ‫מסילה‬ ‫בכל‬
(‫)השורש‬ ‫בשחור‬ ‫אחת‬ ‫רמה‬ ‫נצבע‬ ‫שפשוט‬ ‫היא‬ ‫נוספת‬ ‫דרך‬
...‫הלאה‬ ‫וכך‬ ‫באדום‬ ‫הבאה‬ ‫רמה‬ ‫ואז‬
‫השחור‬ ‫הגובה‬ ‫מבחינת‬ ,‫יעבוד‬ ‫לא‬ ‫זה‬ ‫שבהם‬ ‫מקרים‬ ‫ישנם‬
,‫כלומר‬ ,‫מאוזנת‬ ‫שאינה‬ ‫הרמה‬ ‫כאשר‬ ‫קורה‬ ‫)זה‬ ‫העלים‬ ‫של‬
‫שמעליה‬ ‫ומה‬ ‫בשחור‬ ‫צבועה‬ ‫העץ‬ ‫איזון‬ ‫את‬ ‫שמפרה‬ ‫זאת‬
‫של‬ ‫השחור‬ ‫הגובה‬ ‫את‬ ‫לבדוק‬ ‫כדאי‬ ‫תמיד‬ ‫לכן‬ ,(‫באדום‬
.‫הקודקודים‬
5
2 6
1 3 7 8
4
‫הרעיון‬ ‫כי‬ ‫בהנחה‬ , ‫ה־‬ ‫בעצים‬ ‫יוצגו‬ ‫לא‬ ‫ואליך‬ ‫מכאן‬ :‫הערה‬
.‫הובן‬
‫ניתן‬ ‫אם‬ ‫לבדוק‬ ‫כדי‬ ‫קיים‬ ‫עץ‬ ‫לצבוע‬ ‫נדרשים‬ ‫אנחנו‬ ‫כאשר‬
‫למקומות‬ ‫לב‬ ‫לשים‬ ‫כדאי‬ ,‫שחור‬ ‫אדום‬ ‫שיהיה‬ ‫כך‬ ‫אותו‬ ‫לצוע‬
‫ולאות‬ ‫מאוזנים‬ ‫שאינם‬ ‫עץ‬ ‫תתי‬ ‫שיש‬ ‫)היכן‬ ‫בעץ‬ ‫מאוזנים‬ ‫הלא‬
.(‫שמה‬ ‫אפשרי‬ ‫הדבר‬ ‫אם‬
.‫עומק‬ ‫באותו‬ ‫בם‬ ‫קודקוד‬ ‫כל‬ ‫של‬ ‫העצים‬ ‫תתי‬ ‫שכל‬ ,‫כלומר‬9
9
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫לעץ‬ ‫קודקוד‬ ‫הוספת‬ 6.3
‫יתווסף‬ ‫תמיד‬ ‫הוא‬ ‫־‬ ‫לעץ‬ ‫קודקוד‬ ‫להוסיף‬ ‫רוצים‬ ‫אנחנו‬ ‫כאשר‬
.‫אדום‬ ‫בצבע‬ ‫כעלה‬
,‫זמני‬ ‫באופן‬ ( ‫)ה־‬ ‫־ים‬NIL‫ה־‬ ‫שכבת‬ ‫את‬ ‫מסירים‬ ‫אנחנו‬
.‫־ים‬NIL‫ה־‬ ‫את‬ ‫מחזירים‬ ‫ואז‬ ,‫האדום‬ ‫העלה‬ ‫את‬ ‫מכניסים‬
‫הוספנו‬ ‫כאילו‬ ‫אותו‬ ‫לראות‬ ‫ניתן‬ ,‫שלמעלה‬ ‫כאן‬ ‫בעץ‬ ,‫למשל‬
... 4 ‫־‬ ‫את‬ ‫עכשיו‬ ‫לנו‬
:‫מקרים‬ ‫לשלושה‬ ‫ההוספה‬ ‫את‬ ‫נחלק‬
‫שחור‬ ‫לקודקוד‬ ‫עלה‬ ‫הוספת‬ 6.3.1
:‫כי‬ !‫בעיה‬ ‫שום‬ ‫לנו‬ ‫אין‬ ‫כזה‬ ‫במקרה‬
‫אותו‬ ‫הוספנו‬ ‫)הרי‬ ‫אדומים‬ ‫שני‬ ‫של‬ ‫רצף‬ ‫יוצר‬ ‫לא‬ ‫זה‬ ˆ
.(‫שחור‬ ‫לקודקוד‬ ‫מתחת‬
‫היותר‬ ‫)והאבות‬ ‫ההורים‬ ‫של‬ ‫האדום‬ ‫בגובה‬ ‫פוגע‬ ‫לא‬ ‫זה‬ ˆ
‫בגובה‬ ‫שחורים‬ ‫קודקודים‬ ‫סופרים‬ ‫לו‬ ‫אנחנו‬ ‫כי‬ (‫עליונים‬
.‫שחור‬
‫אדום‬ ‫לקודקוד‬ ‫עלה‬ ‫הוספת‬ 6.3.2
...‫אדומים‬ ‫שני‬ ‫של‬ ‫רצף‬ ‫יש‬ ‫־‬ ‫בעיה‬ ‫לנו‬ ‫יש‬ ‫הזה‬ ‫במקרה‬
?‫עושים‬ ‫מה‬ ‫אז‬
‫ורוטציה‬ ‫לימין‬ ‫רוטציה‬ ‫־‬ ‫מושגים‬ ‫שני‬ ‫שנכיר‬ ‫כדאי‬ ‫זה‬ ‫לפני‬
‫לשמאל‬
‫קודקוד‬ ‫מוסבבים‬ ‫אנחנו‬ ‫כאן‬ ‫בעיקרון‬ ‫לשמאל‬ ‫רוטציה‬
,(‫וניתן‬ ‫)במידה‬ ‫ימינה‬ ‫אחד‬
:‫למשל‬
3
γ 4
β α
⇒ 4
3 α
γ β
:‫ש‬ ‫לכך‬ ‫לב‬ ‫לשים‬ ‫כדאי‬
‫אחד‬ ‫קודקוד‬ ‫מעלים‬ ‫רק‬ ‫שאנחנו‬ ‫זה‬ ‫בפועל‬ ‫שקורה‬ ‫מה‬ ˆ
‫מיקומי‬ ‫את‬ ‫משנים‬ ‫אנחנו‬ ‫מקרה‬ ‫בכל‬ ‫אבל‬ ,‫מורידים‬ ‫)או‬
‫)או‬ ‫הקודקוד‬ ‫רק‬ ‫־‬ ‫נשאר‬ ‫הסדר‬ ‫אבל‬ ‫־‬ (‫הקודקודים‬ ‫שני‬
!‫השנייה‬ ‫לצומת‬ ‫זז‬ (β) ‫האמצעי‬ (‫העץ‬ ‫תת‬
...‫זה‬ ‫את‬ ‫לזכור‬ ‫חשוב‬
.‫תתי־עצים‬ ‫או‬ ‫קודקודים‬ ‫להיות‬ ‫יכולים‬ ‫אלו‬ ‫־‬ α, β, γ
:‫הפוך‬ ‫רק‬ ‫הדבר‬ ‫אותו‬ ‫בדיוק‬ ‫לימין‬ ‫רוטציה‬
4
3 α
γ β
⇒ 3
γ 4
β α
.‫אדום‬ ‫לקודקוד‬ ‫עלה‬ ‫שמוסיפים‬ ‫קורה‬ ‫מה‬ ‫לראות‬ ‫ניתן‬ ‫כעת‬
‫מקרים‬ ‫ארבעה‬ ‫ישנם‬
‫של‬ ‫דודו‬ ‫על‬ ‫שמסתכלים‬ ‫הוא‬ ‫שעושים‬ ‫מה‬ ‫כזה‬ ‫במקרה‬
.‫הקודקוד‬
‫אדום‬ ‫הדוד‬ ‫־‬ ‫ראשון‬ ‫מקרה‬
7
6 8
9
‫הוא‬ ‫דודו‬ ‫אזי‬ ‫האחרון‬ ‫כעלה‬ 9 ‫הכנסנו‬ ‫כי‬ ‫נניח‬ ‫הזה‬ ‫במקרה‬
‫יש‬ ‫־‬ ‫כלומר‬ ‫־‬ ‫אדום‬ ‫הוא‬ ‫כי‬ ‫רואים‬ ‫אנחנו‬ (‫אביו‬ ‫של‬ ‫)אחיו‬ 6
.‫שחור‬ ‫אב‬ ‫עם‬ ‫אדומים‬ ‫בנים‬ ‫שני‬ ‫של‬ ‫מקרה‬ ‫לנו‬
‫ואילו‬ ‫לאדום‬ ‫והופך‬ ‫צבעו‬ ‫על‬ ‫מוותר‬ ,7 ‫הסבא‬ ,‫הזה‬ ‫במקרה‬
‫־‬ ‫לשחורים‬ ‫הופכים‬ ‫בניו‬ ‫שני‬
7
6 8
9
.‫הבעיה‬ ‫נפתרה‬ ‫כך‬ ‫וע"י‬
‫־‬ ‫אחרות‬ ‫במילים‬ ‫)או‬ ‫השורש‬ ‫הוא‬ 7‫ש־‬ ‫במקרה‬ ‫רק‬ :‫הערה‬
‫ומקבלים‬ ‫שחור‬ ‫אותו‬ ‫משאירים‬ ‫אנחנו‬ (‫השורש‬ ‫של‬ ‫במקרה‬ ‫רק‬
:‫כזאת‬ ‫תהיה‬ ‫התוצאה‬ ‫כזה‬ ‫במקרה‬ ‫לכן‬ ,‫שחורים‬ ‫בניו‬ ‫את‬
7
6 8
9
‫)בן‬ ‫האב‬ ‫של‬ ‫מהכיוון‬ ‫בן‬ ‫והכנסנו‬ ‫שחור‬ ‫הדוד‬ ‫־‬ ‫שני‬ ‫מקרה‬
(‫שמאלי‬ ‫לאב‬ ‫שמאלי‬ ‫בן‬ ‫או‬ ‫ימני‬ ‫לאב‬ ‫ימני‬
7
6 8
9
(B-Trees) B‫עצי־‬ 7
(‫שקיבלנו‬ ‫בית‬ ‫תרגיל‬ ‫)מתוך‬
10
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
‫הגדרה‬ 7.1
:‫ע"י‬ ‫ומאופיין‬ root [T] :‫הוא‬ ‫ששורשו‬ T ‫עץ‬ ‫הוא‬ B-tree ‫עץ‬
:‫הבאים‬ ‫השדות‬ ‫את‬ ‫מכיל‬ x ‫קודקוד‬ ‫כל‬ .1
‫בקודקוד‬ ‫נמצאות‬ ‫אשר‬ ‫המפתחות‬ ‫מספר‬ ‫־‬ n [x] 1.1
.(x)
‫שאינו‬ ‫בסדר‬ ‫נמצאים‬ ‫אשר‬ ,‫עצמם‬ ‫המפתחות‬ 1.2
:‫כלומר‬ ,‫יורד‬
key1 [x] ≤ key2 [x] ≤ key3 [x] ≤ · · · ≤ keyn[x] [x]
x ‫אם‬ ‫לנו‬ ‫אומר‬ ‫אשר‬ ‫בולאני‬ ("‫"ערך‬ ‫)או‬ ‫משתנה‬ 1.3
.‫אחרת‬ False ,‫כן‬ ‫אם‬ True .‫עלה‬ ‫הוא‬
‫פוינטרים‬ n [x] + 1 ‫מכיל‬ x ‫פנימי‬ ‫קודקוד‬ ‫כל‬ .2
‫אין‬ ‫ולעלה‬ ‫היות‬ .‫שלו‬ ‫לילדים‬ c1 [x] , ..., cn[x]+1 [x]
.‫מוגדר‬ ‫אינו‬ ‫שלהם‬ ci‫ה־‬ ‫אזי‬ ‫ילדים‬
‫שנמצאים‬ ‫המפתחות‬ ‫בין‬ ‫מפרידים‬ keyi [x] ‫המפתחות‬ .3
:‫כלומר‬ ,‫תת־עץ‬ ‫בכל‬
‫בתת־העץ‬ ‫נמצא‬ ‫אשר‬ ,‫כלשהו‬ ‫מפתח‬ ‫הוא‬ ki ‫אם‬
:‫אזי‬ ci [x] ‫הינו‬ ‫ששורשו‬
k1 ≤ key1 [x] ≤ k2 ≤ key2 [x] ≤ · · · ≤ kn[x]+1 ≤ keyn[x]+1 [x]
.(‫העץ‬ ‫גובה‬ ‫גם‬ ‫הוא‬ h) h ‫־‬ ‫הגובה‬ ‫באותו‬ ‫העלים‬ ‫כל‬ .4
‫המפתחות‬ ‫מספר‬ ‫על‬ ‫ותחתונים‬ ‫עליונים‬ ‫חסמים‬ ‫ישנם‬ .5
‫לביטוי‬ ‫ניתנים‬ ‫אלו‬ ‫חסמים‬ .‫להכיל‬ ‫יכול‬ ‫שקודקוד‬
‫העץ‬ ‫של‬ ‫המינימלית‬ ‫המעלה‬ ‫נקרא‬ ‫אשר‬ t ‫של‬ ‫במונחים‬
:‫וכאשר‬ 2 ≤ t ∈ N ‫כאשר‬
‫מכילים‬ ‫השורש‬ ‫מלבד‬ ‫הפנימיים‬ ‫הקודקודים‬ ‫כל‬ 5.1
‫אם‬ .‫ילדים‬ t ‫ולפחות‬ ‫מפתחות‬ t − 1 :‫לפחות‬
‫לפחות‬ ‫להכיל‬ ‫חייב‬ ‫השורש‬ ‫אזי‬ ,‫ריק‬ ‫אינו‬ ‫העץ‬
.‫אחד‬ ‫מפתח‬
.‫מפתחות‬ 2t − 1 ‫היותר‬ ‫לכל‬ ‫מכיל‬ ‫קודקוד‬ ‫כל‬ 5.2
2t ‫היותר‬ ‫לכל‬ ‫להכיל‬ ‫יכול‬ ‫פנימי‬ ‫קודקוד‬ ,‫לכן‬
‫אומרים‬ ‫אנו‬ ‫ילדים‬ 2t ‫בדיוק‬ ‫ישנם‬ ‫אם‬ .‫ילדים‬
‫מלא‬ ‫הקודקוד‬ ‫כי‬
.3
‫ומעלה‬ h ‫גובה‬ ,‫מפתחות‬ n ‫עם‬ B-tree‫ב־‬ n ≥ 1 ‫מפתח‬ ‫לכל‬
:t ≥ 2 ‫היא‬ ‫המינימלית‬
h ≤ logt
n + 1
2
‫בעץ‬ ‫חיפוש‬ 7.2
.‫בינארי‬ ‫בעץ‬ ‫לחיפש‬ ‫דומה‬ ‫מאוד‬ ‫החיפוש‬ ‫אלגוריתם‬
‫זאת‬ ‫עושים‬ ‫אנחנו‬ ‫שמאלה‬ ‫או‬ ‫ימינה‬ ‫פעם‬ ‫כל‬ ‫לרדת‬ ‫במקום‬
.‫קודקוד‬ ‫לאותו‬ ‫שיש‬ ‫הילדים‬ ‫למספר‬ ‫בהתאם‬
.‫בינארי‬ ‫חיפוש‬ ‫בעץ‬ ‫חיפוש‬ ‫של‬ ‫בהכללה‬ ‫מדובר‬ ,‫כלומר‬
‫)סעיפי‬ ‫החלטות‬ n (x) + 1 ‫נבצע‬ x ‫קודקוד‬ ‫עבור‬ ,‫כלומר‬
.(‫בינארי‬ ‫חיפוש‬ ‫בעץ‬ 2 ‫)במקום‬ (‫החלטה‬
k ‫ומפתח‬ ‫העץ‬ ‫לשורש‬ x ‫פוינטר‬ ‫הוא‬ ‫האלגוריתם‬ ‫של‬ ‫הקלט‬
.‫מחפשים‬ ‫שאותו‬
‫הינו‬ ‫הפלט‬ ‫אחרת‬ ,‫בעץ‬ ‫נמצא‬ ‫אינו‬ k ‫אם‬ NIL ‫הוא‬ ‫הפלט‬
‫אינדקס‬ ‫הוא‬ i‫ו־‬ ‫הקודקוד‬ ‫הוא‬ y ‫כאשר‬ (y, i) ‫הסדור‬ ‫הזוג‬
:‫ש‬ ‫כך‬
keyi [y] = k
:‫האלגוריתם‬ ‫תיאור‬
‫וגם‬ k > keyi (k) ‫המקיים‬ ‫ביותר‬ ‫הקטן‬ i‫ה־‬ ‫את‬ ‫נחפש‬
.i ≤ n (x)
:k = keyi [x] ‫מקיים‬ ‫הנ"ל‬ i‫ה־‬ ‫האם‬ ‫נבדוק‬
.(x, i) ‫את‬ ‫נחזיר‬ ‫־‬ ‫כן‬ ‫אם‬ ˆ
:‫עלה‬ ‫הוא‬ x ‫האם‬ ‫נבדוק‬ ‫אחרת‬ ˆ
.NIL ‫נחזיר‬ ‫כן‬ ‫אם‬ –
‫רקורסיבי‬ ‫באופן‬ ‫לפונקציה‬ ‫שוב‬ ‫נקרא‬ ‫־‬ ‫לא‬ ‫אם‬ –
.(ci [x] , k) ‫את‬ ‫לה‬ ‫נעביר‬ ‫כאשר‬
:‫הריצה‬ ‫זמן‬
.‫העץ‬ ‫כגובה‬ ‫־‬ ‫פעמים‬ h ‫היותר‬ ‫לכל‬ ‫לפונקציה‬ ‫קוראים‬ ‫אנחנו‬
‫השוואות‬ 2t ‫קודקוד‬ ‫בכל‬ ‫נבצע‬ ‫גרוע‬ ‫הכי‬ ‫במקרה‬ ‫כאשר‬
:‫סה"כ‬ ‫יהיה‬ ‫זה‬ ‫ולכן‬
O (h · t) = O (t logt n)
11
‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬
III ‫חלק‬
‫הופמן‬ ‫צפני‬
‫הופמן‬ ‫צופן‬ ‫חישוב‬ 8
?‫הופן‬ ‫צופן‬ ‫מחשבים‬ ‫כיצד‬
‫מה‬ ‫אזי‬ ,‫במשפט‬ ‫תו‬ ‫כל‬ ‫של‬ ‫התדירויות‬ ‫טבלת‬ ‫לנו‬ ‫ונתונה‬ ‫נניח‬
‫התדירות‬ ‫בעלי‬ ‫התווים‬ ‫שני‬ ‫את‬ ‫שלוקחים‬ ‫הוא‬ ‫עושים‬ ‫שאנחנו‬
.‫אותם‬ ‫וממזגים‬ ‫נמוכה‬ ‫הכי‬
5 b ‫והאות‬ ‫פמעים‬ 4 ‫מופיעה‬ a ‫שהאות‬ ‫לנו‬ ‫נתון‬ ‫אם‬ ‫למשל‬
:‫כך‬ ‫יראה‬ ‫המיזוג‬ ‫אזי‬
9
a : 4 b : 5
‫הנראה‬ ‫ככל‬ ‫אנחנו‬ ‫)כי‬ ‫עצמו‬ ‫בפני‬ ‫תו‬ ‫כאל‬ 9‫ל־‬ ‫ומתייחסים‬
.(‫תווים‬ ‫עוד‬ ‫וישנם‬ ‫במידה‬ ‫אם‬ ‫ולמזג‬ ‫להמשיך‬ ‫נרצה‬
‫צלע‬ ‫לכל‬ ‫מוסיפים‬ ‫אנחנו‬ ,‫העץ‬ ‫את‬ ‫שקיבלנו‬ ‫אחרי‬ ,‫לבסוף‬
‫צלע‬ ‫ולכל‬ 0 ‫הערך‬ ‫את‬ (‫שמאלי‬ ‫לבן‬ ‫צלע‬ ,‫)כלומר‬ ‫שמאלית‬
.1 ‫הערך‬ ‫את‬ ‫ימנית‬
‫עד‬ ‫העץ‬ ‫משורש‬ ‫מתחילים‬ ‫אנחנו‬ ‫מסוים‬ ‫תו‬ ‫של‬ ‫ערך‬ ‫לחישוב‬
(‫כמובן‬ ‫העץ‬ ‫של‬ ‫בעלים‬ ‫הם‬ ‫התווים‬ ‫)כל‬ ‫תו‬ ‫אותו‬ ‫של‬ ‫לעלה‬
‫עוברים‬ ‫אנחנו‬ ‫שדרכה‬ ‫הספרה‬ ‫את‬ ‫מלקטים‬ ‫אנחנו‬ ‫פעם‬ ‫וכל‬
.‫הספציפי‬ ‫התו‬ ‫של‬ ‫צופן‬ ‫וזה‬ (‫לצלע‬ ‫)בהתאם‬
:‫דברים‬ ‫שני‬ ‫לזכור‬ ‫חשוב‬
‫של‬ ‫הכולל‬ ‫המופעים‬ ‫סך‬ ‫לנו‬ ‫להיות‬ ‫אמור‬ ‫העץ‬ ‫בשורש‬ .1
.‫התווים‬ ‫כל‬
‫כותבים‬ ‫שאנחנו‬ ‫בסוף־‬ ‫אזי‬ ‫בעברית‬ ‫בצופן‬ ‫מדובר‬ ‫אם‬ .2
‫זה‬ ‫את‬ ‫לעשות‬ ‫צריכים‬ ‫אנחנו‬ ,‫שלה‬ ‫הקוד‬ ‫את‬ ‫אות‬ ‫לכל‬
‫הכלב‬ :‫המשפט‬ ‫את‬ ‫להצפין‬ ‫נדרשו‬ ‫אם‬ ,‫למשל‬ .‫הפוך‬
,‫אות‬ ‫כל‬ ‫עבור‬ ‫הצופן‬ ‫את‬ ‫שנכתוב‬ ‫לבסוף‬ ‫אזי‬ .‫הלך‬
‫ךלה‬ :‫כך‬ ‫זה‬ ‫את‬ ‫לכתוב‬ ‫נצטרך‬ ‫נכון‬ ‫יהיה‬ ‫זה‬ ‫בשביל‬
.‫בלכה‬
IV ‫חלק‬
‫הגרפים‬ ‫בתורת‬ ‫אלגוריתמים‬
BFS DFS ‫־‬ ‫גרף‬ ‫חקירת‬ 9
‫אותו‬ ‫את‬ ‫להציג‬ ‫ניתן‬ ‫מכוון‬ ‫לא‬ ‫או‬ ‫מכוון‬ ‫גרף‬ ‫לנו‬ ‫יש‬ ‫כאשר‬
:‫אפשרויות‬ ‫שתי‬ ‫במצעות‬
.‫שכנים‬ ‫רשימת‬ ‫או‬ ‫שכנויות‬ ‫מטריצת‬
m × m ‫בגודל‬ ‫ריבועית‬ ‫מטריצה‬ ‫הינה‬ ‫השכוניות‬ ‫מטריצת‬
.j ‫של‬ ‫שכן‬ i‫ש־‬ ‫פירושו‬ (i, j) ‫התא‬ ‫אשר‬
:‫הבא‬ ‫המכוון‬ ‫הגרף‬ ‫את‬ ‫למשל‬ ‫ניקח‬
1 // 2

4
OO
3oo
:‫תהיה‬ ‫שלו‬ ‫השכנות‬ ‫מטריצת‬ ‫אזי‬
1 2 3 4
1 0 1 0 0
2 0 0 1 0
3 0 0 0 1
4 1 0 0 0
‫צלע‬ ‫מרשים‬ ‫)אנחנו‬ ‫עצמה‬ ‫של‬ ‫שכנה‬ ‫היא‬ ‫צלע‬ ‫שאם‬ ‫כמובן‬
.0 ‫ולא‬ 1 ‫יהיה‬ ‫באלכסון‬ ‫אזי‬ (‫לעצמו‬ ‫מקודקוד‬
‫השכנות‬ ‫מטריצת‬ ‫אזי‬ ‫מכוון‬ ‫שאינו‬ ‫גרף‬ ‫היה‬ ‫הנל‬ ‫הגרך‬ ‫אם‬
:‫היתה‬
1 2 3 4
1 0 1 0 1
2 1 0 1 0
3 0 1 0 1
4 1 0 1 0
.‫סימטרית‬ ‫תמיד‬ ‫היא‬ ‫המטריצה‬ ‫מכוון‬ ‫שאינו‬ ‫בגרף‬ ‫כשמדובר‬
‫תא‬ ‫שבכל‬ ‫מקושרות‬ ‫רשימות‬ ‫של‬ ‫רשימה‬ ‫הינה‬ ‫שכנים‬ ‫רשימה‬
.‫שלו‬ ‫השכנים‬ ‫רשימה‬ ‫את‬ ‫ואחריו‬ ‫קודקוד‬ ‫יש‬
:(‫למעלה‬ ‫שנתון‬ ‫גרף‬ ‫)אותו‬ ‫מכוון‬ ‫גרף‬ ‫של‬ ‫דוגמר‬ ‫נראה‬ ‫אנחנו‬
1 // 2
2 // 3
3 // 4
4 // 1
12
‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬
‫לכל‬ ‫שיש‬ ‫בגרפים‬ ‫או‬ ,‫מכוון‬ ‫הלא‬ ‫בגרף‬ ‫מדובר‬ ‫היה‬ ‫אם‬ ,‫כעת‬
‫הקודקודים‬ ‫את‬ ‫לשים‬ ‫ניתן‬ ‫אזי‬ ,‫אחד‬ ‫משכן‬ ‫יותר‬ ‫קודקוד‬
‫סדר‬ ‫על‬ ‫ישפיע‬ ‫כמובן‬ ‫זה‬ ‫אבל‬ ,‫שרירותי‬ ‫באופן‬ ‫ברשימה‬
.DFS‫ו־‬ BFS ‫באלגוריתמים‬ ‫לקודקודים‬ ‫הכניסה‬
:‫מכוון‬ ‫שאינו‬ ‫בגרף‬ ‫מדובר‬ ‫היה‬ ‫אם‬ ,‫שלנו‬ ‫במקרה‬ ,‫למשל‬
1 // 2 // 4
2 // 3 // 1
3 // 4 // 2
4 // 1 // 3
BFS ‫הגרף‬ ‫של‬ ‫רוחבית‬ ‫חקירה‬ 9.1
.‫לרוחב‬ ‫הגרף‬ ‫את‬ ‫נחקור‬ ‫אנחנו‬ ‫הזה‬ ‫באלגוריתם‬
.(s ∈ V ) .s ‫מקור‬ ‫וקדוקוד‬ G ‫גרף‬ ‫הינו‬ ‫הקלט‬
‫תיאור‬ ‫במהלך‬ ‫יוסבר‬ ‫בו‬ ‫השימוש‬ ‫שאופן‬ ‫תור‬ ‫ישנו‬ ,‫כמו־כן‬
.‫האלגוריתם‬
‫לכל‬ ‫כאשר‬ 10
‫מינמליים‬ ‫מרחקים‬ ‫עץ‬ ‫הינו‬ ‫האלגוריתם‬ ‫פלט‬
:‫הבאים‬ ‫המאפיינים‬ ‫את‬ ‫ישנם‬ ‫קודקוד‬
‫)המרחק‬ s ‫מקודקוד‬ u ‫קודקוד‬ ‫כל‬ ‫של‬ ‫של‬ ‫המרחק‬ ‫־‬ d [u]
.(‫המינמלי‬
‫)מלבד‬ .‫שלו‬ ‫האבא‬ ,u ‫קודקוד‬ ‫את‬ ‫שגילה‬ ‫הקדוקוד‬ ‫־‬ π [u]
.(NIL ‫הוא‬ ‫שלו‬ π‫שה־‬ s
‫האלגוריתם‬
‫הצבעים‬ ‫משלושת‬ ‫באחד‬ ‫צבוע‬ ‫להיות‬ ‫יכול‬ ‫קודקוד‬ ‫לכל‬
.‫ושחור‬ ‫אפור‬ ,(‫שלו‬ ‫המחדל‬ ‫ברירת‬ ‫)צבע‬ ‫לבן‬ :‫הבאים‬
‫באפור‬ ‫נצבע‬ ‫לתור‬ ‫שנכנס‬ ‫קודקוד‬ ‫כל‬ :‫הבא‬ ‫מהכלל‬ ‫נתחיל‬
.‫בשחור‬ ‫נצבע‬ ‫הוא‬ ‫ממנו‬ ‫יוצא‬ ‫הוא‬ ‫וכאשר‬
‫)והתור‬ ‫שחורים‬ ‫יהיו‬ ‫הקודקוד‬ ‫כל‬ ‫כאשר‬ ‫יסתיים‬ ‫האלגוריתם‬
.(‫ריק‬ ‫יהיה‬
‫אותו‬ ‫וצובעים‬ ‫לתור‬ s ‫קודקוד‬ ‫את‬ ‫כל‬ ‫קודם‬ ‫מכניסים‬ ‫אנחנו‬
‫בשחור‬ ‫אותו‬ ‫צובעים‬ ,‫מהתור‬ ‫אותו‬ ‫מוציאים‬ ‫אנחנו‬ ,‫באפור‬
‫אותם‬ ‫)ומכניסים‬ ‫באפור‬ ‫צובעים‬ ‫אנחנו‬ ‫שלו‬ ‫השכנים‬ ‫כל‬ ‫ואת‬
.1‫ב־‬ ‫שלהם‬ d‫ה־‬ ‫ואת‬ s‫ב־‬ ‫שלהם‬ π‫ה־‬ ‫את‬ ‫ומסמנים‬ (‫לתור‬
‫בקודקודים‬ ‫רק‬ ‫נוגעים‬ ‫אנחנו‬ :‫הבא‬ ‫הכלל‬ ‫על‬ ‫שומרים‬ ‫אנחנו‬
‫בו‬ ‫נוגעים‬ ‫לא‬ ‫אנחנו‬ ‫אפור‬ ‫או‬ ‫שחור‬ ‫הוא‬ ‫קודקוד‬ ‫אם‬ .‫לבנים‬
.(‫לתור‬ ‫אותו‬ ‫מכניסים‬ ‫לא‬ ,‫)כלומר‬
‫בתור‬ ‫שנמצא‬ ‫הראשון‬ ‫הקודקוד‬ ‫את‬ ‫מוציאים‬ ‫אנחנו‬ ,‫כעת‬
.‫בשחור‬ ‫ואותו‬ ‫באפור‬ ‫הלבנים‬ ‫שכניו‬ ‫כל‬ ‫את‬ ‫מסמנים‬
‫כל‬ ‫את‬ ‫מסמנים‬ ‫בתור‬ ‫השני‬ ‫הקודקוד‬ ‫את‬ ‫מוציאים‬ ‫אנחנו‬
.‫בשחור‬ ‫ואותו‬ ‫באפור‬ ‫הלבנים‬ ‫שכניו‬
.‫לבנים‬ ‫קודקודים‬ ‫יותר‬ ‫שאין‬ ‫שנראה‬ ‫עד‬ ,‫הלאה‬ ‫וכך‬
‫מרחקים‬ ‫עץ‬ ‫וקיבלנו‬ ‫מהתור‬ ‫הקודקודים‬ ‫את‬ ‫נוציא‬
.‫מינמליים‬
‫הקצר‬ ‫הינו‬ ‫הקודקודים‬ ‫שאר‬ ‫מכל‬ s ‫הקודקוד‬ ‫של‬ ‫שהמרחק‬ ‫עץ‬ ,‫כלומר‬10
.‫ביותר‬
DFS ‫הגרף‬ ‫של‬ ‫עומקית‬ ‫חקירה‬ 9.2
.‫השכנים‬ ‫רשימת‬ ‫עם‬ G ‫גרף‬ ‫הוא‬ DFS‫ב־‬ ‫הקלט‬
‫זמן‬ ‫דישנו‬ ‫קודוק‬ ‫לכל‬ ‫כאשר‬ ‫מעגלים‬ ‫חסר‬ ‫גרף‬ ‫הינו‬ ‫הפלט‬
.‫יציאה‬ ‫וזמן‬ ‫אליו‬ ‫כניסה‬
‫בגרף‬ ‫יכללו‬ ‫כולם‬ ‫אחד‬ ‫קשירות‬ ‫מרכיב‬ ‫יותר‬ ‫ישנו‬ ‫אם‬ ‫גם‬
‫אל‬ ‫נגיע‬ ‫לא‬ ,BFS‫)ב־‬ ‫קודקוד‬ ‫קודקוד‬ ‫עוברים‬ ‫ואנחנו‬ ‫היות‬
.(s ‫של‬ ‫קשירות‬ ‫רכיב‬ ‫באותו‬ ‫שאינם‬ ‫קודקודים‬
(‫ממנו‬ ‫יציאה‬ ‫או‬ ‫קודקוד‬ ‫אל‬ ‫)כניסה‬ ‫תזוזה‬ ‫שכל‬ ‫שעון‬ ‫ישנו‬
.1‫ב־‬ ‫שלו‬ ‫המונה‬ ‫את‬ ‫מגדילה‬
?‫פועל‬ DFS ‫אלגוריתם‬ ‫איך‬
:‫השכנים‬ ‫רשימת‬ ‫עפ‬ ‫הולכים‬
‫לקודקוד‬ ‫וממשיכים‬ ‫ברשימה‬ ‫הראשון‬ ‫מהקודקוד‬ ‫מתחילים‬
‫לקודקוד‬ ‫הולכים‬ ‫ואז‬ ,‫השכנים‬ ‫ברשימת‬ ‫אצלו‬ ‫נמצא‬ ‫הראשון‬
‫ניתן‬ ‫שלא‬ ‫למצב‬ ‫שמגיעים‬ ‫עד‬ ‫הלאה‬ ‫וכך‬ ‫אצלו‬ ‫הראשון‬
‫היינו‬ ‫שכבר‬ ‫בקודקוד‬ ‫נוגעים‬ ‫לא‬ ‫־‬ BFS‫ב־‬ ‫)כמו‬ ‫להמשיך‬
‫הלאה‬ ‫שממשיכים‬ ‫או‬ :‫אז‬ ‫כזה‬ ‫לקודקוד‬ ‫מגיעים‬ ‫אם‬ .‫בו‬
‫ממשיכים‬ ‫אזי‬ ‫ואין‬ ‫ובמידה‬ ,‫קודקוד‬ ‫אותו‬ ‫של‬ ‫הבא‬ ‫לשכן‬
.([‫השכנות‬ ‫]רשימת‬ ‫הקודקודים‬ ‫ברשימת‬ ‫הבא‬ ‫לקודקוד‬
‫אליו‬ ‫הכניסה‬ ‫זמן‬ ‫את‬ ‫מעדכנים‬ ‫אליו‬ ‫שנכסים‬ ‫קודקוד‬ ‫כל‬
.‫ממנו‬ ‫היציאה‬ ‫זמן‬ ‫את‬ ‫מעדכנים‬ ‫ממנו‬ ‫וכשיוצאים‬
.‫מעגלים‬ ‫חסר‬ ‫קשיר‬ ‫גרף‬ ‫נקבל‬ ‫לבסוף‬
:‫הבא‬ ‫הגרף‬ ‫את‬ ‫למשל‬ ‫ניקח‬
1 // 2

4 // 3
‫יהיה‬ 2 ‫ושל‬ 1 ‫יהיה‬ 1 ‫של‬ ‫הכניסה‬ ‫וזמן‬ 2‫ל־‬ 1‫מ־‬ ‫נלך‬ ‫אזי‬
‫נתחיל‬ ‫ואז‬ ‫־‬ ‫להמשיך‬ ‫לאן‬ ‫שאין‬ ‫נראה‬ ‫אז‬ .3 ‫לגבי‬ ‫וכנל‬ 2
1 ‫ושל‬ 5 ‫יהיה‬ 2 ‫של‬ 4 ‫יהיה‬ 3 ‫של‬ ‫יציאה‬ ‫הזמן‬ ‫־‬ ‫חזרה‬ ‫לחזור‬
.6 ‫יהיה‬
‫ונגיע‬ ‫־‬ (1,2,3 ‫את‬ ‫סיימנו‬ ‫)כי‬ ‫־‬ ‫בקודקודים‬ ‫הלאה‬ ‫נמשיך‬ ‫ואז‬
‫יהיה‬ ‫שלו‬ ‫היציאה‬ ‫וזמן‬ 7 ‫יהיה‬ ‫שלו‬ ‫הכניסה‬ ‫שזמן‬ 4 ‫לקודקוד‬
.8
:‫הינו‬ ‫שנקבל‬ ‫והגרף‬
1 // 2

4 3
‫טופולוגי‬ ‫מיון‬ 9.3
‫ללא‬ ‫מכוון‬ ‫גרף‬ ‫־‬ ‫בלבד‬ DAG‫ב־‬ ‫לעשות‬ ‫ניתן‬ ‫טופולוגי‬ ‫מיון‬
!‫מעגלים‬
13
‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬
‫לינארי‬ ‫סידור‬ ‫בעצם‬ ‫הוא‬ ‫טופולוגי‬ ‫מיון‬
‫בכיוון‬ ‫האיברים‬ ‫את‬ ‫למיין‬ ‫שנוכל‬ ‫היא‬ ‫טופולגי‬ ‫במיון‬ ‫המטרה‬
‫ניתן‬ ‫יהיה‬ ‫ואז‬ ‫אחד‬ ‫בכיוון‬ ‫יהיו‬ ‫הצלעות‬ ‫שכל‬ ‫כלומר‬ , ‫אחד‬
.(‫)למשל‬ ‫בשורה‬ ‫הקודקודים‬ ‫כל‬ ‫את‬ ‫להציג‬
?‫זאת‬ ‫עושים‬ ‫איך‬
‫זמן‬ ‫לפי‬ ‫הקודקודים‬ ‫את‬ ‫מסדרים‬ ‫ואז‬ ‫לגרף‬ DFS ‫עושים‬
:‫שלנו‬ ‫בדוגמא‬ ‫למשל‬ ,‫היציאה‬
4
''
1 // 2 // 3
...‫הכיוון‬ ‫באותו‬ ‫הם‬ ‫החצים‬ ‫כל‬ ‫כי‬ ‫לב‬ ‫ונשים‬
‫מינמליים‬ ‫פורשים‬ ‫עצים‬ 10
(‫)הגדרה‬ ‫מינימלי‬ ‫פורש‬ ‫עץ‬ 10.1
w : E → R+ ‫משקל‬ ‫פונקצית‬ ‫עם‬ G ‫גרף‬ ‫לנו‬ ‫ויש‬ ‫נניח‬
‫הצלעות‬ ‫על‬ (‫שלילי‬ ‫משקל‬ ‫גם‬ ‫להניח‬ ‫ניתן‬ ‫יהיה‬ ‫)בהמשך‬
:‫למשל‬ ,‫משקל‬ ‫ישנו‬ ‫צלע‬ ‫לכל‬ ‫כלומר‬ .‫שלו‬
1
3
2
4
3
‫פירושו‬ a →→ b) .7 ‫הינו‬ 1 →→ 3 ‫של‬ ‫המשקל‬ ‫אזי‬
.(b‫ל־‬ a‫מ־‬ ‫המסילה‬
‫תת־‬ ‫את‬ ‫נחפש‬ ‫הפורשים‬ ‫העצים‬ ‫מכל‬ ,‫נתון‬ ‫גרף‬ ‫עבור‬ ,‫כעת‬
.‫מינימלי‬ ‫הוא‬ ‫צלעותיו‬ ‫משקל‬ ‫שסכום‬ ‫העץ‬
:‫הבא‬ ‫הגרף‬ ‫את‬ ‫ניקל‬ ‫למשל‬
1
1
2
6
4
3
34
2
:‫יהיה‬ ‫המינימלי‬ ‫הפורש‬ ‫העץ‬ ‫אזי‬
1
1
2
4
3
3
2
G ‫מגרף‬ ‫כזה‬ ‫עץ‬ ‫לבנית‬ ‫הפשוט‬ ‫האלגוריתם‬ 10.2
‫הקבוצה‬ ‫היא‬ ‫בהתחלה‬ ‫)אשר‬ A ‫צלעות‬ ‫קבוצת‬ ‫לוקחים‬
.(‫הריקה‬
‫את‬ ‫לה‬ ‫מוסיפים‬ ‫אנחנו‬ ‫פורש‬ ‫עץ‬ ‫מכילה‬ ‫אינה‬ A ‫עוד‬ ‫וכל‬
.‫בטוחה‬ ‫צלע‬ ‫שהיא‬ ‫בתנאי‬ (u, v) ‫צלע‬
:‫חתך‬ ‫קודם‬ ‫נגדיר‬ ‫בטוחה‬ ‫צלע‬ ‫מהי‬ ‫להגדיר‬ ‫בשביל‬
‫לשתי‬ ‫הגרף‬ ‫של‬ ‫חלוקה‬ ‫הוא‬ G ‫מכוון‬ ‫לא‬ ‫גרף‬ ‫של‬ ‫חתך‬
.S, V S :‫קבוצות‬
‫נמצא‬ ‫מהקצוות‬ ‫אחד‬ ‫כל‬ ‫אם‬ ‫החתך‬ ‫את‬ ‫חוצה‬ (u, v) ‫צלע‬
.‫אחרת‬ ‫בקבוצה‬
A‫ב־‬ ‫צלע‬ ‫אין‬ ‫אם‬ A ‫את‬ ‫מכבד‬ ‫החתך‬ ‫כי‬ ‫אורמים‬ ‫אנחנו‬
.‫אותו‬ ‫שחוצה‬
‫ויש‬ ‫החתך‬ ‫את‬ ‫חוצה‬ ‫היא‬ ‫אם‬ ‫־‬ ‫קלה‬ ‫צלע‬ ‫־‬ ‫נקראת‬ ‫צלע‬
‫כולן‬ ‫אבל‬ ,‫שחוצות‬ ‫כמה‬ ‫להיות‬ ‫)יכולות‬ ‫מינימלי‬ ‫משקל‬ ‫לה‬
‫להיות‬ ‫צריך‬ ‫]המשקל‬ ‫מינימלי‬ ‫משקל‬ ‫בעל‬ ‫להיות‬ ‫צריכות‬
.([‫זהה‬
.‫בטוחה‬ ‫צלע‬ ‫היא‬ ‫זאת‬ ‫צלע‬ ‫כי‬ ‫יודעים‬ ‫אנחנו‬
:‫למשל‬
1
7
9
2
3
3
2
4
‫של‬ ‫החלוקה‬ ‫את‬ ‫מכבד‬ (‫המקווקו‬ ‫)הקו‬ ‫החתך‬ ‫כי‬ ‫לראות‬ ‫ניתן‬
‫הבטוחה‬ ‫הצלע‬ ‫את‬ ‫להוסיף‬ ‫נוכל‬ ‫כעת‬ ‫ועילו‬ (3, 4)‫ו־‬ (1, 2)
.(‫פורש‬ ‫עץ‬ ‫)ויוצרת‬ ‫קלה‬ ‫צלע‬ ‫היא‬ ‫כי‬ (2, 4)
‫אותה‬ ‫להוריד‬ ‫ניתן‬ ‫היה‬ ‫צלע‬ ‫הייתה‬ ‫כבר‬ (1, 3) ‫אם‬ ‫־‬ ‫כן‬ ‫כמו‬
.‫הפורש‬ ‫לעץ‬ (2, 4) ‫את‬ ‫במקומה‬ ‫ולקחת‬
‫פורש‬ ‫עץ‬ ‫למציאת‬ ‫קרוסקל‬ ‫אלגוריתם‬ 10.3
‫מינימלי‬
.w ‫משקל‬ ‫ופונקצית‬ G ‫גרף‬ ‫הינו‬ ‫האלגוריתם‬ ‫קלט‬
A ‫מקבוצה‬ ‫מתחילים‬ ‫גם‬ ‫אנחנו‬ ‫קרוסקל‬ ‫של‬ ‫באלגוריתם‬
.‫ריקה‬ ‫שהיא‬
14
‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬
‫קשירות‬ ‫לרכיבי‬ ‫בעץ‬ ‫הקודקודים‬ ‫כל‬ ‫את‬ ‫הופכים‬ ‫אנחנו‬
‫הצלעות‬ ‫כל‬ ‫את‬ ‫משמיטים‬ ‫וירטואלי‬ ‫באופן‬ ‫)אנחנו‬ ‫נפרדים‬
.(‫הקודקודים‬ ‫רק‬ ‫נשארים‬ ‫כך‬
‫עפ‬ ‫עולה‬ ‫לא‬ ‫בסדר‬ (‫הגרף‬ ‫)צלעות‬ E ‫את‬ ‫ממינים‬ ‫אנחנו‬
.‫שלהן‬ ‫המשקל‬
:(‫לגדולה‬ ‫)מהקטנה‬ ‫הצלעות‬ ‫על‬ ‫לעבור‬ ‫מתחילים‬ ‫אנחנו‬ ‫כעת‬
‫רכיבי‬ ‫בשני‬ ‫נמצאים‬ u, v ‫־‬ (u, v) ∈ E ‫צלע‬ ‫עבור‬ ‫אם‬
.A‫ל־‬ (u, v) ‫הצלע‬ ‫את‬ ‫מכניסים‬ ‫־‬ ‫שונים‬ ‫קשירות‬
‫פורש‬ ‫עץ‬ ‫כפלט‬ ‫וקיבלנו‬ ‫הצלעות‬ ‫על‬ ‫עברנו‬ ‫כאשר‬ ‫סיימנו‬
.‫מינימלי‬
.O (|E| log |E|) :‫האלגוריתם‬ ‫של‬ ‫הריצה‬ ‫זמן‬
‫מינימלי‬ ‫פורש‬ ‫עץ‬ ‫למציאת‬ ‫פריים‬ ‫אלגוריתם‬ 10.4
‫ופונקציית‬ ‫גרף‬ ‫רק‬ ‫לא‬ ‫כקלט‬ ‫נתונים‬ ‫אנחנו‬ ‫זה‬ ‫באלגוריתם‬
.r ‫התחלתי‬ ‫קודקוד‬ ‫גם‬ ‫אלא‬ ,‫משקל‬
.Q ‫לתור־עדיפויות‬ G ‫צלעות‬ ‫כל‬ ‫את‬ ‫מכניסים‬ ‫אנחנו‬
.Key ‫פונקציה‬ G‫ב־‬ ‫קודקוד‬ ‫לכל‬ ‫נגדיר‬ ‫כעת‬
‫מלבד‬ ∞‫ל־‬ ‫בתור‬ ‫הקודקודים‬ ‫כל‬ ‫של‬ Key‫ה־‬ ‫את‬ ‫נתאחל‬
.Key [r] = 0 :r ‫של‬ ‫זה‬
.π [r] = NIL :‫כמו־כן‬
:‫ריק‬ ‫יהיה‬ Q‫ש־‬ ‫עד‬ ‫הבאה‬ ‫הלולאה‬ ‫את‬ ‫מקיימים‬ ‫אנחנו‬ ‫כעת‬
‫הערך‬ ‫עם‬ ‫הקודקוד‬ ‫את‬ Q‫מ־‬ ‫מוציאים‬ ‫פעם‬ ‫כל‬ ‫אנחנו‬
:‫האם‬ v ‫שלו‬ ‫שכן‬ ‫כל‬ ‫עבור‬ ‫ובודקים‬ ‫המינימלי‬
:‫אזי‬ w (u, v)  Key [v] ‫וגם‬ v ∈ Q
.Key [v] = w (u, v) ‫וגם‬ π [v] = u :‫מעדכנים‬
:‫אחרות‬ ‫במילים‬
‫כל‬ ‫לגבי‬ ‫בודקים‬ ‫אנחנו‬ ‫לקודקוד‬ ‫מגיעים‬ ‫שאנחנו‬ ‫פעם‬ ‫כל‬
‫קטנה‬ ‫בניהם‬ ‫הצלע‬ ‫משקל‬ ‫וגם‬ Q‫ב־‬ ‫הוא‬ ‫אם‬ ‫משכניו‬ ‫אחד‬
.‫השכן‬ ‫של‬ Key‫מה־‬
(π [v] = u) u ‫גילה‬ v ‫שאת‬ ‫מעדכנים‬ ‫אנחנו‬ ‫־‬ ‫כן‬ ‫אם‬
.(w (u, v)‫)ב־‬ ‫בהתאם‬ ‫השכן‬ ‫של‬ Key‫ה־‬ ‫את‬ ‫ומעדכנים‬
O (|E| log |V |) :‫הינו‬ ‫זה‬ ‫אלגוריתם‬ ‫של‬ ‫הריצה‬ ‫זמן‬
‫ומרחקים‬ ‫ביותר‬ ‫קצרות‬ ‫מסילות‬ 11
‫בעיקר‬ ‫יהיה‬ ‫והדגש‬ ‫קצרים‬ ‫הסברים‬ ‫יוצגו‬ ,‫הבא‬ ‫בחלק‬
‫תמיד‬ ‫ולא‬ ‫שלהם‬ ‫והפלט‬ ‫)הקלט‬ ‫השונים‬ ‫האלגוריתמים‬ ‫על‬
.(‫שלהם‬ ‫התיאור‬
(‫הקודקודים‬ ‫לכל‬ ‫מסוים‬ ‫)מקודקוד‬ ‫הקדמה‬ 11.1
‫גם‬ ‫להיות‬ ‫שיכולה‬ ‫משקל‬ ‫פונקצית‬ ‫עם‬ ‫מכוון‬ ‫גרף‬ ‫לנו‬ ‫נתון‬
.‫חיוביות‬ ‫לא‬
‫ביותר‬ ‫הקצרה‬ ‫המסילה‬ ‫את‬ ‫מוצאים‬ ‫אנחנו‬ ‫איך‬ ‫השאלה‬
‫לכל‬ ‫קודקוד‬ ‫מכל‬ ‫או‬ ‫הקודקודים‬ ‫לכל‬ ‫מסוים‬ ‫מקודקוד‬
.‫קודקוד‬
:‫בגרף‬ ‫מעגלים‬ ‫לגבי‬ ‫הערה‬
‫במקרים‬ ‫אז‬ ,‫ישנן‬ ‫אם‬ ‫)או‬ ‫מעגלים‬ ‫אין‬ ‫כין‬ ‫להניח‬ ‫ניתן‬
:‫כי‬ ,(‫קצרות‬ ‫מסילות‬ ‫לחפש‬ ‫להמשיך‬ ‫טעם‬ ‫אין‬ ‫מסוימים‬
‫טעם‬ ‫אין‬ ‫אזי‬ ‫־‬ (0 ‫הינו‬ ‫שסכומו‬ ‫)או‬ ‫חיובי‬ ‫מעגל‬ ‫ישנו‬ ‫אם‬ .‫א‬
.‫אליו‬ ‫להיכנס‬
.‫נצא‬ ‫ולא‬ ‫אליו‬ ‫ניכנס‬ ‫נאחנו‬ ‫אזי‬ ‫־‬ ‫שלילי‬ ‫מעגל‬ ‫ישנו‬ ‫אם‬ .‫ב‬
‫או‬ ‫האורך‬ ‫את‬ ‫נשים‬ ‫אנחנו‬ ‫הזה‬ ‫בגרף‬ ‫קודקוד‬ ‫לכל‬
:‫למשל‬ ,‫אליו‬ ‫המשקל‬
0
2
2
−1
1
‫יכולים‬ ,‫שליליים‬ ‫להיות‬ ‫יכולים‬ ‫בקודקודים‬ ‫שהערכים‬ ‫כמובן‬
.−∞ ‫או‬ ∞ ‫להיות‬
‫את‬ ‫נעשה‬ ‫קודקוד‬ ‫מאותו‬ ‫הנל‬ ‫המסילות‬ ‫את‬ ‫למצוא‬ ‫בשביל‬
:‫הבא‬ ‫הדבר‬
‫הקודקודים‬ ‫שאר‬ ‫ואת‬ 0 ‫להיות‬ ‫נאתחל‬ ‫המקור‬ ‫קודקוד‬ ‫את‬
.∞‫ל־‬
15
‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬
Relax ‫־‬ ‫ההרפיה‬ ‫פעולת‬ 11.2
‫להגיע‬ ‫יותר‬ ‫קלה‬ ‫דרך‬ ‫ישנה‬ ‫אם‬ ‫לנו‬ ‫אומרת‬ ‫ההרפיה‬ ‫פעולת‬
.‫קודקוד‬ ‫אל‬
:‫הבא‬ ‫המצב‬ ‫לנו‬ ‫ונתון‬ ‫נניח‬ ,‫למשל‬
3
2
9
‫המשקל‬ ‫אזי‬ ‫הנתונה‬ ‫הצלע‬ ‫דרך‬ ‫נלך‬ ‫שאם‬ ‫לראות‬ ‫ניתן‬ ‫אזי‬
‫תהיה‬ ‫הימני‬ ‫לקודקוד‬ (‫המקור‬ ‫)קודקוד‬ s‫מ־‬ ‫המסילה‬ ‫עבור‬
:‫ונקבל‬ ‫ההרפיה‬ ‫פעולת‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ‫אזי‬ ‫קצרה‬
3
2
5
‫קודקוד‬ ‫להיות‬ 5 ‫בו‬ ‫שיש‬ ‫הקודקוד‬ ‫את‬ ‫שגילה‬ ‫זה‬ ‫את‬ ‫ונעדכן‬
.3
:‫כזה‬ ‫הוא‬ (‫)להרפיה‬ ‫לעידכון‬ ‫התנאי‬ ‫כללי‬ ‫באופן‬
:u, v ‫קודקודים‬ ‫שני‬ ‫עבור‬
:‫אזי‬ d [v]  d [u] + w (u, v) ‫אם‬
d [v] = du + w (u, v)
π [v] = u ‫וגם‬
(‫בלבד‬ ‫)תיאור‬ ‫פורד‬ ‫בלמן‬ ‫אלגוריתם‬ 11.3
‫משקל‬ ‫פונקצית‬ ,‫גרף‬ :‫הינו‬ ‫פורד‬ ‫בלמן‬ ‫אגלוריתם‬ ‫של‬ ‫הקלט‬
.‫מקור‬ ‫וקדוקוד‬
‫ושקר‬ ‫בגרף‬ ‫שלילי‬ ‫מעגל‬ ‫אין‬ ‫אם‬ ‫אמת‬ ‫מחזיר‬ ‫האלגוריתם‬
.‫שלילי‬ ‫מעגל‬ ‫ישנו‬ ‫אם‬
‫לכל‬ ‫ביותר‬ ‫הקלה‬ ‫המסילה‬ ‫את‬ ‫למצוא‬ ‫לנו‬ ‫עוזר‬ ‫האלגוריתם‬
.‫המקור‬ ‫מקודקוד‬ ‫קודקוד‬
.O (|V | |E|) ‫הינו‬ ‫האלגוריתם‬ ‫ריצת‬ ‫זמן‬
‫מעגלים‬ ‫חסר‬ ‫מכוון‬ ‫בגרף‬ ‫אלגוריתם‬ 11.4
(DAG)
.‫מקור‬ ‫וקודקוד‬ ‫משקל‬ ‫פונקציית‬ ,‫גרף‬ ‫הינו‬ ‫הקלט‬
,‫טופולוגי‬ ‫מיון‬ ‫עושים‬ ‫אנחנו‬ ‫אזי‬ DAG‫ב־‬ ‫ומדובר‬ ‫היות‬
‫אנחנו‬ ‫הטופולוגי‬ ‫המיון‬ ‫עפ‬ ‫לקוחים‬ ‫שאנחנו‬ ‫קודקוד‬ ‫ולכל‬
.‫שלו‬ ‫השכנים‬ ‫לכל‬ Relax ‫עושים‬
(Dijkstra) ‫דייקסטרה‬ ‫אלגוריתם‬ 11.5
‫שלו‬ ‫הריצה‬ ‫שזמן‬ ‫רק‬ ‫לבלמן־פורד‬ ‫דומה‬ ‫מאוד‬ ‫זה‬ ‫אלגוריתם‬
.‫יותר‬ ‫טוב‬
‫אין‬ ‫בגרף‬ ‫כי‬ ‫זה‬ ‫באלגוריתם‬ ‫מניחים‬ ‫גם‬ ‫אנחנו‬ ,‫כמו־כן‬
.‫שליליים‬ ‫משקלים‬
‫כמתואר‬ ‫הקודקודים‬ ‫כל‬ ‫את‬ ‫מאתחלים‬ ‫אנחנו‬ ‫כל‬ ‫ראשית‬
.11.1‫ב־‬
.S = ∅ ‫קודקודים‬ ‫קבוצת‬ ‫ומגדירים‬
‫את‬ ‫נכניס‬ ‫שאליו‬ Q ‫תור־עדיפויות‬ ‫מייצרים‬ ‫אנחנו‬
‫יהיה‬ ‫זה‬ ‫קודקוד‬ ‫ממנו‬ ‫שנשלוף‬ ‫פעם‬ ‫וכל‬ ‫הקודקודים‬
.‫המינימלי‬
‫נעשה‬ ‫ההוספה‬ ‫אחרי‬ ‫ומיד‬ S‫ל־‬ ‫הקודקוד‬ ‫את‬ ‫נוסיף‬ ‫אנחנו‬
.‫קודקוד‬ ‫מאותו‬ ‫היוצאות‬ ‫הצלעות‬ ‫לכל‬ Relax
:‫הריצה‬ ‫זמן‬
‫שולפים‬ ‫שאנחנו‬ ‫באירך‬ ‫כתלות‬ ‫להשתנות‬ ‫יכול‬ ‫הריצה‬ ‫זמן‬
:‫הקודקודים‬ ‫את‬
‫השני‬ ‫אחרי‬ ‫אחד‬ ‫ממערך‬ ‫הקודקודים‬ ‫את‬ ‫שולפים‬ ‫אנחנו‬ ‫אם‬
:‫הינו‬ ‫הריצה‬ ‫זמן‬ ‫אזי‬ (...‫הלאה‬ ‫וכך‬ 2 ‫ואז‬ 1'‫מס‬ ‫)קודקוד‬
.O |V |
2
‫האיבר‬ ‫הוא‬ ‫)השורש‬ ‫בערימת־מינימום‬ ‫משתמשים‬ ‫אנחנו‬ ‫אם‬
O ((|V | + |E|) log |V |) :‫הינו‬ ‫הריצה‬ ‫זמן‬ ‫אזי‬ (‫המינימלי‬
‫הריצה‬ ‫זמן‬ ‫אזי‬ ‫פיבונאצ'י‬ ‫בערימת‬ ‫משתמשים‬ ‫אנחנו‬ ‫ואם‬
‫הטוב‬ ‫הריצה‬ ‫זמן‬ ‫)זהו‬ O (|V | log |V | + |E|) :‫הינו‬
.(‫ביותר‬
‫בין‬ ‫ומרחקים‬ ‫ביותר‬ ‫קצרות‬ ‫מסילות‬ 12
‫הקודקודים‬ ‫זוגות‬ ‫כל‬
‫את‬ ‫למצוא‬ ‫ורצינו‬ ‫מקור‬ ‫קודקוד‬ ‫שיש‬ ‫על־כך‬ ‫דיברנו‬ ‫מקודם‬
‫עם‬ ‫מכוון‬ ‫בגרף‬ ‫קודקוד‬ ‫לכל‬ ‫ממנו‬ ‫ביותר‬ ‫הקלים‬ ‫המרחקים‬
.‫צלע‬ ‫לכל‬ ‫משקל‬ ‫פונקצית‬
‫את‬ ‫למצוא‬ ‫רוצים‬ ‫אנחנו‬ ‫־‬ ‫כללי‬ ‫באופן‬ ‫מדברים‬ ‫אנחנו‬ ‫כעת‬
...‫מקור‬ ‫קודקוד‬ ‫בלי‬ ‫שישנן‬ ‫ביותר‬ ‫הקלות‬ ‫המסילות‬
‫המסליות‬ ‫מטריצת‬ 12.1
16

More Related Content

What's hot

סיכום קצר בקורס "מבוא לתאוריה של מדעי המחשב
סיכום קצר בקורס "מבוא לתאוריה של מדעי המחשבסיכום קצר בקורס "מבוא לתאוריה של מדעי המחשב
סיכום קצר בקורס "מבוא לתאוריה של מדעי המחשבcsnotes
 
מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מורן אלקובי
 
מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מורן אלקובי
 
סיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליותסיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליותcsnotes
 
סיכום במורכבות החישובים
סיכום במורכבות החישוביםסיכום במורכבות החישובים
סיכום במורכבות החישוביםcsnotes
 
מתמטיקה דיסקרטית - לוגיקה
מתמטיקה דיסקרטית - לוגיקהמתמטיקה דיסקרטית - לוגיקה
מתמטיקה דיסקרטית - לוגיקהמורן אלקובי
 
נוסחאון 4 יחל
נוסחאון 4 יחלנוסחאון 4 יחל
נוסחאון 4 יחלbagrutonline
 
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמורן אלקובי
 
Fundamental principle of counting -Discrete Mathematics
Fundamental principle of counting -Discrete MathematicsFundamental principle of counting -Discrete Mathematics
Fundamental principle of counting -Discrete MathematicsOmnia A. Abdullah
 
Section 3.3 quadratic functions and their properties
Section 3.3 quadratic functions and their properties Section 3.3 quadratic functions and their properties
Section 3.3 quadratic functions and their properties Wong Hsiung
 
26 alternating series and conditional convergence x
26 alternating series and conditional convergence x26 alternating series and conditional convergence x
26 alternating series and conditional convergence xmath266
 
Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)
Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)
Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)Μάκης Χατζόπουλος
 
Topology for Computing: Homology
Topology for Computing: HomologyTopology for Computing: Homology
Topology for Computing: HomologySangwoo Mo
 
נוסחאון 3 יחידות לימוד מתמטיקה
נוסחאון 3 יחידות לימוד מתמטיקהנוסחאון 3 יחידות לימוד מתמטיקה
נוסחאון 3 יחידות לימוד מתמטיקהbagrutonline
 
Algebra and trigonometry-op
Algebra and trigonometry-opAlgebra and trigonometry-op
Algebra and trigonometry-opChristos Loizos
 
סיכום הקורס במבנים אלגבריים
סיכום הקורס במבנים אלגברייםסיכום הקורס במבנים אלגבריים
סיכום הקורס במבנים אלגברייםcsnotes
 

What's hot (20)

סיכום קצר בקורס "מבוא לתאוריה של מדעי המחשב
סיכום קצר בקורס "מבוא לתאוריה של מדעי המחשבסיכום קצר בקורס "מבוא לתאוריה של מדעי המחשב
סיכום קצר בקורס "מבוא לתאוריה של מדעי המחשב
 
מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3מצגת לוגיקה מלאה חלק 3 מתוך 3
מצגת לוגיקה מלאה חלק 3 מתוך 3
 
מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3מצגת לוגיקה מלאה חלק 2 מתוך 3
מצגת לוגיקה מלאה חלק 2 מתוך 3
 
סיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליותסיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליות
 
סיכום במורכבות החישובים
סיכום במורכבות החישוביםסיכום במורכבות החישובים
סיכום במורכבות החישובים
 
Functions
FunctionsFunctions
Functions
 
Lesson 10: The Chain Rule
Lesson 10: The Chain RuleLesson 10: The Chain Rule
Lesson 10: The Chain Rule
 
Homomorphisms
HomomorphismsHomomorphisms
Homomorphisms
 
מתמטיקה דיסקרטית - לוגיקה
מתמטיקה דיסקרטית - לוגיקהמתמטיקה דיסקרטית - לוגיקה
מתמטיקה דיסקרטית - לוגיקה
 
נוסחאון 4 יחל
נוסחאון 4 יחלנוסחאון 4 יחל
נוסחאון 4 יחל
 
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליותמתמטיקה דיסקרטית - קבוצות קשרים, דואליות
מתמטיקה דיסקרטית - קבוצות קשרים, דואליות
 
Fundamental principle of counting -Discrete Mathematics
Fundamental principle of counting -Discrete MathematicsFundamental principle of counting -Discrete Mathematics
Fundamental principle of counting -Discrete Mathematics
 
Section 3.3 quadratic functions and their properties
Section 3.3 quadratic functions and their properties Section 3.3 quadratic functions and their properties
Section 3.3 quadratic functions and their properties
 
26 alternating series and conditional convergence x
26 alternating series and conditional convergence x26 alternating series and conditional convergence x
26 alternating series and conditional convergence x
 
Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)
Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)
Προτάσεις χωρίς απόδειξη (Οδηγίες Υπουργείου Παιδείας 2019)
 
Topology for Computing: Homology
Topology for Computing: HomologyTopology for Computing: Homology
Topology for Computing: Homology
 
DM-unit-3.ppt
DM-unit-3.pptDM-unit-3.ppt
DM-unit-3.ppt
 
נוסחאון 3 יחידות לימוד מתמטיקה
נוסחאון 3 יחידות לימוד מתמטיקהנוסחאון 3 יחידות לימוד מתמטיקה
נוסחאון 3 יחידות לימוד מתמטיקה
 
Algebra and trigonometry-op
Algebra and trigonometry-opAlgebra and trigonometry-op
Algebra and trigonometry-op
 
סיכום הקורס במבנים אלגבריים
סיכום הקורס במבנים אלגברייםסיכום הקורס במבנים אלגבריים
סיכום הקורס במבנים אלגבריים
 

Similar to סיכום קצר של הקורס במבני נתונים

סיכום הקורס בבינה מלאכותית
סיכום הקורס בבינה מלאכותיתסיכום הקורס בבינה מלאכותית
סיכום הקורס בבינה מלאכותיתcsnotes
 
Week2 - Matrix arrays and graphics basics - stud.pdf
Week2 - Matrix arrays and graphics basics - stud.pdfWeek2 - Matrix arrays and graphics basics - stud.pdf
Week2 - Matrix arrays and graphics basics - stud.pdfRotemCalisir1
 
סיכום של הקורס אלגוריתמים
סיכום של הקורס אלגוריתמיםסיכום של הקורס אלגוריתמים
סיכום של הקורס אלגוריתמיםcsnotes
 
סיכום על מטרואידים וזרימות בגרפים
סיכום על מטרואידים וזרימות בגרפיםסיכום על מטרואידים וזרימות בגרפים
סיכום על מטרואידים וזרימות בגרפיםcsnotes
 
סיכום הקורס במבוא להצפנה
סיכום הקורס במבוא להצפנהסיכום הקורס במבוא להצפנה
סיכום הקורס במבוא להצפנהcsnotes
 
מערך דו ממדי
מערך דו ממדימערך דו ממדי
מערך דו ממדיlizliziz
 
סיכום של הקורס מבוא להצפנה
סיכום של הקורס מבוא להצפנהסיכום של הקורס מבוא להצפנה
סיכום של הקורס מבוא להצפנהcsnotes
 
סיכום של הקרוס למידה עמוקה
סיכום של הקרוס למידה עמוקהסיכום של הקרוס למידה עמוקה
סיכום של הקרוס למידה עמוקהcsnotes
 
lecture9_iterative_merge_sort (1).pdf
lecture9_iterative_merge_sort (1).pdflecture9_iterative_merge_sort (1).pdf
lecture9_iterative_merge_sort (1).pdfhadadrefael
 
קיצון - שיעור.pdf
קיצון - שיעור.pdfקיצון - שיעור.pdf
קיצון - שיעור.pdfOmerLevi7
 
2013 summer A 805 a
2013 summer A 805 a2013 summer A 805 a
2013 summer A 805 abagrutonline
 
סיכום הקורס בחישוביות ומורכבות החישובים
סיכום הקורס בחישוביות ומורכבות החישוביםסיכום הקורס בחישוביות ומורכבות החישובים
סיכום הקורס בחישוביות ומורכבות החישוביםcsnotes
 
2014 summer A 806 a
2014 summer A 806 a2014 summer A 806 a
2014 summer A 806 abagrutonline
 
2014 summer B 806 a
2014 summer B 806 a2014 summer B 806 a
2014 summer B 806 abagrutonline
 

Similar to סיכום קצר של הקורס במבני נתונים (15)

סיכום הקורס בבינה מלאכותית
סיכום הקורס בבינה מלאכותיתסיכום הקורס בבינה מלאכותית
סיכום הקורס בבינה מלאכותית
 
Week2 - Matrix arrays and graphics basics - stud.pdf
Week2 - Matrix arrays and graphics basics - stud.pdfWeek2 - Matrix arrays and graphics basics - stud.pdf
Week2 - Matrix arrays and graphics basics - stud.pdf
 
סיכום של הקורס אלגוריתמים
סיכום של הקורס אלגוריתמיםסיכום של הקורס אלגוריתמים
סיכום של הקורס אלגוריתמים
 
סיכום על מטרואידים וזרימות בגרפים
סיכום על מטרואידים וזרימות בגרפיםסיכום על מטרואידים וזרימות בגרפים
סיכום על מטרואידים וזרימות בגרפים
 
סיכום הקורס במבוא להצפנה
סיכום הקורס במבוא להצפנהסיכום הקורס במבוא להצפנה
סיכום הקורס במבוא להצפנה
 
מערך דו ממדי
מערך דו ממדימערך דו ממדי
מערך דו ממדי
 
סיכום של הקורס מבוא להצפנה
סיכום של הקורס מבוא להצפנהסיכום של הקורס מבוא להצפנה
סיכום של הקורס מבוא להצפנה
 
סיכום של הקרוס למידה עמוקה
סיכום של הקרוס למידה עמוקהסיכום של הקרוס למידה עמוקה
סיכום של הקרוס למידה עמוקה
 
lecture9_iterative_merge_sort (1).pdf
lecture9_iterative_merge_sort (1).pdflecture9_iterative_merge_sort (1).pdf
lecture9_iterative_merge_sort (1).pdf
 
Lab7 8 slides
Lab7 8 slidesLab7 8 slides
Lab7 8 slides
 
קיצון - שיעור.pdf
קיצון - שיעור.pdfקיצון - שיעור.pdf
קיצון - שיעור.pdf
 
2013 summer A 805 a
2013 summer A 805 a2013 summer A 805 a
2013 summer A 805 a
 
סיכום הקורס בחישוביות ומורכבות החישובים
סיכום הקורס בחישוביות ומורכבות החישוביםסיכום הקורס בחישוביות ומורכבות החישובים
סיכום הקורס בחישוביות ומורכבות החישובים
 
2014 summer A 806 a
2014 summer A 806 a2014 summer A 806 a
2014 summer A 806 a
 
2014 summer B 806 a
2014 summer B 806 a2014 summer B 806 a
2014 summer B 806 a
 

More from csnotes

סיכום על בדיקת לינאריות
סיכום על בדיקת לינאריותסיכום על בדיקת לינאריות
סיכום על בדיקת לינאריותcsnotes
 
סיכום הקורס במורכבות החישובים
סיכום הקורס במורכבות החישוביםסיכום הקורס במורכבות החישובים
סיכום הקורס במורכבות החישוביםcsnotes
 
סיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידעסיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידעcsnotes
 
תזכורת לגבי הוכחות בשיטת האלכסון
תזכורת לגבי הוכחות בשיטת האלכסוןתזכורת לגבי הוכחות בשיטת האלכסון
תזכורת לגבי הוכחות בשיטת האלכסוןcsnotes
 
נספח תזכורות מלוגיקה בולאנית
נספח תזכורות מלוגיקה בולאניתנספח תזכורות מלוגיקה בולאנית
נספח תזכורות מלוגיקה בולאניתcsnotes
 
סיכום קצר של דברים מתוך הקורס בתורת החישוביות
סיכום קצר של דברים מתוך הקורס בתורת החישוביותסיכום קצר של דברים מתוך הקורס בתורת החישוביות
סיכום קצר של דברים מתוך הקורס בתורת החישוביותcsnotes
 
סיכום בתחשיב היחסים
סיכום בתחשיב היחסיםסיכום בתחשיב היחסים
סיכום בתחשיב היחסיםcsnotes
 
סיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליותסיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליותcsnotes
 
מבני נתונים
מבני נתוניםמבני נתונים
מבני נתוניםcsnotes
 
Calculus1.pdf
Calculus1.pdfCalculus1.pdf
Calculus1.pdfcsnotes
 
ModProg.pdf
ModProg.pdfModProg.pdf
ModProg.pdfcsnotes
 
סיכום קצר על טורי טיילור
סיכום קצר על טורי טיילורסיכום קצר על טורי טיילור
סיכום קצר על טורי טיילורcsnotes
 
סיכום קצר של אלגברה לינארית ב'
סיכום קצר של אלגברה לינארית ב'סיכום קצר של אלגברה לינארית ב'
סיכום קצר של אלגברה לינארית ב'csnotes
 

More from csnotes (13)

סיכום על בדיקת לינאריות
סיכום על בדיקת לינאריותסיכום על בדיקת לינאריות
סיכום על בדיקת לינאריות
 
סיכום הקורס במורכבות החישובים
סיכום הקורס במורכבות החישוביםסיכום הקורס במורכבות החישובים
סיכום הקורס במורכבות החישובים
 
סיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידעסיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידע
 
תזכורת לגבי הוכחות בשיטת האלכסון
תזכורת לגבי הוכחות בשיטת האלכסוןתזכורת לגבי הוכחות בשיטת האלכסון
תזכורת לגבי הוכחות בשיטת האלכסון
 
נספח תזכורות מלוגיקה בולאנית
נספח תזכורות מלוגיקה בולאניתנספח תזכורות מלוגיקה בולאנית
נספח תזכורות מלוגיקה בולאנית
 
סיכום קצר של דברים מתוך הקורס בתורת החישוביות
סיכום קצר של דברים מתוך הקורס בתורת החישוביותסיכום קצר של דברים מתוך הקורס בתורת החישוביות
סיכום קצר של דברים מתוך הקורס בתורת החישוביות
 
סיכום בתחשיב היחסים
סיכום בתחשיב היחסיםסיכום בתחשיב היחסים
סיכום בתחשיב היחסים
 
סיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליותסיכום של הקורס אוטומטים ושפות פורמליות
סיכום של הקורס אוטומטים ושפות פורמליות
 
מבני נתונים
מבני נתוניםמבני נתונים
מבני נתונים
 
Calculus1.pdf
Calculus1.pdfCalculus1.pdf
Calculus1.pdf
 
ModProg.pdf
ModProg.pdfModProg.pdf
ModProg.pdf
 
סיכום קצר על טורי טיילור
סיכום קצר על טורי טיילורסיכום קצר על טורי טיילור
סיכום קצר על טורי טיילור
 
סיכום קצר של אלגברה לינארית ב'
סיכום קצר של אלגברה לינארית ב'סיכום קצר של אלגברה לינארית ב'
סיכום קצר של אלגברה לינארית ב'
 

סיכום קצר של הקורס במבני נתונים

  • 1. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫נתונים‬ ‫מבני‬ ‫לונדון‬ ‫ערן‬ ‫ד"ר‬ I ‫חלק‬ ‫מיון‬ ‫ואז‬ ‫הבעיה‬ ‫את‬ ‫להגדיר‬ ‫כל‬ ‫קודם‬ ‫ראוי‬ ...‫לפתרונה‬ ‫דרכים‬ ‫להציע‬ ‫מיון‬ ‫המושג‬ ‫של‬ ‫הגדרה‬ 0.1 ‫בגודל‬ A ‫מערך‬ ‫הוא‬ ‫שלו‬ ‫הקלט‬ ‫אשר‬ ‫אלגוריתם‬ ‫הוא‬ ‫מיון‬ :n A = [a1, a2, . . . , an] ‫או‬ ‫עולה‬ ‫בסדר‬ ,‫המערך‬ ‫של‬ 1 ‫פרמוטציה‬ ‫הינו‬ ‫הפלט‬ ‫ואילו‬ :‫דהיינו‬ ,‫יורד‬ A = aσ(1), aσ(2), . . . , aσ(n) .aσ(1) ≤ aσ(2) ≤ · · · ≤ aσ(n) :‫כאשר‬ Sorts in) ‫במקום‬ ‫ממין‬ ‫מכונה‬ ‫מיון‬ ‫אלגוריתם‬ 0.1 ‫הגדרה‬ ,‫כלומר‬ ,n‫ב־‬ ‫תלוי‬ ‫אינו‬ ‫הנוספים‬ ‫התאים‬ ‫מספר‬ ‫אם‬ (place .O (1) ‫־‬ ‫קבוע‬ ‫הוא‬ ‫הנדרשים‬ ‫הנוסיפים‬ ‫התאים‬ ‫מספר‬ ‫ניתן‬ .‫במערך‬ ‫האיברים‬ ‫של‬ ‫כלשהו‬ ‫סדר‬ ‫כלומר‬ .‫פרמוטציה=תמורה‬1 ‫)עמוד‬ 12.5 ‫בסעיף‬ ‫אלגבריים‬ ‫מבנים‬ ‫של‬ ‫בסיכום‬ ‫פרמוטציות‬ ‫על‬ ‫עוד‬ ‫לקרוא‬ .(8 ‫)עמוד‬ 18 ‫ובפרק‬ (SX :‫שם‬ ‫שנקרא‬ ‫מה‬ ,5 (Heapsort) ‫ערימה‬ ‫מיון‬ 1 ‫ערימה‬ ‫הגדרת‬ 1.1 ‫עץ‬ ‫כמו‬ ‫להציגו‬ ‫ניתן‬ ‫אשר‬ ‫מערך‬ ‫הינה‬ (‫)בינארית‬ ‫ערימה‬ ‫מתאים‬ ‫בעץ‬ ‫קודקוד‬ ‫כל‬ ‫כאשר‬ ‫מלא‬ ‫כמעט‬ ‫או‬ ‫מלא‬ ‫בינארי‬ .2 ‫במערך‬ ‫לתא‬ (‫)השורה‬ ‫הרמה‬ ‫מלבד‬ ‫הרמות‬ ‫בכל‬ ‫מלא‬ ‫הינו‬ ‫העץ‬ ‫־‬ ‫שיכולה‬ (‫מלא‬ ‫כמעט‬ ‫הינו‬ ‫העץ‬ ‫שבהם‬ ‫)במקרים‬ ‫האחרונה‬ ‫השמאלי‬ ‫מהקצה‬ ‫מלאה‬ ‫תהיה‬ ‫היא‬ ‫אבל‬ ‫שלמה‬ ‫לא‬ ‫להיות‬ ‫־‬ (‫)שורה‬ ‫רמה‬ ‫באותה‬ ‫כלשהו‬ ‫לקודקוד‬ ‫עד‬ :‫נסמן‬ .‫המערך‬ ‫גודל‬ ‫־‬ length [A] .‫בערימה‬ ‫האלמנטים‬ ‫מספר‬ ‫־‬heap − size [A] ‫שלא‬ ‫)מכיוון‬ heap − size [A] ≤ length [A] ‫ש־‬ ‫כמובן‬ .(‫המערך‬ ‫לגודל‬ ‫זהה‬ ‫יהיה‬ ‫הערימה‬ ‫גודל‬ ‫תמיד‬ :‫עצים‬ ‫לגבי‬ ‫תזכורת‬ .2 ‫היותר‬ ‫לכל‬ ‫היא‬ ‫קודקוד‬ ‫כל‬ ‫של‬ ‫הדרגה‬ ‫־‬ ‫בינארי‬ ‫עץ‬ l ‫ולכל‬ ‫העומק‬ ‫באותו‬ ‫העלים‬ ‫כל‬ ‫־‬ ‫שלם‬ ‫בינארי‬ ‫עץ‬ l .2 ‫דרגה‬ ‫הקודקודים‬ 2 ‫שדרגתו‬ ‫או‬ ‫עלה‬ ‫הוא‬ ‫קודקוד‬ ‫כל‬ ‫־‬ ‫מלא‬ ‫בינארי‬ ‫עץ‬ l .‫בדיוק‬ :‫העץ‬ ‫בנוי‬ ‫בעיקרון‬ ‫וככה‬ ,A [1] ‫הינו‬ ‫העץ‬ ‫שורש‬ ai 2i 2i+1 b c .a ≥ b ∧ a ≥ c :‫שלו‬ ‫מהילדים‬ ‫גדול‬ ‫יהיה‬ ‫תמיד‬ ‫האבא‬ :(i = 1) ‫השורש‬ ‫אינו‬ ‫שהוא‬ ‫קודקוד‬ ‫לכל‬ ‫אחרות‬ ‫במילים‬ .A [Parent (i)] ≥ A [i] ‫בשורש‬ ‫נמצא‬ ‫בערימה‬ ‫גבוה‬ ‫הכי‬ ‫הערך‬ :‫מסקנה‬ !‫העץ‬ :(‫בתרשים‬ ‫)כמתואר‬ ‫לזכור‬ ‫כדאי‬ Parent (i) = i 2 Left (i) = 2i Right (i) = 2i + 1 ‫בעץ‬ (‫)קודקוד‬ ‫צומת‬ ‫של‬ ‫גובה‬ ‫הגדרת‬ 1.1.1 ‫מטה‬ ‫כלפי‬ ‫המסילה‬ ‫ע"י‬ ‫מוגדר‬ ‫בעץ‬ ‫קודקוד‬ ‫של‬ ‫הגובה‬ ‫רחוק‬ ‫הכי‬ ‫לעלה‬ ‫עד‬ ‫קודקוד‬ ‫מאותו‬ ‫בעץ‬ ‫לעבור‬ ‫שצריך‬ ‫)זה‬ ‫ערימה‬ ‫הוא‬ ‫מערך‬ ‫כל‬ ‫לא‬ .‫מדובר‬ ‫מערך‬ ‫איזה‬ ‫על‬ ‫תלוי‬ ‫שזה‬ ‫כמובן‬2 .(‫שבו‬ ‫הערכים‬ ‫במיקומי‬ ‫תלוי‬ 1
  • 2. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫כמה‬ ‫כמובן‬ ‫להיות‬ ‫יכולות‬ ,‫נמוכה‬ ‫הכי‬ ‫ברמה‬ ‫עלה‬ ‫)כלומר‬ .(‫מעגלים‬ ‫)ללא‬ ‫פשוטה‬ ‫מסילה‬ ‫ע"י‬ ,(‫כאלה‬ ‫דרכים‬ ‫או‬ ‫מסילות‬ :(‫ערימה‬ ‫שאינו‬ ‫בינארי‬ ‫עץ‬ ‫)ניקח‬ ‫למשל‬ 19 11 4 7 10 5 3 .2 ‫הינו‬ 11 ‫קודקוד‬ ‫של‬ ‫הגובה‬ .0 ‫הינו‬ 3 ‫קודקוד‬ ‫של‬ ‫הגובה‬ .1 ‫הינו‬ 10 ‫של‬ ‫הגובה‬ ‫־‬ ‫שלנו‬ ‫במקרה‬ ,‫השורש‬ ‫של‬ ‫הגובה‬ ‫הינו‬ ‫העץ‬ ‫של‬ ‫הגובה‬ ,‫לכן‬ .3 ‫־‬ 19 ‫קודקוד‬ ‫של‬ ‫הגובה‬ ‫זה‬ ‫־‬ ‫היא‬ ‫איברים‬ n ‫עם‬ ‫ערימה‬ ‫של‬ ‫הגובה‬ 1.1 ‫טענה‬ .Θ (log n) ‫בערימה‬ ‫שונים‬ ‫שימושים‬ 1.2 ‫הריצה‬ ‫זמן‬ ‫הפעולה‬ O (log n) HEAPIFY Θ (n) BUILD-HEAP O (n log n) HEAPSORT O (log n) EXTRACT-MAX O (log n) INSERT HEAPIFY 1.2.1 .‫הערימה‬ ‫מיון‬ ‫מאלגוריתם‬ ‫חלק‬ ‫מהווה‬ ‫אשר‬ ‫אלגוריתם‬ ‫זהו‬ :‫האלגוריתם‬ ‫קלט‬ .‫במערך‬ ‫לאינדקס‬ ‫מצביע‬ ‫־‬ i ,‫מערך‬ ‫־‬ A ‫בעצם‬ ‫שאנחנו‬ (‫סדר‬ ‫קצת‬ ‫לעשות‬ ‫)בשביל‬ ‫כאן‬ ‫לציין‬ ‫חשוב‬ ‫אבל‬ ,‫מערך‬ ‫בעצם‬ ‫היא‬ ‫ערימה‬ ,‫כלומר‬ ,‫מערך‬ ‫עם‬ ‫עובדים‬ ‫שלם‬ ‫בינארי‬ ‫עץ‬ ‫והיא‬ ‫מערך‬ ‫לאותו‬ ‫נוחה‬ ‫הצגה‬ ‫דרך‬ ‫ישנה‬ .(‫שלם‬ ‫כמעט‬ ‫)או‬ ‫אזי‬ ,‫בעץ‬ ‫קודקוד‬ ‫ניקח‬ ‫אם‬ :‫הקלט‬ ‫לגבי‬ ‫הנחה‬ :‫כלומר‬ ,‫שמשמאלו‬ ‫והתת־עץ‬ ‫שמימינו‬ ‫התת־עץ‬ .‫ערימות‬ ‫הינן‬ ,Left (i) , Right (i) ‫קטן‬ A [i] ‫קודקוד‬ ‫שאותו‬ ‫להיות‬ ‫יכול‬ ‫שעדיין‬ ‫לזכור‬ ‫חשוב‬ :‫למשל‬ ,‫שלו‬ ‫הילדים‬ ‫משני‬ 12 98 35 ‫הקודקוד‬ ‫את‬ ‫נבחר‬ ‫שאם‬ ‫לנו‬ ‫מבטיחה‬ ‫הקלט‬ ‫לגבי‬ ‫ההנחה‬ ‫מה‬ ‫כל‬ ‫אזי‬ (‫הכפול‬ ‫העיגול‬ ‫עם‬ ‫)הקודקוד‬ 12 ‫בו‬ ‫שיש‬ ‫הם‬ 35, 98‫)ש־‬ ‫ערימה‬ ‫הוא‬ ,‫ומשמאלו‬ ‫מימינו‬ ,‫מתחתיו‬ ‫שיש‬ .((‫העצים‬ ‫שני‬ ‫)של‬ ‫הערימות‬ ‫שתי‬ ‫של‬ ‫השורשים‬ ‫מופיעים‬ ‫אינם‬ ‫הם‬ ‫אך‬ 98, 35‫ל־‬ ‫מתחת‬ ‫קודקודים‬ ‫יש‬ .‫בשרטוט‬ 3 ‫גדול‬ ‫הקודקוד‬ ‫האם‬ :‫בודקים‬ ‫אנחנו‬ :‫האלגוריתם‬ ‫רעיון‬ .‫סיימנו‬ ‫אז‬ ‫כן‬ ‫אם‬ ?‫שלו‬ ‫הבנים‬ ‫משני‬ .‫בניו‬ ‫משני‬ ‫הגדול‬ ‫עם‬ ‫אותו‬ ‫מחליפים‬ ‫־‬ ‫לא‬ ‫אם‬ ‫לקודקוד‬ ‫הדבר‬ ‫אותו‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ,‫שהחלפנו‬ ‫אחרי‬ ,‫כעת‬ :‫כלומר‬ ,‫שהחלפנו‬ ,(‫הכפול‬ ‫העיגול‬ ‫עם‬ ‫)זה‬ 12 ‫הערך‬ ‫עם‬ ‫בקודקוד‬ ‫שבחרנו‬ ‫נניח‬ :‫כך‬ ‫יראה‬ ‫זה‬ ‫ההחלפה‬ ‫אחרי‬ ‫אזי‬ 98 12 35 ‫הילדים‬ ‫עם‬ ‫בדיוק‬ ‫בדיוק‬ ‫אותה‬ ‫את‬ ‫נבצע‬ ‫אנחנו‬ ‫כעת‬ ...‫שוב‬ ‫נחליף‬ ‫הצורך‬ ‫ובמידת‬ 12 ‫של‬ ‫החדשים‬ ...‫לעלים‬ ‫שנגיע‬ ‫עד‬ ,‫הלאה‬ ‫וכך‬ ‫הנבחר‬ ‫הקודקוד‬ ‫של‬ ‫מהמיקום‬ ‫שהחל‬ ‫כמובן‬ ‫הוא‬ ‫הפלט‬ ...‫ערימה‬ ‫לנו‬ ‫יש‬ ‫בהתחלה‬ ‫־‬ ‫הוא‬ n ‫בגודל‬ ‫ערימה‬ ‫עבור‬ ‫זה‬ ‫אלגוריתם‬ ‫של‬ ‫הריצה‬ ‫זמן‬ .O (log n) BUILD-HEAP ‫ערימה‬ ‫בניית‬ 1.2.2 .O (n) ‫הינו‬ ‫נתון‬ ‫ממערך‬ ‫ערימה‬ ‫בניית‬ ‫של‬ ‫הריצה‬ ‫זמן‬ ,‫העלים‬ ‫את‬ ‫לבדוק‬ ‫צורך‬ ‫לנו‬ ‫אין‬ :‫בקצרה‬ ‫הרעיון‬ ‫)התחלת‬ ‫נתחיל‬ ‫אנחנו‬ ‫ממערך‬ ‫ערימה‬ ‫נבנה‬ ‫אנחנו‬ ‫כאשר‬ ‫לכן‬ . length(A) 2 :‫שזה‬ ‫עלים‬ ‫שאינם‬ ‫מהקודקודים‬ ‫)וככה‬ length(A) 2 ‫שמספרו‬ ‫מהקודקוד‬ ‫נתחיל‬ ,‫כלומר‬ ‫בינארי‬ ‫שבעץ‬ ‫בעבר‬ ‫הוכחנו‬ ‫כי‬ ,‫העלים‬ ‫כל‬ ‫על‬ ‫מדלגים‬ ‫אנחנו‬ ‫הקודקוד‬ ‫ולכן‬ ,‫עלים‬ ‫שאינם‬ ‫קודקודים‬ length(A) 2 ‫יש‬ ‫אינו‬ ‫בוודאי‬ ‫הוא‬ ‫אזי‬ length(A) 2 ‫הוא‬ ‫הסידורי‬ ‫שמספרו‬ ‫הם‬ ‫השאר‬ ‫כל‬ ,‫ממנו‬ ‫קטן‬ ‫הסידורי‬ ‫שמספרם‬ ‫אלה‬ ‫וכך‬ ‫עלה‬ ‫מהקודקודים‬ ‫אחד‬ ‫כל‬ ‫על‬ ,1 ‫מספר‬ ‫לקודקוד‬ ‫עד‬ ‫ונרד‬ (‫עלים‬ .‫במערך‬ ‫התא‬ ‫־‬ ‫או‬ ‫־‬ ‫הקודקוד‬ ‫לערך‬ ‫היא‬ ‫כמובן‬ ‫הכוונה‬3 2
  • 3. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ .(...‫אינדוקציה‬ ‫יש‬ ‫גם‬ ‫הדרך‬ ‫בהמשך‬ .HEAPIFY ‫נעשה‬ :‫למשל‬ 98 12 35 32 22 29 ‫ש"מספרו‬ ‫הקודקוד‬ ‫כי‬ 35‫מ־‬ ‫מתחילים‬ ‫היינו‬ ‫הזה‬ ‫במקרה‬ ‫גבוה‬ ‫הכי‬ ‫הסידורי‬ ‫המספר‬ ‫עם‬ ‫הקודקוד‬ ‫הוא‬ ,3 ,"‫הסידורי‬ ...‫עלה‬ ‫שאינו‬ ‫)כי‬ 12 ‫הוא‬ ‫שערכו‬ ‫לקודקוד‬ ‫ממשיכים‬ ‫אנחנו‬ ‫מכן‬ ‫לאחר‬ .(2 ‫הוא‬ ‫הסידורי‬ ‫מספרו‬ HEAPSORT ‫־‬ ‫הערימה‬ ‫מיון‬ ‫אלגוריתם‬ 1.3 (1.2‫)ב־‬ ‫הנ"ל‬ ‫הפעולות‬ ‫הפעולות‬ ‫שתי‬ ‫את‬ ‫שהגדרנו‬ ‫אחרי‬ ‫באמצעות‬ ‫למיון‬ ‫אלגוריתם‬ ‫בעזרתן‬ ‫לבנות‬ ‫יכולים‬ ‫אנחנו‬ .‫ערימה‬ ‫באופן‬ ‫ויעבוד‬ ‫ערימה‬ ‫כבר‬ ‫שהוא‬ ‫מערך‬ ‫שיקבל‬ ‫אלגוריתם‬ :‫הבא‬ "‫"בצד‬ ‫בתא‬ ‫אותן‬ ‫וישים‬ ‫העץ‬ ‫שורש‬ ‫את‬ ‫יוציא‬ ‫הוא‬ ‫פעם‬ ‫כל‬ A [i] ‫את‬ ‫וישים‬ ,(‫ביותר‬ ‫הגדול‬ ‫הערך‬ ‫עם‬ ‫התא‬ ‫יהיה‬ ‫זה‬ ‫)כי‬ .‫השורש‬ ‫במקום‬ ‫קטן‬ ‫הכי‬ ‫הערך‬ ‫עם‬ ‫העלה‬ ‫־‬ ‫פעם‬ ‫ושוב‬ ‫־‬ (‫)לשורש‬ HEAPIFY (A, 1) ‫עושים‬ ‫אז‬ .‫בשורש‬ ‫שיש‬ ‫מה‬ ‫את‬ HEAPIFY ‫ה־‬ ‫אחרי‬ ,‫מוציאים‬ :‫למשל‬ ‫ובמקומו‬ 98 ‫את‬ ‫שנוציא‬ ‫הוא‬ ‫לנו‬ ‫שיהיה‬ ‫מה‬ ‫הזה‬ ‫במקרה‬ ‫־‬ 12 ‫את‬ ‫נשים‬ 98 12 35 :‫הוא‬ ‫שנקבל‬ ‫מה‬ ,‫ולכן‬ 12 98 35 :‫ונקבל‬ ‫העץ‬ ‫לראש‬ HEAPIFY ‫נעשה‬ ‫כעת‬ 35 98 12 ‫הסתיים‬ ‫האלגוריתם‬ ‫קודקודים‬ ‫שני‬ ‫רק‬ ‫לנו‬ ‫שיש‬ ‫בגלל‬ ,‫כעת‬ ‫־‬ ‫וקיבלנו‬ 12‫ה־‬ ‫את‬ ‫ואז‬ 98‫ה־‬ ‫לפני‬ ‫השורש‬ ‫את‬ ‫)שמים‬ .(12, 35, 98 ‫מהיר‬ ‫מיון‬ 2 ‫ההפרד‬ ‫בשיטת‬ ‫שעובד‬ ‫רקורסיבי‬ ‫אלגוריתם‬ ‫הוא‬ ‫מהיר‬ ‫מיון‬ ‫חלקים‬ ‫לשני‬ ‫המערך‬ ‫את‬ ‫מחלקים‬ ‫אנחנו‬ ,‫כלומר‬ ,‫ומשול‬ ,‫כלומר‬ ‫־‬ ‫מהם‬ ‫אחד‬ ‫בכל‬ "‫ו"שולטים‬ ‫רקורסיבי‬ ‫באופן‬ ‫גם‬ ‫)ולכן‬ ‫הגדול‬ ‫את‬ ‫כמו‬ 2‫ל־‬ ‫מהחלקים‬ ‫אחד‬ ‫כל‬ ‫ממינים‬ .(2‫ל־‬ ‫מחלקים‬ ‫אותו‬ ‫מקבלים‬ ‫אנחנו‬ ‫המערכים‬ ‫תתי‬ ‫את‬ ‫משלבים‬ ‫אנחנו‬ ‫וכאשר‬ ‫ההתחלתי‬ ‫המערך‬ ‫גם‬ ‫בעצם‬ ‫וכך‬ .‫ממוינים‬ ‫כבר‬ ‫שהם‬ ‫אותם‬ .‫ממוין‬ ‫כמערך‬ ‫כפלט‬ ‫מתקבל‬ ‫ששום‬ ‫אסור‬ ‫המערך‬ ‫את‬ ‫מפצלים‬ ‫אנחנו‬ ‫כשאר‬ :‫לזכור‬ ‫חשוב‬ ‫אזי‬ n ‫בגודל‬ ‫מערך‬ ‫לנו‬ ‫יש‬ ‫אם‬ ‫כלומר‬ ,‫ריק‬ ‫יהיה‬ ‫תת־מערך‬ ‫והצד‬ 1 ≤ i ≤ n − 1 ‫בגודל‬ ‫יהיה‬ ‫אחד‬ ‫צד‬ 2‫ל־‬ ‫בחלוקה‬ .n − i ‫בגודל‬ ‫יהיה‬ ‫השני‬ ‫ובמקרה‬ O (n log n) ‫הינו‬ ‫מהיר‬ ‫מיון‬ ‫של‬ ‫הממוצע‬ ‫הריצה‬ ‫זמן‬ .O n2 ‫הינו‬ ‫הריצה‬ ‫זמן‬ ‫ביורת‬ ‫הגרוע‬ ?‫עובד‬ ‫מהיר‬ ‫מיון‬ ‫אלגוריתם‬ ‫כיצד‬ 2.1 :‫למשל‬ ,‫כלשהו‬ ‫מערך‬ ‫לנו‬ ‫נתון‬ 6 3 8 1 4 2 ‫ולשם‬ ,(‫)הציר‬ ‫הפיבוט‬ ‫איבר‬ ‫הינו‬ ‫שנבחר‬ ‫מה‬ ‫כל‬ ‫ראישת‬ ‫הציר‬ ‫להיות‬ ‫הראשון‬ ‫האיבר‬ ‫שהוא‬ 6 ‫את‬ ‫ניקח‬ ‫הפשטות‬ ‫נבחר‬ ‫הפשטות‬ ‫בשביל‬ ‫אבל‬ ,‫אחר‬ ‫איבר‬ ‫גם‬ ‫להיות‬ ‫יכול‬ ‫)זה‬ ‫שיהיה‬ ‫מה‬ ‫כל‬ ‫כי‬ ‫רוצים‬ ‫אנחנו‬ :‫למיין‬ ‫ונתחיל‬ ,(‫הראשון‬ ‫את‬ ‫לו‬ ‫שווה‬ ‫או‬ ‫קטן‬ ‫יהיה‬ ‫משמאלו‬ ?‫זאת‬ ‫עושים‬ ‫כיצד‬ :‫כלומר‬ ,‫הצדדים‬ ‫משני‬ ‫המערך‬ ‫את‬ ‫לסרוק‬ ‫מתחילים‬ ‫אנחנו‬ 6 3 8 1 4 2 i OO j OO :‫הבא‬ ‫הדבר‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ‫כאת‬ ‫יהיה‬ ‫עליו‬ ‫מצביע‬ j‫ש־‬ ‫שהאיבר‬ ‫עד‬ (i ‫)לכיוון‬ j ‫את‬ ‫מקדמים‬ ,‫לפיבוט‬ ‫שווה‬ ‫או‬ ‫קטן‬ 3
  • 4. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫או‬ ‫גדול‬ ‫יהיה‬ ‫עליו‬ ‫יצביע‬i‫ש־‬ ‫שהאיבר‬ ‫עד‬ (j ‫)לכיוון‬ i ‫ואת‬ .‫לפיבוט‬ ‫שווה‬ .‫התאים‬ ‫בין‬ ‫נחליף‬ i < j ‫אם‬ ,‫כעת‬ ‫מיון‬ ‫שוב‬ ‫ונעשוה‬ ‫חלקים‬ ‫לשני‬ ‫המערך‬ ‫את‬ ‫נחלק‬ ‫־‬ ‫אחרת‬ ....‫מהחלקים‬ ‫אחד‬ ‫לכל‬ ‫מהיר‬ .(‫בודדים‬ ‫תאים‬ ‫שיש‬ ‫למצב‬ ‫שנגיע‬ ‫עד‬ ‫נמשיך‬ ‫)ככה‬ :‫שלנו‬ ‫במקרה‬ ,‫למשל‬ :‫האיברים‬ ‫בןי‬ ,‫נחליף‬ ‫ולכן‬ ‫מתקיים‬ ‫הזה‬ ‫התנאי‬ ‫ההתחלה‬ ‫על‬ 2 3 8 1 4 6 i OO j OO ‫איבר‬ ‫שנמצא‬ ‫עד‬ i ‫את‬ ‫נקדם‬ ‫וכמו־כן‬ ,1‫ב־‬ j ‫את‬ ‫ונקדם‬ :(6‫)ל־‬ ‫לפיבוט‬ ‫שווה‬ ‫או‬ ‫גדול‬ ‫שהוא‬ 2 3 8 1 4 6 i OO j OO :‫בניהם‬ ‫ונחליף‬ 2 3 4 1 8 6 i OO j OO ‫ש־‬ ‫למצב‬ ‫נגיע‬ ‫שלב‬ ‫שבאיזשהו‬ ‫לב‬ ‫נשים‬ 2 3 4 1 8 6 j OO i OO .(j ≤ i ‫)כלומר‬ :2‫ל־‬ ‫המערך‬ ‫את‬ ‫נחלק‬ ‫זה‬ ‫במקרה‬ 2 3 4 1 8 6 ....‫הלאה‬ ‫וכך‬ ‫מהמערכים‬ ‫אחד‬ ‫לכל‬ ‫מהיר‬ ‫מיון‬ ‫ונעשה‬ ‫באותו‬ ‫עדיין‬ ‫מדובר‬ ‫כלומר‬ ,‫וירטואלית‬ ‫היא‬ ,‫כמובן‬ ‫החלוקה‬ .‫אותם‬ ‫לחבר‬ ‫צריך‬ ‫מכן‬ ‫שלאחר‬ ‫מערכים‬ ‫בשני‬ ‫ולא‬ ‫מערך‬ ‫מיזוג‬ ‫מיון‬ 3 ‫הינו‬ ‫שלו‬ ‫הריצה‬ ‫שזמן‬ ‫אלגוריתם‬ ‫הינו‬ ‫מיזוג‬ ‫מיון‬ ‫גם‬ .O (n log n) ‫הכללי‬ ‫הרעיון‬ ‫אבל‬ ,‫זה‬ ‫לאלגוריתם‬ ‫גירסאות‬ ‫מספר‬ ‫ישנן‬ :‫כזה‬ ‫הינו‬ ‫אלגוריתם‬ ‫זה‬ ‫)גם‬ 2‫ל־‬ ‫המערך‬ ‫את‬ ‫מחלקים‬ ‫פעם‬ ‫כל‬ ‫אנחנו‬ ‫את‬ 4 ‫ממזגים‬ ‫ואז‬ ,‫לחלק‬ ‫ניתן‬ ‫לא‬ ‫שכבר‬ ‫עד‬ (‫ומשול‬ ‫הפרד‬ :‫למשל‬ ,‫המערכים‬ :2‫ל־‬ ‫נחלק‬ 6 3 8 1 4 2 :2‫ל־‬ ‫נחלק‬ ‫פעם‬ ‫שוב‬ ‫וכעת‬ 6 3 8 1 4 2 :‫פעם‬ ‫ושוב‬ 6 3 8 1 4 2 :‫למזג‬ ‫נתחיל‬ ‫כעת‬ :‫מימין‬ ‫הגדול‬ ‫את‬ ‫ונשים‬ 2 ‫כל‬ ‫ניקח‬ ‫בהתחלה‬ 3 6 1 8 2 4 ‫הראשונים‬ ‫הזוגות‬ ‫שתי‬ ‫את‬ ‫נמזג‬ :‫הבא‬ ‫הדבר‬ ‫את‬ ‫נעשה‬ ‫כעת‬ ‫שלבסוף‬ ‫הוא‬ ‫שחשוב‬ ‫מה‬ ‫אבל‬ ,‫למזג‬ ‫דרכים‬ ‫מיני‬ ‫כל‬ ‫)ישנן‬ .5 ‫הכנסה‬ ‫מיון‬ ‫ע"י‬ ‫זאת‬ ‫לעשות‬ ‫ניתן‬ ,(‫ממוין‬ ‫מערך‬ ‫נקבל‬ :‫נקבל‬ ‫מכן‬ ‫ולאחר‬ 1 3 6 8 2 4 .‫שונות‬ ‫גירסאות‬ ‫ישנן‬ ‫המיזוג‬ ‫לפעולת‬4 ‫יחסית‬ ‫פשוט‬ ‫מיון‬ ‫שזה‬ ‫אורמ‬ ‫רק‬ ‫עצמו‬ ‫המיון‬ ‫על‬ ‫כאן‬ ‫אסביר‬ ‫לא‬ ‫אני‬5 .‫ממוין‬ ‫למערך‬ ‫איברים‬ ‫להכנסת‬ ‫השאר‬ ‫בין‬ ‫שמתאים‬ 4
  • 5. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫המערך‬ ‫את‬ ‫ונקבל‬ ‫האחרון‬ ‫הזוג‬ ‫את‬ ‫דרך‬ ‫באותה‬ ‫נמזג‬ ‫וכעת‬ ...‫ממוין‬ 1 2 3 4 6 8 ‫לינארי‬ ‫בזמן‬ ‫מיונים‬ 4 ‫הוא‬ ‫הריצה‬ ‫שזמן‬ ‫אומר‬ ‫)שזה‬ O (n) ‫ריצה‬ ‫בזמן‬ ‫מיונים‬ ‫ישנם‬ ‫שמיון‬ ‫כדי‬ ‫הקלט‬ ‫על‬ ‫מסוימות‬ ‫הנחות‬ ‫ישנן‬ ...‫אבל‬ ,(‫לינארי‬ .‫יעבוד‬ ‫אכן‬ ‫זה‬ ‫המושג‬ ‫את‬ ‫שנגדיר‬ ‫חשוב‬ ‫לינארי‬ ‫בזמן‬ ‫למיונים‬ ‫שניגש‬ ‫לפני‬ .‫יציב‬ ‫מיון‬ :‫הבא‬ ‫אזי‬ ‫שווים‬ ‫איברים‬ ‫שני‬ ‫ויש‬ ‫שבמקרה‬ ‫מיון‬ ‫הינו‬ ‫יציב‬ ‫מיון‬ .‫נשמר‬ ‫שלהם‬ ‫הסדר‬ ‫המיון‬ ‫בסוף‬ 21 ‫מספר‬ ‫ובתא‬ 7 3 ‫מספר‬ ‫בתא‬ ‫לנו‬ ‫יש‬ ‫במערך‬ ‫אם‬ ,‫למשל‬ ‫שהיה‬ ‫זה‬ ‫אבל‬ ,‫צמודים‬ ‫יהיו‬ ‫ה־7־ים‬ ‫שני‬ ‫המיון‬ ‫בסוף‬ ‫אזי‬ ,7 .21 ‫בתא‬ ‫שהיה‬ ‫זה‬ ‫לפני‬ ‫יהיה‬ 3 ‫בתא‬ ‫מנייה‬ ‫מיון‬ 4.1 ‫קבוע‬ ‫ע"י‬ ‫הקלט‬ ‫את‬ ‫לחסום‬ ‫שניתן‬ ‫היא‬ ‫מניה‬ ‫במיון‬ ‫ההנחה‬ ‫הינו‬ ‫בקלט‬ ‫גדול‬ ‫הכי‬ ‫האיבר‬ ‫אבל‬ n ‫הינו‬ ‫הקלט‬ ‫גודל‬ ‫כלומר‬ .n ‫כפול‬ K ‫קבוע‬ ‫כלומר‬ O (n) = K · n ?‫עובד‬ ‫הזה‬ ‫המיון‬ ‫כיצד‬ ‫כמו‬ ‫מערך‬ ‫)אותו‬ A ‫המערך‬ ‫הינו‬ ‫לנו‬ ‫הנתון‬ ‫המערך‬ ‫נניח‬ B, C ‫עזר‬ ‫מערכי‬ ‫בשני‬ ‫נשתמש‬ ‫אזי‬ (‫הקודמות‬ ‫בדדוגמאות‬ .‫הממוין‬ ‫המערך‬ ‫יהיה‬ B ‫כאשר‬ ‫ולכן‬ 8 ‫ע"י‬ ‫המערך‬ ‫אבירי‬ ‫את‬ ‫לחסום‬ ‫ניתן‬ ‫כי‬ ‫לראות‬ ‫ניתן‬ ‫תדירויות‬ ‫את‬ ‫יכיל‬ C ‫מערך‬ .C ‫מערך‬ ‫של‬ ‫הגודל‬ ‫יהיה‬ ‫זה‬ .A ‫אברי‬ 6 3 8 1 3 2 ‫התא‬ ‫מספר‬ ‫את‬ ‫מציינת‬ ‫התחתונה‬ ‫)השורה‬ ‫יהיה‬ C ‫אזי‬ :(‫המקורי‬ ‫במערך‬ ‫שלו‬ ‫התידרות‬ ‫מה‬ ‫עצמו‬ ‫ובמערך‬ 1 1 2 0 0 1 0 1 1 2 3 4 5 6 7 8 ‫כלומר‬ ,‫המערך‬ ‫אברי‬ ‫את‬ ‫שנסכות‬ ‫הוא‬ ‫שנעשה‬ ‫מה‬ ‫כעת‬ ‫התא‬ ‫של‬ ‫ערכו‬ ‫את‬ ‫נשים‬ ‫השני‬ ‫ובתא‬ ‫הראשון‬ ‫מהתא‬ ‫נתחיל‬ ‫השני‬ ‫בתא‬ ‫שיש‬ ‫מה‬ ‫את‬ ‫נשים‬ ‫בשלישי‬ ,‫השני‬ ‫התא‬ + ‫הראשון‬ .‫האחרון‬ ‫התא‬ ‫עד‬ ‫הלאה‬ ‫וכך‬ ,‫השלישי‬ ‫שבתא‬ ‫הערך‬ + :‫כך‬ ‫יראה‬ C ‫כעת‬ 1 2 4 4 4 5 5 6 1 2 3 4 5 6 7 8 :B ‫הפלט‬ ‫מערך‬ ‫את‬ ‫לבנות‬ ‫נתחיל‬ ‫כעת‬ .j‫ב־‬ ‫ערכו‬ ‫את‬ ‫ונסמן‬A‫ב־‬ ‫האחרון‬ ‫התא‬ ‫אל‬ ‫נלך‬ .j ‫את‬ ‫נכניס‬ ‫ולשם‬ B [C [j]] ‫על‬ ‫נסתכל‬ ‫הדבר‬ ‫אותו‬ ‫את‬ ‫ונעשה‬ 1‫ב־‬ C [j] ‫של‬ ‫ערכו‬ ‫את‬ ‫נוריד‬ ‫כעת‬ ‫לתא‬ ‫שנגיע‬ ‫עד‬ ‫הלאה‬ ‫וכך‬ 1 ‫פחות‬ ‫המערך‬ ‫אורך‬ ‫עבור‬ .‫הראשון‬ :‫שלנו‬ ‫בדוגמא‬ j = 2 ‫בהתחלה‬ ,‫אותו‬ ‫שעידכנו‬ ‫אחרי‬ ‫המערך‬ ‫על‬ ‫)מדברים‬ C ‫למערך‬ ‫נפנה‬ ‫נראה‬ ‫השני‬ ‫בתא‬ ‫ונסתכל‬ (...‫למעלה‬ ‫ממש‬ ‫כאן‬ ‫שנמצא‬ ‫זה‬ 2 ‫מספר‬ ‫בתא‬ ‫ונשים‬ B‫ל־‬ ‫נלך‬ ‫כעת‬ ,2‫ל־‬ ‫שווה‬ ‫שם‬ ‫שהערך‬ .1‫ב־‬ ‫הערך‬ ‫את‬ C‫ב־‬ ‫ונקטין‬ (2 ‫גם‬ ‫)שהוא‬ j ‫את‬ :‫כך‬ ‫יראה‬ C ‫מערך‬ ‫כעת‬ 1 1 5 5 5 6 6 7 1 2 3 4 5 6 7 8 :‫כך‬ ‫נראה‬ ‫כבר‬ B ‫ומערך‬ • 2 • • • • ‫שערכו‬ ‫נראה‬ A‫ב־‬ ‫אחרון‬ ‫לפני‬ ‫האחד‬ ‫התא‬ ‫על‬ ‫נסתכל‬ ‫כעת‬ .j = 3 ‫ולכן‬ 3 ‫הוא‬ ‫בתא‬ 3 ‫את‬ ‫נציב‬ ‫לכן‬ ,4 ‫שהוא‬ ‫ונראה‬ C [3] ‫על‬ ‫נסתכל‬ ‫כעת‬ :B ‫במערך‬ 4 ‫מספר‬ • 2 • 3 • • ...‫הלאה‬ ‫וכך‬ ‫בהתאם‬ C ‫את‬ ‫ונעדכן‬ .‫ממוין‬ ‫המערך‬ ‫את‬ ‫ונקבל‬ ‫כפלט‬ B ‫את‬ ‫נחזיר‬ ‫לבסוף‬ (Radix Sort) ‫בסיס‬ ‫מיון‬ 4.2 ‫אותו‬ ‫לחסום‬ ‫שניתן‬ ‫הקלט‬ ‫על‬ ‫שמניח‬ ‫יציב‬ ‫מיון‬ ‫הוא‬ ‫גם‬ .O (n)‫ב־‬ 5
  • 6. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫המספרים‬ ‫שלכל‬ ‫דואגים‬ ‫שאנחנו‬ ‫הוא‬ ‫עושים‬ ‫שאנחנו‬ ‫מה‬ ‫במידת‬ ‫לפני‬ ‫אפסים‬ ‫להוסיף‬ ‫גם‬ ‫)אפשר‬ ‫אורך‬ ‫אותו‬ ‫את‬ ‫יהיה‬ (‫האחדות‬ ‫)ספרת‬ ‫האחרונה‬ ‫מהספרה‬ ‫מתחילים‬ ‫ואז‬ ,(‫הצורך‬ :‫הבא‬ ‫באופן‬ ‫לפיה‬ ‫ממינים‬ ‫הספרה‬ ‫לפי‬ ‫לערימות‬ ‫שבקלט‬ ‫המספרים‬ ‫את‬ ‫מחלקים‬ ‫הספרה‬ ‫לפי‬ ‫השני‬ ‫על‬ ‫אחד‬ ‫מספר‬ ‫כל‬ ‫מסדרים‬ ‫ואז‬ ‫האחרונה‬ :‫כלומר‬ ,‫האחרונה‬ :‫הינו‬ ‫שלנו‬ ‫והקלט‬ ‫נניח‬ 002 347 916 078 ‫עומדה‬ ‫)בכל‬ ‫האחרונה‬ ‫הספרה‬ ‫לפי‬ ‫לנו‬ ‫מחולק‬ ‫כבר‬ ‫זה‬ ‫אזי‬ ‫אותה‬ ‫עם‬ ‫מספרים‬ 2 ‫והיו‬ ‫במידה‬ ,‫אחרת‬ ‫אחרונה‬ ‫ספרה‬ ‫יש‬ ,(‫לשני‬ ‫מתחת‬ ‫אחד‬ ‫אותם‬ ‫שמים‬ ‫היינו‬ ‫אזי‬ ,‫אחדות‬ ‫ספרת‬ :‫האחדות‬ ‫ספרת‬ ‫לפי‬ ‫השני‬ ‫על‬ ‫אחד‬ ‫אותם‬ ‫נערום‬ ‫כעת‬ 002 916 347 078 ‫אחד‬ ‫ונשים‬ ‫העשרות‬ ‫ספרת‬ ‫לפי‬ ‫לקבוצות‬ ‫זה‬ ‫את‬ ‫נחלק‬ ‫כעת‬ ‫עשיתי‬ ‫לא‬ ‫לכן‬ ‫למעלה‬ ‫שיש‬ ‫מה‬ ‫את‬ ‫שוב‬ ‫)ונקבל‬ ‫שוב‬ ‫השני‬ ‫על‬ .(‫אותו‬ ‫תיארתי‬ ‫רק‬ ‫אלא‬ ‫הזה‬ ‫השלב‬ ‫את‬ ‫נפזר‬ ‫כלומר‬ ,‫האחדות‬ ‫ספרת‬ ‫לפי‬ ‫זה‬ ‫את‬ ‫נעשתה‬ ‫־‬ ‫ולבסוף‬ :‫האחדות‬ ‫ספרת‬ ‫ע"פ‬ ‫המספרים‬ ‫את‬ 002 078 374 916 ‫המספרים‬ ‫את‬ ‫נקבל‬ ‫השני‬ ‫על‬ ‫אחד‬ ‫זה‬ ‫את‬ ‫נערום‬ ‫וכאשר‬ .(‫ממוינים‬ ‫הם‬ ‫כבר‬ ‫כי‬ ‫לראות‬ ‫)ניתן‬ .‫ממוינים‬ II ‫חלק‬ ‫עצים‬ ‫בינאריים‬ ‫חיפוש‬ ‫עצי‬ 5 :‫בעצים‬ ‫סימון‬ ‫לגבי‬ ‫תזכרות‬ .‫הקודקודים‬ ‫מספר‬ = n .‫הצלעות‬ ‫מספר‬ = m ‫בסיסיים‬ ‫ומושגים‬ ‫הגדרה‬ 5.1 ‫בן‬ ‫יש‬ ‫בו‬ ‫קודקוד‬ ‫שללכל‬ ‫בינארי‬ ‫עץ‬ ‫הוא‬ ‫בינארי‬ ‫חיפוש‬ ‫עץ‬ .‫והורה‬ ‫ימני‬ ‫ובן‬ ‫שמאלי‬ ‫החסר‬ ‫את‬ ‫ממלאים‬ ‫אנחנו‬ ,‫חסרים‬ ‫הורה‬ ‫או‬ ‫אחד‬ ‫ילד‬ ‫אם‬ .NIL‫ב־‬ ‫אחד‬ ‫את‬ ‫ניקח‬ .r ‫שורשו‬ ‫אשר‬ T ‫בינארי‬ ‫עץ‬ ‫לנו‬ ‫כי‬ ‫נניח‬ ‫הינו‬ r → x ‫במסילה‬ y ‫קודקוד‬ ‫כל‬ ‫אזי‬ :x ‫בעץ‬ ‫הקודקודים‬ .x ‫של‬ ‫קדמון‬ ‫אב‬ ‫צאצא‬ ‫הוא‬ x ‫אזי‬ ,x ‫של‬ ‫אב־קדמון‬ ‫הוא‬ y ‫אם‬ :‫לזכור‬ ‫כדאי‬ .y ‫של‬ ‫אחרות‬ ‫במילים‬ ‫או‬ ,x ‫של‬ ‫הצאצים‬ ‫כל‬ ‫הינו‬ ‫־‬ x ‫של‬ ‫תת־העץ‬ .‫שורשם‬ ‫הוא‬ x‫ש־‬ ‫הקודקודים‬ ‫כל‬ ‫־‬ :‫בסיסיים‬ ‫מושגים‬ ‫שני‬ ‫נזכיר‬ .‫עלה‬ = ‫חיצוני‬ ‫קודקוד‬ .‫עלה‬ ‫שלא‬ ‫מה‬ = ‫פנימי‬ ‫קודקוד‬ 1 2 3 6
  • 7. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ .3‫ו־‬ 2 ‫של‬ ‫האבא‬ ‫הוא‬ 1 .‫אחים‬ ‫הם‬ 3‫ו־‬ 2 ‫וכמו־כן‬ ,1 ‫של‬ ‫הילדים‬ ‫הם‬ 3‫ו־‬ 2 .‫הורה‬ ‫לו‬ ‫שיאן‬ ‫בעץ‬ ‫היחיד‬ ‫הקודקוד‬ ‫הינו‬ ‫השורש‬ ‫הדרגה‬ ‫נקראת‬ x ‫קודקוד‬ ‫של‬ (!‫צאצאים‬ ‫)לא‬ ‫הילדים‬ ‫מספר‬ .x ‫של‬ ‫נקרא‬ r → x ‫המסילה‬ ‫אורך‬ ‫אזי‬ ‫העץ‬ ‫שורש‬ ‫הוא‬ r ‫אם‬ .x ‫של‬ ‫העומק‬ .‫העץ‬ ‫של‬ ‫גובהו‬ (‫מכונה‬ ‫)או‬ ‫נקרא‬ ‫העץ‬ ‫של‬ ‫גדול‬ ‫הכי‬ ‫והעומק‬ :‫למשל‬ 4 6 1 8 9 .2 ‫היא‬ 6 ‫של‬ ‫הדרגה‬ ,1 ‫היא‬ 8 ‫של‬ ‫הדרגה‬ .2 ‫הוא‬ 6 ‫של‬ ‫והעומק‬ 1 ‫הוא‬ 8 ‫של‬ ‫העומק‬ .(‫העץ‬ ‫שורש‬ ‫הוא‬ 4) 3 = 4 ‫של‬ ‫לעומק‬ = ‫העץ‬ ‫גובה‬ .Key [x] ‫ע"י‬ ‫יסומן‬ ‫קודקוד‬ ‫בכל‬ ‫שנמצא‬ ‫הערך‬ ‫בינארי‬ ‫עץ‬ 5.2 ‫שאין‬ ‫או‬ ‫כאשר‬ ,‫קודקודים‬ ‫של‬ ‫סופית‬ ‫קבוצה‬ ‫של‬ ‫מבנה‬ ‫זהו‬ :6 ‫זרות‬ ‫קבוצות‬ ‫משלוש‬ ‫מורכב‬ ‫שהוא‬ ‫או‬ ‫בכלל‬ ‫קודקודים‬ ‫לו‬ .‫עלה‬ ‫שהוא‬ ‫אחד‬ ‫קדוקוד‬ ˆ .‫השמאלי‬ ‫תת־העץ‬ ‫שנקרא‬ ‫בינארי‬ ‫עץ‬ ˆ .‫הימני‬ ‫תת־העץ‬ ‫שנקרא‬ ‫בינארי‬ ‫עץ‬ ˆ .‫הריק‬ ‫העץ‬ ‫־‬ ‫נקרא‬ ‫קודקודים‬ ‫ללא‬ ‫בינארי‬ ‫עץ‬ ‫בינארי‬ ‫חיפוש‬ ‫עץ‬ 5.3 :x ‫קודקוד‬ ‫עבור‬ :‫הבא‬ ‫הכלל‬ ‫מתקיים‬ ‫בינארי‬ ‫חיפש‬ ‫בעץ‬ Key [y] ≥ ‫אזי‬ x ‫של‬ ‫מימינו‬ ‫נמצא‬ y ‫קודקוד‬ ‫אם‬ ‫מתקיים‬ ‫אזי‬ x ‫של‬ ‫משמאלו‬ ‫נמצא‬ y ‫קודקוד‬ ‫ואם‬ ,Key [x] :‫למשל‬ ,Key [y] ≤ Key [x] .‫אחת‬ ‫מקבוצה‬ ‫ביותר‬ ‫להיות‬ ‫לקודקוד‬ ‫אסור‬6 8 3 9 .8‫ה־‬ ‫הוא‬ x ‫קודקוד‬ ‫שלנו‬ ‫במקרה‬ ‫בינאריים‬ ‫חיפוש‬ ‫בעצי‬ ‫טיולים‬ 5.4 ,Inorder ‫ביארי‬ ‫חיפוש‬ ‫בעץ‬ ‫לטייל‬ ‫דרכים‬ ‫שלושה‬ ‫ישנן‬ Postorder‫ו־‬ Preorder :‫הבא‬ ‫באופן‬ ‫פועלים‬ ‫תמיד‬ ‫אנחנו‬ ‫בעץ‬ ‫הטיולים‬ ‫שלושת‬ ‫בכל‬ ,‫העץ‬ ‫שורש‬ ‫יהיה‬ ‫זה‬ ‫כלל‬ ‫)בדרך‬ ‫כלשהו‬ ‫קודקוד‬ ‫הינו‬ ‫הקלט‬ (‫כולו‬ ‫העץ‬ ‫את‬ ‫להדפיס‬ ‫נרצה‬ ‫אנחנו‬ ‫כי‬ ,‫הימני‬ ‫העץ‬ ‫לתת‬ ‫ואז‬ ‫השמאלי‬ ‫לתת־העץ‬ ‫הולכים‬ ‫קודם‬ ‫אנחנו‬ .‫העלה‬ ‫ערך‬ ‫את‬ ‫מדפיסים‬ ‫אנחנו‬ ‫מתי‬ ‫היא‬ ‫השאלה‬ ‫להמשיך‬ ‫לאן‬ ‫יותר‬ ‫שאין‬ ‫מתי‬ ‫מסימיים‬ ‫אנחנו‬ ‫שכאשר‬ ‫כמובן‬ .(‫ושמאלי‬ ‫ימני‬ ‫תת־עץ‬ ‫לו‬ ‫אין‬ ‫ואז‬ ‫לעלה‬ ‫הגענו‬ ‫)כי‬ :‫הבא‬ ‫לעץ‬ ‫יתחייסו‬ ‫הבאה‬ ‫בטבלה‬ ‫ההדפסה‬ ‫של‬ ‫הדוגמאות‬ 6 4 8 1 5 7 9 ‫בדוגמא‬ ‫ערך‬ ‫את‬ ‫מדפיסים‬ ‫מתי‬ ‫העלה‬ ‫הטיול‬ ‫סוג‬ 1,4,5,6,7,8,9 ‫לתת‬ ‫שנכנסים‬ ‫אחרי‬ ‫השמאלי‬ ‫העץ‬ Inorder 6,4,1,5,7,8,9 ‫שמגיעים‬ ‫ברגע‬ ‫לקודקוד‬ ‫שנכנסים‬ ‫)לפני‬ (‫השמאלי‬ ‫לתת־העץ‬ Preorder 1,5,4,7,9,8,6 ‫לתת‬ ‫שנכנסים‬ ‫אחרי‬ ‫הימני‬ ‫העץ‬ Postorder ‫את‬ ‫מדפיסים‬ ‫תמיד‬ ‫אז‬ ‫לעלה‬ ‫מגיעים‬ ‫שכאשר‬ ‫לזכור‬ ‫חשוב‬ ...‫אנחנו‬ ‫טיול‬ ‫של‬ ‫סוד‬ ‫באיזה‬ ‫משנה‬ ‫לא‬ ‫ערכו‬ O (n) ‫־‬ ‫והוא‬ ‫שווה‬ ‫הינו‬ ‫בעץ‬ ‫הטיולים‬ ‫של‬ ‫הריצה‬ ‫זמן‬ 7
  • 8. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫בעץ‬ ‫ומקסימלי‬ ‫מינמלי‬ ‫איבר‬ ‫חיפוש‬ 5.5 ‫מהשורש‬ ‫מתחילים‬ ‫אנחנו‬ ‫־‬ ‫בעץ‬ ‫מינמלי‬ ‫איבר‬ ‫למצוא‬ ‫בשביל‬ ‫בתת־‬ ‫המינמלי‬ ‫את‬ ‫למצוא‬ ‫רוצים‬ ‫אם‬ ‫כשלהו‬ ‫מקודקוד‬ ‫)או‬ .(‫עץ‬ ‫הולכים‬ ‫הזמן‬ ‫כל‬ ‫אנחנו‬ ‫־‬ ‫המינימלי‬ ‫האיבר‬ ‫מציאת‬ ‫בשביל‬ .NIL ‫הוא‬ ‫הבא‬ ‫שהשמאלי‬ ‫עד‬ ‫שמאלה‬ .‫ימינה‬ ‫רק‬ ‫דבר‬ ‫אותו‬ ‫־‬ ‫המקסימלי‬ ‫האיבר‬ ‫לגבי‬ .O (log n) :‫אלו‬ ‫מפעולות‬ ‫אחת‬ ‫כל‬ ‫של‬ ‫הריצה‬ ‫זמן‬ ‫לעץ‬ ‫איבר‬ ‫של‬ ‫הוספה‬ 5.6 .‫בלבד‬ ‫עלים‬ ‫מוסיפים‬ ‫אנחנו‬ ‫־‬ ‫פשוטה‬ ‫יחסית‬ ‫היא‬ ‫ההוספה‬ ‫־‬ ‫העץ‬ ‫משורש‬ ‫מתחילים‬ ‫אנחנו‬ ‫להוסיף‬ ‫רוצים‬ ‫אנחנו‬ ‫כאשר‬ ‫אנחנו‬ ‫־‬ ‫לו‬ ‫שווה‬ ‫או‬ ‫גדול‬ ‫להוסיף‬ ‫רוצים‬ ‫שאנחנו‬ ‫הערך‬ ‫אם‬ ,‫השמאלי‬ ‫לבן‬ ‫הולכים‬ .‫הימני‬ ‫לבן‬ ‫הולכים‬ ‫אחרת‬ ‫מההתחלה‬ ‫התהליך‬ ‫את‬ ‫מתחילים‬ ‫אנחנו‬ ‫קודקוד‬ ‫שם‬ ‫יש‬ ‫אם‬ ‫אנו‬ ‫שבו‬ ‫לקדוקוד‬ ‫זה‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ‫השורש‬ ‫שבמקום‬ ‫רק‬ .‫כרגע‬ ‫נמצאים‬ .‫כעלה‬ ‫שלנו‬ ‫הערך‬ ‫את‬ ‫מוסיפים‬ ‫אנחנו‬ ‫קודקוד‬ ‫אין‬ ‫אם‬ !‫וסיימנו‬ O (log n) :‫הינו‬ ‫לעץ‬ ‫איבר‬ ‫הוספת‬ ‫של‬ ‫הריצה‬ ‫זמן‬ ‫מהעץ‬ ‫איבר‬ ‫של‬ ‫השמטה‬ 5.7 ‫או‬ ‫עלה‬ ‫להשמיט‬ ‫אוצים‬ ‫שאנחנו‬ ‫או‬ ‫אפרויות‬ ‫שתי‬ ‫ישנן‬ .‫עלה‬ ‫שאינו‬ ‫קודקוד‬ ‫להשמיט‬ ‫רוצים‬ ‫שאנחנו‬ ‫את‬ ‫משמיטים‬ ‫פשוט‬ ‫בעיה‬ ‫אין‬ ‫אזי‬ ‫־‬ ‫עלה‬ ‫היני‬ ‫הקודקוד‬ ‫אם‬ .‫הקודקוד‬ :‫אזי‬ 9 ‫את‬ ‫להשמיט‬ ‫נרצה‬ ‫הבא‬ ‫מהעץ‬ ‫עם‬ ,‫למשל‬ 8 3 9 ⇓ 8 3 ‫פשוט‬ ‫אזי‬ ‫אחד‬ ‫בן‬ ‫לו‬ ‫יש‬ ‫אם‬ ‫אזי‬ ,‫עלה‬ ‫אינו‬ ‫הקודקוד‬ ‫אם‬ .‫היחיד‬ ‫הבן‬ ‫את‬ ‫שמים‬ ‫במקומו‬ ‫אותו‬ ‫מוחקים‬ ‫צריכים‬ ‫אנחנו‬ ‫אזי‬ ‫בנים‬ ‫שני‬ ‫לו‬ ‫ויש‬ ‫עלה‬ ‫אינו‬ ‫הקודקוד‬ ‫אם‬ ‫את‬ ‫לשים‬ ‫קודקוד‬ ‫אותו‬ ‫ובמקום‬ ‫שלו‬ ‫העוקב‬ ‫את‬ ‫למצוא‬ ...‫העוקב‬ .O (log n) :‫הינו‬ ‫השמטה‬ ‫של‬ ‫הריצה‬ ‫זמן‬ ‫עוקב‬ 5.7.1 ‫הקודקוד‬ ‫הינו‬ ‫מסוים‬ ‫קודקוד‬ ‫של‬ ‫העוקב‬ ‫בינארי‬ ‫חיפוש‬ ‫בעץ‬ .‫ממנו‬ ‫הגדולים‬ ‫כל‬ ‫מבין‬ ‫קטן‬ ‫הכי‬ ‫הערך‬ ‫בעל‬ ‫האיבר‬ ‫את‬ ‫מוצאים‬ ‫אנחנו‬ ‫העוקב‬ ‫את‬ ‫למצוא‬ ‫בשביל‬ ‫ואז‬ ‫קודקוד‬ ‫אותו‬ ‫של‬ 7 ‫השמאלי‬ ‫תת־העץ‬ ‫של‬ ‫המינימלי‬ .‫לעלה‬ ‫שנגיע‬ ‫עד‬ ‫ימינה‬ ‫ללכת‬ ‫מתחילים‬ ‫קודם‬ 5.7.2 x ‫קודקוד‬ ‫של‬ ‫הקודם‬ ‫מציאת‬ ‫־‬ ‫הפוך‬ ‫רק‬ ‫בדיוק‬ ‫דבר‬ ‫אותו‬ :‫כך‬ ‫הינה‬ :‫לכן‬ ,‫הקטנים‬ ‫כל‬ ‫מבין‬ ‫גדול‬ ‫הכי‬ ‫האיבר‬ ‫את‬ ‫מחפשים‬ ‫אנחנו‬ ‫ואז‬ x ‫של‬ ‫הימני‬ ‫תת־העץ‬ ‫של‬ ‫המקסימלי‬ ‫האיבר‬ ‫את‬ ‫נחפש‬ .‫לעלה‬ ‫שנגיע‬ ‫עד‬ ‫שמאלה‬ ‫הזמן‬ ‫כל‬ ‫נלך‬ :‫הערות‬ ‫של‬ ‫הריצה‬ ‫זמן‬ ‫כמו‬ ‫הוא‬ ‫הקודם‬ ‫מציאת‬ ‫של‬ ‫הריצה‬ ‫זמן‬ .O (log n) :‫העוקב‬ ‫מציאת‬ ‫השמאלי‬ ‫הבן‬ ‫כאשר‬ ‫המינימלי‬ ‫האיבר‬ ‫את‬ ‫לחפש‬ ‫מתחילים‬ ‫אנחנו‬ ,‫כלומר‬7 .‫העץ‬ ‫שורש‬ ‫יהיה‬ ‫קודקוד‬ ‫אותו‬ ‫של‬ 8
  • 9. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫שחורים‬ ‫אדומים‬ ‫עצים‬ 6 ‫הגדרה‬ 6.1 ‫קודקוד‬ ‫לכל‬ ‫אשר‬ ‫בינארי‬ ‫חיפוש‬ ‫עץ‬ ‫הינו‬ ‫אדום־שחור‬ ‫עץ‬ .8 ‫שחור‬ ‫או‬ ‫באדום‬ ‫צבוע‬ ‫הוא‬ ‫־‬ ‫נוספת‬ ‫תוכנה‬ ‫ישנה‬ :‫תכונות‬ ‫ארבעה‬ ‫ישנן‬ ‫קודקוד‬ ‫לכל‬ ,‫כלומר‬ .(‫כמובן‬ ‫השורש‬ ‫)מלבד‬ ‫הורה‬ ˆ .‫שמאלי‬ ‫בן‬ ˆ .‫ימני‬ ‫בן‬ ˆ .(‫שחור‬ ‫או‬ ‫)אדום‬ ‫צבע‬ ˆ ‫העץ‬ ‫תכונות‬ 6.1.1 :‫תכונות‬ ‫מספר‬ ‫קיימות‬ ‫אדום־שחור‬ ‫בינארי‬ ‫לעץ‬ .‫שחור‬ ‫תמיד‬ ‫הוא‬ ‫השורש‬ ˆ ‫ייתכנו‬ ‫לא‬ ,‫)כלומר‬ ‫ברצף‬ ‫אדומים‬ ‫קודקודים‬ ‫שני‬ ‫אין‬ ˆ .(‫אדומים‬ ‫ובן‬ ‫אב‬ ‫)שכאן‬ ‫־ים‬NIL‫ב־‬ ‫העץ‬ ‫תחתית‬ ‫את‬ "‫"מרפדים‬ ‫אנחנו‬ ˆ :‫למשל‬ .( ‫כ־‬ ‫יסומנו‬ 6 2 ‫אם‬ ,‫כלומר‬ ,‫היטב‬ ‫מוגדר‬ ‫כלקודקוד‬ ‫של‬ ‫השחור‬ ‫הגובה‬ ˆ ‫השחורים‬ ‫העלים‬ ‫כמות‬ ‫אזי‬ ,‫בעץ‬ ‫מסויים‬ ‫קודקוד‬ ‫ניקח‬ ‫מסילה‬ ‫בכל‬ (‫שחור‬ ‫והוא‬ ‫במידה‬ ‫אותו‬ ‫כולל‬ ‫)לא‬ ‫שנראה‬ .‫זהה‬ ‫תהיה‬ ‫העלים‬ ‫לאחד‬ ‫למטה‬ ‫פשוטה‬ ‫שחורים‬ ‫וצמתים‬ 3 ‫־‬ ‫יסומנו‬ ‫אדומים‬ ‫צמתים‬ ‫הזה‬ ‫הסיכום‬ ‫במהלך‬8 3 ‫־‬ ‫יסומנו‬ ‫אדום־שחור‬ ‫עץ‬ ‫בניית‬ 6.2 ‫הוספת‬ ‫ע"י‬ ‫חוקי‬ ‫אדום־שחור‬ ‫עץ‬ ‫לבנות‬ ‫ניתן‬ ,‫בעיקרון‬ ,(‫בהמשך‬ ‫יוסבר‬ ‫קודקודים‬ ‫מוסיפים‬ ‫)איך‬ ‫קודקוד־קודקוד‬ ...‫שיטות‬ ‫כמה‬ ‫עוד‬ ‫ישנן‬ ‫אבל‬ :‫דומות‬ ‫מאוד‬ ‫שיטות‬ ‫שתי‬ ‫כאן‬ ‫אציג‬ (‫שניתן‬ ‫כמה‬ ‫)עד‬ 9 ‫מאוזן‬ ‫בינארי‬ ‫חיפוש‬ ‫עץ‬ ‫בונים‬ ‫־‬ ‫האחת‬ ‫שאינה‬ ‫הרמה‬ ‫מלבד‬ ‫בשחור‬ ‫העץ‬ ‫כל‬ ‫את‬ ‫צובעים‬ ‫ופשוט‬ :‫למשל‬ ,(‫העץ‬ ‫באיזון‬ "‫ש"פוגעת‬ ‫)זאת‬ ‫מואזנת‬ 5 2 6 1 3 7 8 4 :‫חוקי‬ ‫אדום־שחור‬ ‫עץ‬ ‫זה‬ . ‫שחור‬ ‫השורש‬ ˆ . ‫ברצף‬ ‫אדומים‬ ‫שני‬ ‫אין‬ ˆ ‫לכל‬ ‫זהה‬ ‫שלו‬ ‫השחור‬ ‫הגובה‬ ,‫בעץ‬ ‫שנבחר‬ ‫קודקוד‬ ‫כל‬ ˆ . ‫העלים‬ ‫לאחד‬ (‫מטה‬ ‫)כלפי‬ ‫פשוטה‬ ‫מסילה‬ ‫בכל‬ (‫)השורש‬ ‫בשחור‬ ‫אחת‬ ‫רמה‬ ‫נצבע‬ ‫שפשוט‬ ‫היא‬ ‫נוספת‬ ‫דרך‬ ...‫הלאה‬ ‫וכך‬ ‫באדום‬ ‫הבאה‬ ‫רמה‬ ‫ואז‬ ‫השחור‬ ‫הגובה‬ ‫מבחינת‬ ,‫יעבוד‬ ‫לא‬ ‫זה‬ ‫שבהם‬ ‫מקרים‬ ‫ישנם‬ ,‫כלומר‬ ,‫מאוזנת‬ ‫שאינה‬ ‫הרמה‬ ‫כאשר‬ ‫קורה‬ ‫)זה‬ ‫העלים‬ ‫של‬ ‫שמעליה‬ ‫ומה‬ ‫בשחור‬ ‫צבועה‬ ‫העץ‬ ‫איזון‬ ‫את‬ ‫שמפרה‬ ‫זאת‬ ‫של‬ ‫השחור‬ ‫הגובה‬ ‫את‬ ‫לבדוק‬ ‫כדאי‬ ‫תמיד‬ ‫לכן‬ ,(‫באדום‬ .‫הקודקודים‬ 5 2 6 1 3 7 8 4 ‫הרעיון‬ ‫כי‬ ‫בהנחה‬ , ‫ה־‬ ‫בעצים‬ ‫יוצגו‬ ‫לא‬ ‫ואליך‬ ‫מכאן‬ :‫הערה‬ .‫הובן‬ ‫ניתן‬ ‫אם‬ ‫לבדוק‬ ‫כדי‬ ‫קיים‬ ‫עץ‬ ‫לצבוע‬ ‫נדרשים‬ ‫אנחנו‬ ‫כאשר‬ ‫למקומות‬ ‫לב‬ ‫לשים‬ ‫כדאי‬ ,‫שחור‬ ‫אדום‬ ‫שיהיה‬ ‫כך‬ ‫אותו‬ ‫לצוע‬ ‫ולאות‬ ‫מאוזנים‬ ‫שאינם‬ ‫עץ‬ ‫תתי‬ ‫שיש‬ ‫)היכן‬ ‫בעץ‬ ‫מאוזנים‬ ‫הלא‬ .(‫שמה‬ ‫אפשרי‬ ‫הדבר‬ ‫אם‬ .‫עומק‬ ‫באותו‬ ‫בם‬ ‫קודקוד‬ ‫כל‬ ‫של‬ ‫העצים‬ ‫תתי‬ ‫שכל‬ ,‫כלומר‬9 9
  • 10. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫לעץ‬ ‫קודקוד‬ ‫הוספת‬ 6.3 ‫יתווסף‬ ‫תמיד‬ ‫הוא‬ ‫־‬ ‫לעץ‬ ‫קודקוד‬ ‫להוסיף‬ ‫רוצים‬ ‫אנחנו‬ ‫כאשר‬ .‫אדום‬ ‫בצבע‬ ‫כעלה‬ ,‫זמני‬ ‫באופן‬ ( ‫)ה־‬ ‫־ים‬NIL‫ה־‬ ‫שכבת‬ ‫את‬ ‫מסירים‬ ‫אנחנו‬ .‫־ים‬NIL‫ה־‬ ‫את‬ ‫מחזירים‬ ‫ואז‬ ,‫האדום‬ ‫העלה‬ ‫את‬ ‫מכניסים‬ ‫הוספנו‬ ‫כאילו‬ ‫אותו‬ ‫לראות‬ ‫ניתן‬ ,‫שלמעלה‬ ‫כאן‬ ‫בעץ‬ ,‫למשל‬ ... 4 ‫־‬ ‫את‬ ‫עכשיו‬ ‫לנו‬ :‫מקרים‬ ‫לשלושה‬ ‫ההוספה‬ ‫את‬ ‫נחלק‬ ‫שחור‬ ‫לקודקוד‬ ‫עלה‬ ‫הוספת‬ 6.3.1 :‫כי‬ !‫בעיה‬ ‫שום‬ ‫לנו‬ ‫אין‬ ‫כזה‬ ‫במקרה‬ ‫אותו‬ ‫הוספנו‬ ‫)הרי‬ ‫אדומים‬ ‫שני‬ ‫של‬ ‫רצף‬ ‫יוצר‬ ‫לא‬ ‫זה‬ ˆ .(‫שחור‬ ‫לקודקוד‬ ‫מתחת‬ ‫היותר‬ ‫)והאבות‬ ‫ההורים‬ ‫של‬ ‫האדום‬ ‫בגובה‬ ‫פוגע‬ ‫לא‬ ‫זה‬ ˆ ‫בגובה‬ ‫שחורים‬ ‫קודקודים‬ ‫סופרים‬ ‫לו‬ ‫אנחנו‬ ‫כי‬ (‫עליונים‬ .‫שחור‬ ‫אדום‬ ‫לקודקוד‬ ‫עלה‬ ‫הוספת‬ 6.3.2 ...‫אדומים‬ ‫שני‬ ‫של‬ ‫רצף‬ ‫יש‬ ‫־‬ ‫בעיה‬ ‫לנו‬ ‫יש‬ ‫הזה‬ ‫במקרה‬ ?‫עושים‬ ‫מה‬ ‫אז‬ ‫ורוטציה‬ ‫לימין‬ ‫רוטציה‬ ‫־‬ ‫מושגים‬ ‫שני‬ ‫שנכיר‬ ‫כדאי‬ ‫זה‬ ‫לפני‬ ‫לשמאל‬ ‫קודקוד‬ ‫מוסבבים‬ ‫אנחנו‬ ‫כאן‬ ‫בעיקרון‬ ‫לשמאל‬ ‫רוטציה‬ ,(‫וניתן‬ ‫)במידה‬ ‫ימינה‬ ‫אחד‬ :‫למשל‬ 3 γ 4 β α ⇒ 4 3 α γ β :‫ש‬ ‫לכך‬ ‫לב‬ ‫לשים‬ ‫כדאי‬ ‫אחד‬ ‫קודקוד‬ ‫מעלים‬ ‫רק‬ ‫שאנחנו‬ ‫זה‬ ‫בפועל‬ ‫שקורה‬ ‫מה‬ ˆ ‫מיקומי‬ ‫את‬ ‫משנים‬ ‫אנחנו‬ ‫מקרה‬ ‫בכל‬ ‫אבל‬ ,‫מורידים‬ ‫)או‬ ‫)או‬ ‫הקודקוד‬ ‫רק‬ ‫־‬ ‫נשאר‬ ‫הסדר‬ ‫אבל‬ ‫־‬ (‫הקודקודים‬ ‫שני‬ !‫השנייה‬ ‫לצומת‬ ‫זז‬ (β) ‫האמצעי‬ (‫העץ‬ ‫תת‬ ...‫זה‬ ‫את‬ ‫לזכור‬ ‫חשוב‬ .‫תתי־עצים‬ ‫או‬ ‫קודקודים‬ ‫להיות‬ ‫יכולים‬ ‫אלו‬ ‫־‬ α, β, γ :‫הפוך‬ ‫רק‬ ‫הדבר‬ ‫אותו‬ ‫בדיוק‬ ‫לימין‬ ‫רוטציה‬ 4 3 α γ β ⇒ 3 γ 4 β α .‫אדום‬ ‫לקודקוד‬ ‫עלה‬ ‫שמוסיפים‬ ‫קורה‬ ‫מה‬ ‫לראות‬ ‫ניתן‬ ‫כעת‬ ‫מקרים‬ ‫ארבעה‬ ‫ישנם‬ ‫של‬ ‫דודו‬ ‫על‬ ‫שמסתכלים‬ ‫הוא‬ ‫שעושים‬ ‫מה‬ ‫כזה‬ ‫במקרה‬ .‫הקודקוד‬ ‫אדום‬ ‫הדוד‬ ‫־‬ ‫ראשון‬ ‫מקרה‬ 7 6 8 9 ‫הוא‬ ‫דודו‬ ‫אזי‬ ‫האחרון‬ ‫כעלה‬ 9 ‫הכנסנו‬ ‫כי‬ ‫נניח‬ ‫הזה‬ ‫במקרה‬ ‫יש‬ ‫־‬ ‫כלומר‬ ‫־‬ ‫אדום‬ ‫הוא‬ ‫כי‬ ‫רואים‬ ‫אנחנו‬ (‫אביו‬ ‫של‬ ‫)אחיו‬ 6 .‫שחור‬ ‫אב‬ ‫עם‬ ‫אדומים‬ ‫בנים‬ ‫שני‬ ‫של‬ ‫מקרה‬ ‫לנו‬ ‫ואילו‬ ‫לאדום‬ ‫והופך‬ ‫צבעו‬ ‫על‬ ‫מוותר‬ ,7 ‫הסבא‬ ,‫הזה‬ ‫במקרה‬ ‫־‬ ‫לשחורים‬ ‫הופכים‬ ‫בניו‬ ‫שני‬ 7 6 8 9 .‫הבעיה‬ ‫נפתרה‬ ‫כך‬ ‫וע"י‬ ‫־‬ ‫אחרות‬ ‫במילים‬ ‫)או‬ ‫השורש‬ ‫הוא‬ 7‫ש־‬ ‫במקרה‬ ‫רק‬ :‫הערה‬ ‫ומקבלים‬ ‫שחור‬ ‫אותו‬ ‫משאירים‬ ‫אנחנו‬ (‫השורש‬ ‫של‬ ‫במקרה‬ ‫רק‬ :‫כזאת‬ ‫תהיה‬ ‫התוצאה‬ ‫כזה‬ ‫במקרה‬ ‫לכן‬ ,‫שחורים‬ ‫בניו‬ ‫את‬ 7 6 8 9 ‫)בן‬ ‫האב‬ ‫של‬ ‫מהכיוון‬ ‫בן‬ ‫והכנסנו‬ ‫שחור‬ ‫הדוד‬ ‫־‬ ‫שני‬ ‫מקרה‬ (‫שמאלי‬ ‫לאב‬ ‫שמאלי‬ ‫בן‬ ‫או‬ ‫ימני‬ ‫לאב‬ ‫ימני‬ 7 6 8 9 (B-Trees) B‫עצי־‬ 7 (‫שקיבלנו‬ ‫בית‬ ‫תרגיל‬ ‫)מתוך‬ 10
  • 11. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ ‫הגדרה‬ 7.1 :‫ע"י‬ ‫ומאופיין‬ root [T] :‫הוא‬ ‫ששורשו‬ T ‫עץ‬ ‫הוא‬ B-tree ‫עץ‬ :‫הבאים‬ ‫השדות‬ ‫את‬ ‫מכיל‬ x ‫קודקוד‬ ‫כל‬ .1 ‫בקודקוד‬ ‫נמצאות‬ ‫אשר‬ ‫המפתחות‬ ‫מספר‬ ‫־‬ n [x] 1.1 .(x) ‫שאינו‬ ‫בסדר‬ ‫נמצאים‬ ‫אשר‬ ,‫עצמם‬ ‫המפתחות‬ 1.2 :‫כלומר‬ ,‫יורד‬ key1 [x] ≤ key2 [x] ≤ key3 [x] ≤ · · · ≤ keyn[x] [x] x ‫אם‬ ‫לנו‬ ‫אומר‬ ‫אשר‬ ‫בולאני‬ ("‫"ערך‬ ‫)או‬ ‫משתנה‬ 1.3 .‫אחרת‬ False ,‫כן‬ ‫אם‬ True .‫עלה‬ ‫הוא‬ ‫פוינטרים‬ n [x] + 1 ‫מכיל‬ x ‫פנימי‬ ‫קודקוד‬ ‫כל‬ .2 ‫אין‬ ‫ולעלה‬ ‫היות‬ .‫שלו‬ ‫לילדים‬ c1 [x] , ..., cn[x]+1 [x] .‫מוגדר‬ ‫אינו‬ ‫שלהם‬ ci‫ה־‬ ‫אזי‬ ‫ילדים‬ ‫שנמצאים‬ ‫המפתחות‬ ‫בין‬ ‫מפרידים‬ keyi [x] ‫המפתחות‬ .3 :‫כלומר‬ ,‫תת־עץ‬ ‫בכל‬ ‫בתת־העץ‬ ‫נמצא‬ ‫אשר‬ ,‫כלשהו‬ ‫מפתח‬ ‫הוא‬ ki ‫אם‬ :‫אזי‬ ci [x] ‫הינו‬ ‫ששורשו‬ k1 ≤ key1 [x] ≤ k2 ≤ key2 [x] ≤ · · · ≤ kn[x]+1 ≤ keyn[x]+1 [x] .(‫העץ‬ ‫גובה‬ ‫גם‬ ‫הוא‬ h) h ‫־‬ ‫הגובה‬ ‫באותו‬ ‫העלים‬ ‫כל‬ .4 ‫המפתחות‬ ‫מספר‬ ‫על‬ ‫ותחתונים‬ ‫עליונים‬ ‫חסמים‬ ‫ישנם‬ .5 ‫לביטוי‬ ‫ניתנים‬ ‫אלו‬ ‫חסמים‬ .‫להכיל‬ ‫יכול‬ ‫שקודקוד‬ ‫העץ‬ ‫של‬ ‫המינימלית‬ ‫המעלה‬ ‫נקרא‬ ‫אשר‬ t ‫של‬ ‫במונחים‬ :‫וכאשר‬ 2 ≤ t ∈ N ‫כאשר‬ ‫מכילים‬ ‫השורש‬ ‫מלבד‬ ‫הפנימיים‬ ‫הקודקודים‬ ‫כל‬ 5.1 ‫אם‬ .‫ילדים‬ t ‫ולפחות‬ ‫מפתחות‬ t − 1 :‫לפחות‬ ‫לפחות‬ ‫להכיל‬ ‫חייב‬ ‫השורש‬ ‫אזי‬ ,‫ריק‬ ‫אינו‬ ‫העץ‬ .‫אחד‬ ‫מפתח‬ .‫מפתחות‬ 2t − 1 ‫היותר‬ ‫לכל‬ ‫מכיל‬ ‫קודקוד‬ ‫כל‬ 5.2 2t ‫היותר‬ ‫לכל‬ ‫להכיל‬ ‫יכול‬ ‫פנימי‬ ‫קודקוד‬ ,‫לכן‬ ‫אומרים‬ ‫אנו‬ ‫ילדים‬ 2t ‫בדיוק‬ ‫ישנם‬ ‫אם‬ .‫ילדים‬ ‫מלא‬ ‫הקודקוד‬ ‫כי‬ .3 ‫ומעלה‬ h ‫גובה‬ ,‫מפתחות‬ n ‫עם‬ B-tree‫ב־‬ n ≥ 1 ‫מפתח‬ ‫לכל‬ :t ≥ 2 ‫היא‬ ‫המינימלית‬ h ≤ logt n + 1 2 ‫בעץ‬ ‫חיפוש‬ 7.2 .‫בינארי‬ ‫בעץ‬ ‫לחיפש‬ ‫דומה‬ ‫מאוד‬ ‫החיפוש‬ ‫אלגוריתם‬ ‫זאת‬ ‫עושים‬ ‫אנחנו‬ ‫שמאלה‬ ‫או‬ ‫ימינה‬ ‫פעם‬ ‫כל‬ ‫לרדת‬ ‫במקום‬ .‫קודקוד‬ ‫לאותו‬ ‫שיש‬ ‫הילדים‬ ‫למספר‬ ‫בהתאם‬ .‫בינארי‬ ‫חיפוש‬ ‫בעץ‬ ‫חיפוש‬ ‫של‬ ‫בהכללה‬ ‫מדובר‬ ,‫כלומר‬ ‫)סעיפי‬ ‫החלטות‬ n (x) + 1 ‫נבצע‬ x ‫קודקוד‬ ‫עבור‬ ,‫כלומר‬ .(‫בינארי‬ ‫חיפוש‬ ‫בעץ‬ 2 ‫)במקום‬ (‫החלטה‬ k ‫ומפתח‬ ‫העץ‬ ‫לשורש‬ x ‫פוינטר‬ ‫הוא‬ ‫האלגוריתם‬ ‫של‬ ‫הקלט‬ .‫מחפשים‬ ‫שאותו‬ ‫הינו‬ ‫הפלט‬ ‫אחרת‬ ,‫בעץ‬ ‫נמצא‬ ‫אינו‬ k ‫אם‬ NIL ‫הוא‬ ‫הפלט‬ ‫אינדקס‬ ‫הוא‬ i‫ו־‬ ‫הקודקוד‬ ‫הוא‬ y ‫כאשר‬ (y, i) ‫הסדור‬ ‫הזוג‬ :‫ש‬ ‫כך‬ keyi [y] = k :‫האלגוריתם‬ ‫תיאור‬ ‫וגם‬ k > keyi (k) ‫המקיים‬ ‫ביותר‬ ‫הקטן‬ i‫ה־‬ ‫את‬ ‫נחפש‬ .i ≤ n (x) :k = keyi [x] ‫מקיים‬ ‫הנ"ל‬ i‫ה־‬ ‫האם‬ ‫נבדוק‬ .(x, i) ‫את‬ ‫נחזיר‬ ‫־‬ ‫כן‬ ‫אם‬ ˆ :‫עלה‬ ‫הוא‬ x ‫האם‬ ‫נבדוק‬ ‫אחרת‬ ˆ .NIL ‫נחזיר‬ ‫כן‬ ‫אם‬ – ‫רקורסיבי‬ ‫באופן‬ ‫לפונקציה‬ ‫שוב‬ ‫נקרא‬ ‫־‬ ‫לא‬ ‫אם‬ – .(ci [x] , k) ‫את‬ ‫לה‬ ‫נעביר‬ ‫כאשר‬ :‫הריצה‬ ‫זמן‬ .‫העץ‬ ‫כגובה‬ ‫־‬ ‫פעמים‬ h ‫היותר‬ ‫לכל‬ ‫לפונקציה‬ ‫קוראים‬ ‫אנחנו‬ ‫השוואות‬ 2t ‫קודקוד‬ ‫בכל‬ ‫נבצע‬ ‫גרוע‬ ‫הכי‬ ‫במקרה‬ ‫כאשר‬ :‫סה"כ‬ ‫יהיה‬ ‫זה‬ ‫ולכן‬ O (h · t) = O (t logt n) 11
  • 12. ‫נתונים‬ ‫מבני‬‫תשע"ה‬ '‫א‬ ‫סמסטר‬ III ‫חלק‬ ‫הופמן‬ ‫צפני‬ ‫הופמן‬ ‫צופן‬ ‫חישוב‬ 8 ?‫הופן‬ ‫צופן‬ ‫מחשבים‬ ‫כיצד‬ ‫מה‬ ‫אזי‬ ,‫במשפט‬ ‫תו‬ ‫כל‬ ‫של‬ ‫התדירויות‬ ‫טבלת‬ ‫לנו‬ ‫ונתונה‬ ‫נניח‬ ‫התדירות‬ ‫בעלי‬ ‫התווים‬ ‫שני‬ ‫את‬ ‫שלוקחים‬ ‫הוא‬ ‫עושים‬ ‫שאנחנו‬ .‫אותם‬ ‫וממזגים‬ ‫נמוכה‬ ‫הכי‬ 5 b ‫והאות‬ ‫פמעים‬ 4 ‫מופיעה‬ a ‫שהאות‬ ‫לנו‬ ‫נתון‬ ‫אם‬ ‫למשל‬ :‫כך‬ ‫יראה‬ ‫המיזוג‬ ‫אזי‬ 9 a : 4 b : 5 ‫הנראה‬ ‫ככל‬ ‫אנחנו‬ ‫)כי‬ ‫עצמו‬ ‫בפני‬ ‫תו‬ ‫כאל‬ 9‫ל־‬ ‫ומתייחסים‬ .(‫תווים‬ ‫עוד‬ ‫וישנם‬ ‫במידה‬ ‫אם‬ ‫ולמזג‬ ‫להמשיך‬ ‫נרצה‬ ‫צלע‬ ‫לכל‬ ‫מוסיפים‬ ‫אנחנו‬ ,‫העץ‬ ‫את‬ ‫שקיבלנו‬ ‫אחרי‬ ,‫לבסוף‬ ‫צלע‬ ‫ולכל‬ 0 ‫הערך‬ ‫את‬ (‫שמאלי‬ ‫לבן‬ ‫צלע‬ ,‫)כלומר‬ ‫שמאלית‬ .1 ‫הערך‬ ‫את‬ ‫ימנית‬ ‫עד‬ ‫העץ‬ ‫משורש‬ ‫מתחילים‬ ‫אנחנו‬ ‫מסוים‬ ‫תו‬ ‫של‬ ‫ערך‬ ‫לחישוב‬ (‫כמובן‬ ‫העץ‬ ‫של‬ ‫בעלים‬ ‫הם‬ ‫התווים‬ ‫)כל‬ ‫תו‬ ‫אותו‬ ‫של‬ ‫לעלה‬ ‫עוברים‬ ‫אנחנו‬ ‫שדרכה‬ ‫הספרה‬ ‫את‬ ‫מלקטים‬ ‫אנחנו‬ ‫פעם‬ ‫וכל‬ .‫הספציפי‬ ‫התו‬ ‫של‬ ‫צופן‬ ‫וזה‬ (‫לצלע‬ ‫)בהתאם‬ :‫דברים‬ ‫שני‬ ‫לזכור‬ ‫חשוב‬ ‫של‬ ‫הכולל‬ ‫המופעים‬ ‫סך‬ ‫לנו‬ ‫להיות‬ ‫אמור‬ ‫העץ‬ ‫בשורש‬ .1 .‫התווים‬ ‫כל‬ ‫כותבים‬ ‫שאנחנו‬ ‫בסוף־‬ ‫אזי‬ ‫בעברית‬ ‫בצופן‬ ‫מדובר‬ ‫אם‬ .2 ‫זה‬ ‫את‬ ‫לעשות‬ ‫צריכים‬ ‫אנחנו‬ ,‫שלה‬ ‫הקוד‬ ‫את‬ ‫אות‬ ‫לכל‬ ‫הכלב‬ :‫המשפט‬ ‫את‬ ‫להצפין‬ ‫נדרשו‬ ‫אם‬ ,‫למשל‬ .‫הפוך‬ ,‫אות‬ ‫כל‬ ‫עבור‬ ‫הצופן‬ ‫את‬ ‫שנכתוב‬ ‫לבסוף‬ ‫אזי‬ .‫הלך‬ ‫ךלה‬ :‫כך‬ ‫זה‬ ‫את‬ ‫לכתוב‬ ‫נצטרך‬ ‫נכון‬ ‫יהיה‬ ‫זה‬ ‫בשביל‬ .‫בלכה‬ IV ‫חלק‬ ‫הגרפים‬ ‫בתורת‬ ‫אלגוריתמים‬ BFS DFS ‫־‬ ‫גרף‬ ‫חקירת‬ 9 ‫אותו‬ ‫את‬ ‫להציג‬ ‫ניתן‬ ‫מכוון‬ ‫לא‬ ‫או‬ ‫מכוון‬ ‫גרף‬ ‫לנו‬ ‫יש‬ ‫כאשר‬ :‫אפשרויות‬ ‫שתי‬ ‫במצעות‬ .‫שכנים‬ ‫רשימת‬ ‫או‬ ‫שכנויות‬ ‫מטריצת‬ m × m ‫בגודל‬ ‫ריבועית‬ ‫מטריצה‬ ‫הינה‬ ‫השכוניות‬ ‫מטריצת‬ .j ‫של‬ ‫שכן‬ i‫ש־‬ ‫פירושו‬ (i, j) ‫התא‬ ‫אשר‬ :‫הבא‬ ‫המכוון‬ ‫הגרף‬ ‫את‬ ‫למשל‬ ‫ניקח‬ 1 // 2 4 OO 3oo :‫תהיה‬ ‫שלו‬ ‫השכנות‬ ‫מטריצת‬ ‫אזי‬ 1 2 3 4 1 0 1 0 0 2 0 0 1 0 3 0 0 0 1 4 1 0 0 0 ‫צלע‬ ‫מרשים‬ ‫)אנחנו‬ ‫עצמה‬ ‫של‬ ‫שכנה‬ ‫היא‬ ‫צלע‬ ‫שאם‬ ‫כמובן‬ .0 ‫ולא‬ 1 ‫יהיה‬ ‫באלכסון‬ ‫אזי‬ (‫לעצמו‬ ‫מקודקוד‬ ‫השכנות‬ ‫מטריצת‬ ‫אזי‬ ‫מכוון‬ ‫שאינו‬ ‫גרף‬ ‫היה‬ ‫הנל‬ ‫הגרך‬ ‫אם‬ :‫היתה‬ 1 2 3 4 1 0 1 0 1 2 1 0 1 0 3 0 1 0 1 4 1 0 1 0 .‫סימטרית‬ ‫תמיד‬ ‫היא‬ ‫המטריצה‬ ‫מכוון‬ ‫שאינו‬ ‫בגרף‬ ‫כשמדובר‬ ‫תא‬ ‫שבכל‬ ‫מקושרות‬ ‫רשימות‬ ‫של‬ ‫רשימה‬ ‫הינה‬ ‫שכנים‬ ‫רשימה‬ .‫שלו‬ ‫השכנים‬ ‫רשימה‬ ‫את‬ ‫ואחריו‬ ‫קודקוד‬ ‫יש‬ :(‫למעלה‬ ‫שנתון‬ ‫גרף‬ ‫)אותו‬ ‫מכוון‬ ‫גרף‬ ‫של‬ ‫דוגמר‬ ‫נראה‬ ‫אנחנו‬ 1 // 2 2 // 3 3 // 4 4 // 1 12
  • 13. ‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬ ‫לכל‬ ‫שיש‬ ‫בגרפים‬ ‫או‬ ,‫מכוון‬ ‫הלא‬ ‫בגרף‬ ‫מדובר‬ ‫היה‬ ‫אם‬ ,‫כעת‬ ‫הקודקודים‬ ‫את‬ ‫לשים‬ ‫ניתן‬ ‫אזי‬ ,‫אחד‬ ‫משכן‬ ‫יותר‬ ‫קודקוד‬ ‫סדר‬ ‫על‬ ‫ישפיע‬ ‫כמובן‬ ‫זה‬ ‫אבל‬ ,‫שרירותי‬ ‫באופן‬ ‫ברשימה‬ .DFS‫ו־‬ BFS ‫באלגוריתמים‬ ‫לקודקודים‬ ‫הכניסה‬ :‫מכוון‬ ‫שאינו‬ ‫בגרף‬ ‫מדובר‬ ‫היה‬ ‫אם‬ ,‫שלנו‬ ‫במקרה‬ ,‫למשל‬ 1 // 2 // 4 2 // 3 // 1 3 // 4 // 2 4 // 1 // 3 BFS ‫הגרף‬ ‫של‬ ‫רוחבית‬ ‫חקירה‬ 9.1 .‫לרוחב‬ ‫הגרף‬ ‫את‬ ‫נחקור‬ ‫אנחנו‬ ‫הזה‬ ‫באלגוריתם‬ .(s ∈ V ) .s ‫מקור‬ ‫וקדוקוד‬ G ‫גרף‬ ‫הינו‬ ‫הקלט‬ ‫תיאור‬ ‫במהלך‬ ‫יוסבר‬ ‫בו‬ ‫השימוש‬ ‫שאופן‬ ‫תור‬ ‫ישנו‬ ,‫כמו־כן‬ .‫האלגוריתם‬ ‫לכל‬ ‫כאשר‬ 10 ‫מינמליים‬ ‫מרחקים‬ ‫עץ‬ ‫הינו‬ ‫האלגוריתם‬ ‫פלט‬ :‫הבאים‬ ‫המאפיינים‬ ‫את‬ ‫ישנם‬ ‫קודקוד‬ ‫)המרחק‬ s ‫מקודקוד‬ u ‫קודקוד‬ ‫כל‬ ‫של‬ ‫של‬ ‫המרחק‬ ‫־‬ d [u] .(‫המינמלי‬ ‫)מלבד‬ .‫שלו‬ ‫האבא‬ ,u ‫קודקוד‬ ‫את‬ ‫שגילה‬ ‫הקדוקוד‬ ‫־‬ π [u] .(NIL ‫הוא‬ ‫שלו‬ π‫שה־‬ s ‫האלגוריתם‬ ‫הצבעים‬ ‫משלושת‬ ‫באחד‬ ‫צבוע‬ ‫להיות‬ ‫יכול‬ ‫קודקוד‬ ‫לכל‬ .‫ושחור‬ ‫אפור‬ ,(‫שלו‬ ‫המחדל‬ ‫ברירת‬ ‫)צבע‬ ‫לבן‬ :‫הבאים‬ ‫באפור‬ ‫נצבע‬ ‫לתור‬ ‫שנכנס‬ ‫קודקוד‬ ‫כל‬ :‫הבא‬ ‫מהכלל‬ ‫נתחיל‬ .‫בשחור‬ ‫נצבע‬ ‫הוא‬ ‫ממנו‬ ‫יוצא‬ ‫הוא‬ ‫וכאשר‬ ‫)והתור‬ ‫שחורים‬ ‫יהיו‬ ‫הקודקוד‬ ‫כל‬ ‫כאשר‬ ‫יסתיים‬ ‫האלגוריתם‬ .(‫ריק‬ ‫יהיה‬ ‫אותו‬ ‫וצובעים‬ ‫לתור‬ s ‫קודקוד‬ ‫את‬ ‫כל‬ ‫קודם‬ ‫מכניסים‬ ‫אנחנו‬ ‫בשחור‬ ‫אותו‬ ‫צובעים‬ ,‫מהתור‬ ‫אותו‬ ‫מוציאים‬ ‫אנחנו‬ ,‫באפור‬ ‫אותם‬ ‫)ומכניסים‬ ‫באפור‬ ‫צובעים‬ ‫אנחנו‬ ‫שלו‬ ‫השכנים‬ ‫כל‬ ‫ואת‬ .1‫ב־‬ ‫שלהם‬ d‫ה־‬ ‫ואת‬ s‫ב־‬ ‫שלהם‬ π‫ה־‬ ‫את‬ ‫ומסמנים‬ (‫לתור‬ ‫בקודקודים‬ ‫רק‬ ‫נוגעים‬ ‫אנחנו‬ :‫הבא‬ ‫הכלל‬ ‫על‬ ‫שומרים‬ ‫אנחנו‬ ‫בו‬ ‫נוגעים‬ ‫לא‬ ‫אנחנו‬ ‫אפור‬ ‫או‬ ‫שחור‬ ‫הוא‬ ‫קודקוד‬ ‫אם‬ .‫לבנים‬ .(‫לתור‬ ‫אותו‬ ‫מכניסים‬ ‫לא‬ ,‫)כלומר‬ ‫בתור‬ ‫שנמצא‬ ‫הראשון‬ ‫הקודקוד‬ ‫את‬ ‫מוציאים‬ ‫אנחנו‬ ,‫כעת‬ .‫בשחור‬ ‫ואותו‬ ‫באפור‬ ‫הלבנים‬ ‫שכניו‬ ‫כל‬ ‫את‬ ‫מסמנים‬ ‫כל‬ ‫את‬ ‫מסמנים‬ ‫בתור‬ ‫השני‬ ‫הקודקוד‬ ‫את‬ ‫מוציאים‬ ‫אנחנו‬ .‫בשחור‬ ‫ואותו‬ ‫באפור‬ ‫הלבנים‬ ‫שכניו‬ .‫לבנים‬ ‫קודקודים‬ ‫יותר‬ ‫שאין‬ ‫שנראה‬ ‫עד‬ ,‫הלאה‬ ‫וכך‬ ‫מרחקים‬ ‫עץ‬ ‫וקיבלנו‬ ‫מהתור‬ ‫הקודקודים‬ ‫את‬ ‫נוציא‬ .‫מינמליים‬ ‫הקצר‬ ‫הינו‬ ‫הקודקודים‬ ‫שאר‬ ‫מכל‬ s ‫הקודקוד‬ ‫של‬ ‫שהמרחק‬ ‫עץ‬ ,‫כלומר‬10 .‫ביותר‬ DFS ‫הגרף‬ ‫של‬ ‫עומקית‬ ‫חקירה‬ 9.2 .‫השכנים‬ ‫רשימת‬ ‫עם‬ G ‫גרף‬ ‫הוא‬ DFS‫ב־‬ ‫הקלט‬ ‫זמן‬ ‫דישנו‬ ‫קודוק‬ ‫לכל‬ ‫כאשר‬ ‫מעגלים‬ ‫חסר‬ ‫גרף‬ ‫הינו‬ ‫הפלט‬ .‫יציאה‬ ‫וזמן‬ ‫אליו‬ ‫כניסה‬ ‫בגרף‬ ‫יכללו‬ ‫כולם‬ ‫אחד‬ ‫קשירות‬ ‫מרכיב‬ ‫יותר‬ ‫ישנו‬ ‫אם‬ ‫גם‬ ‫אל‬ ‫נגיע‬ ‫לא‬ ,BFS‫)ב־‬ ‫קודקוד‬ ‫קודקוד‬ ‫עוברים‬ ‫ואנחנו‬ ‫היות‬ .(s ‫של‬ ‫קשירות‬ ‫רכיב‬ ‫באותו‬ ‫שאינם‬ ‫קודקודים‬ (‫ממנו‬ ‫יציאה‬ ‫או‬ ‫קודקוד‬ ‫אל‬ ‫)כניסה‬ ‫תזוזה‬ ‫שכל‬ ‫שעון‬ ‫ישנו‬ .1‫ב־‬ ‫שלו‬ ‫המונה‬ ‫את‬ ‫מגדילה‬ ?‫פועל‬ DFS ‫אלגוריתם‬ ‫איך‬ :‫השכנים‬ ‫רשימת‬ ‫עפ‬ ‫הולכים‬ ‫לקודקוד‬ ‫וממשיכים‬ ‫ברשימה‬ ‫הראשון‬ ‫מהקודקוד‬ ‫מתחילים‬ ‫לקודקוד‬ ‫הולכים‬ ‫ואז‬ ,‫השכנים‬ ‫ברשימת‬ ‫אצלו‬ ‫נמצא‬ ‫הראשון‬ ‫ניתן‬ ‫שלא‬ ‫למצב‬ ‫שמגיעים‬ ‫עד‬ ‫הלאה‬ ‫וכך‬ ‫אצלו‬ ‫הראשון‬ ‫היינו‬ ‫שכבר‬ ‫בקודקוד‬ ‫נוגעים‬ ‫לא‬ ‫־‬ BFS‫ב־‬ ‫)כמו‬ ‫להמשיך‬ ‫הלאה‬ ‫שממשיכים‬ ‫או‬ :‫אז‬ ‫כזה‬ ‫לקודקוד‬ ‫מגיעים‬ ‫אם‬ .‫בו‬ ‫ממשיכים‬ ‫אזי‬ ‫ואין‬ ‫ובמידה‬ ,‫קודקוד‬ ‫אותו‬ ‫של‬ ‫הבא‬ ‫לשכן‬ .([‫השכנות‬ ‫]רשימת‬ ‫הקודקודים‬ ‫ברשימת‬ ‫הבא‬ ‫לקודקוד‬ ‫אליו‬ ‫הכניסה‬ ‫זמן‬ ‫את‬ ‫מעדכנים‬ ‫אליו‬ ‫שנכסים‬ ‫קודקוד‬ ‫כל‬ .‫ממנו‬ ‫היציאה‬ ‫זמן‬ ‫את‬ ‫מעדכנים‬ ‫ממנו‬ ‫וכשיוצאים‬ .‫מעגלים‬ ‫חסר‬ ‫קשיר‬ ‫גרף‬ ‫נקבל‬ ‫לבסוף‬ :‫הבא‬ ‫הגרף‬ ‫את‬ ‫למשל‬ ‫ניקח‬ 1 // 2 4 // 3 ‫יהיה‬ 2 ‫ושל‬ 1 ‫יהיה‬ 1 ‫של‬ ‫הכניסה‬ ‫וזמן‬ 2‫ל־‬ 1‫מ־‬ ‫נלך‬ ‫אזי‬ ‫נתחיל‬ ‫ואז‬ ‫־‬ ‫להמשיך‬ ‫לאן‬ ‫שאין‬ ‫נראה‬ ‫אז‬ .3 ‫לגבי‬ ‫וכנל‬ 2 1 ‫ושל‬ 5 ‫יהיה‬ 2 ‫של‬ 4 ‫יהיה‬ 3 ‫של‬ ‫יציאה‬ ‫הזמן‬ ‫־‬ ‫חזרה‬ ‫לחזור‬ .6 ‫יהיה‬ ‫ונגיע‬ ‫־‬ (1,2,3 ‫את‬ ‫סיימנו‬ ‫)כי‬ ‫־‬ ‫בקודקודים‬ ‫הלאה‬ ‫נמשיך‬ ‫ואז‬ ‫יהיה‬ ‫שלו‬ ‫היציאה‬ ‫וזמן‬ 7 ‫יהיה‬ ‫שלו‬ ‫הכניסה‬ ‫שזמן‬ 4 ‫לקודקוד‬ .8 :‫הינו‬ ‫שנקבל‬ ‫והגרף‬ 1 // 2 4 3 ‫טופולוגי‬ ‫מיון‬ 9.3 ‫ללא‬ ‫מכוון‬ ‫גרף‬ ‫־‬ ‫בלבד‬ DAG‫ב־‬ ‫לעשות‬ ‫ניתן‬ ‫טופולוגי‬ ‫מיון‬ !‫מעגלים‬ 13
  • 14. ‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬ ‫לינארי‬ ‫סידור‬ ‫בעצם‬ ‫הוא‬ ‫טופולוגי‬ ‫מיון‬ ‫בכיוון‬ ‫האיברים‬ ‫את‬ ‫למיין‬ ‫שנוכל‬ ‫היא‬ ‫טופולגי‬ ‫במיון‬ ‫המטרה‬ ‫ניתן‬ ‫יהיה‬ ‫ואז‬ ‫אחד‬ ‫בכיוון‬ ‫יהיו‬ ‫הצלעות‬ ‫שכל‬ ‫כלומר‬ , ‫אחד‬ .(‫)למשל‬ ‫בשורה‬ ‫הקודקודים‬ ‫כל‬ ‫את‬ ‫להציג‬ ?‫זאת‬ ‫עושים‬ ‫איך‬ ‫זמן‬ ‫לפי‬ ‫הקודקודים‬ ‫את‬ ‫מסדרים‬ ‫ואז‬ ‫לגרף‬ DFS ‫עושים‬ :‫שלנו‬ ‫בדוגמא‬ ‫למשל‬ ,‫היציאה‬ 4 '' 1 // 2 // 3 ...‫הכיוון‬ ‫באותו‬ ‫הם‬ ‫החצים‬ ‫כל‬ ‫כי‬ ‫לב‬ ‫ונשים‬ ‫מינמליים‬ ‫פורשים‬ ‫עצים‬ 10 (‫)הגדרה‬ ‫מינימלי‬ ‫פורש‬ ‫עץ‬ 10.1 w : E → R+ ‫משקל‬ ‫פונקצית‬ ‫עם‬ G ‫גרף‬ ‫לנו‬ ‫ויש‬ ‫נניח‬ ‫הצלעות‬ ‫על‬ (‫שלילי‬ ‫משקל‬ ‫גם‬ ‫להניח‬ ‫ניתן‬ ‫יהיה‬ ‫)בהמשך‬ :‫למשל‬ ,‫משקל‬ ‫ישנו‬ ‫צלע‬ ‫לכל‬ ‫כלומר‬ .‫שלו‬ 1 3 2 4 3 ‫פירושו‬ a →→ b) .7 ‫הינו‬ 1 →→ 3 ‫של‬ ‫המשקל‬ ‫אזי‬ .(b‫ל־‬ a‫מ־‬ ‫המסילה‬ ‫תת־‬ ‫את‬ ‫נחפש‬ ‫הפורשים‬ ‫העצים‬ ‫מכל‬ ,‫נתון‬ ‫גרף‬ ‫עבור‬ ,‫כעת‬ .‫מינימלי‬ ‫הוא‬ ‫צלעותיו‬ ‫משקל‬ ‫שסכום‬ ‫העץ‬ :‫הבא‬ ‫הגרף‬ ‫את‬ ‫ניקל‬ ‫למשל‬ 1 1 2 6 4 3 34 2 :‫יהיה‬ ‫המינימלי‬ ‫הפורש‬ ‫העץ‬ ‫אזי‬ 1 1 2 4 3 3 2 G ‫מגרף‬ ‫כזה‬ ‫עץ‬ ‫לבנית‬ ‫הפשוט‬ ‫האלגוריתם‬ 10.2 ‫הקבוצה‬ ‫היא‬ ‫בהתחלה‬ ‫)אשר‬ A ‫צלעות‬ ‫קבוצת‬ ‫לוקחים‬ .(‫הריקה‬ ‫את‬ ‫לה‬ ‫מוסיפים‬ ‫אנחנו‬ ‫פורש‬ ‫עץ‬ ‫מכילה‬ ‫אינה‬ A ‫עוד‬ ‫וכל‬ .‫בטוחה‬ ‫צלע‬ ‫שהיא‬ ‫בתנאי‬ (u, v) ‫צלע‬ :‫חתך‬ ‫קודם‬ ‫נגדיר‬ ‫בטוחה‬ ‫צלע‬ ‫מהי‬ ‫להגדיר‬ ‫בשביל‬ ‫לשתי‬ ‫הגרף‬ ‫של‬ ‫חלוקה‬ ‫הוא‬ G ‫מכוון‬ ‫לא‬ ‫גרף‬ ‫של‬ ‫חתך‬ .S, V S :‫קבוצות‬ ‫נמצא‬ ‫מהקצוות‬ ‫אחד‬ ‫כל‬ ‫אם‬ ‫החתך‬ ‫את‬ ‫חוצה‬ (u, v) ‫צלע‬ .‫אחרת‬ ‫בקבוצה‬ A‫ב־‬ ‫צלע‬ ‫אין‬ ‫אם‬ A ‫את‬ ‫מכבד‬ ‫החתך‬ ‫כי‬ ‫אורמים‬ ‫אנחנו‬ .‫אותו‬ ‫שחוצה‬ ‫ויש‬ ‫החתך‬ ‫את‬ ‫חוצה‬ ‫היא‬ ‫אם‬ ‫־‬ ‫קלה‬ ‫צלע‬ ‫־‬ ‫נקראת‬ ‫צלע‬ ‫כולן‬ ‫אבל‬ ,‫שחוצות‬ ‫כמה‬ ‫להיות‬ ‫)יכולות‬ ‫מינימלי‬ ‫משקל‬ ‫לה‬ ‫להיות‬ ‫צריך‬ ‫]המשקל‬ ‫מינימלי‬ ‫משקל‬ ‫בעל‬ ‫להיות‬ ‫צריכות‬ .([‫זהה‬ .‫בטוחה‬ ‫צלע‬ ‫היא‬ ‫זאת‬ ‫צלע‬ ‫כי‬ ‫יודעים‬ ‫אנחנו‬ :‫למשל‬ 1 7 9 2 3 3 2 4 ‫של‬ ‫החלוקה‬ ‫את‬ ‫מכבד‬ (‫המקווקו‬ ‫)הקו‬ ‫החתך‬ ‫כי‬ ‫לראות‬ ‫ניתן‬ ‫הבטוחה‬ ‫הצלע‬ ‫את‬ ‫להוסיף‬ ‫נוכל‬ ‫כעת‬ ‫ועילו‬ (3, 4)‫ו־‬ (1, 2) .(‫פורש‬ ‫עץ‬ ‫)ויוצרת‬ ‫קלה‬ ‫צלע‬ ‫היא‬ ‫כי‬ (2, 4) ‫אותה‬ ‫להוריד‬ ‫ניתן‬ ‫היה‬ ‫צלע‬ ‫הייתה‬ ‫כבר‬ (1, 3) ‫אם‬ ‫־‬ ‫כן‬ ‫כמו‬ .‫הפורש‬ ‫לעץ‬ (2, 4) ‫את‬ ‫במקומה‬ ‫ולקחת‬ ‫פורש‬ ‫עץ‬ ‫למציאת‬ ‫קרוסקל‬ ‫אלגוריתם‬ 10.3 ‫מינימלי‬ .w ‫משקל‬ ‫ופונקצית‬ G ‫גרף‬ ‫הינו‬ ‫האלגוריתם‬ ‫קלט‬ A ‫מקבוצה‬ ‫מתחילים‬ ‫גם‬ ‫אנחנו‬ ‫קרוסקל‬ ‫של‬ ‫באלגוריתם‬ .‫ריקה‬ ‫שהיא‬ 14
  • 15. ‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬ ‫קשירות‬ ‫לרכיבי‬ ‫בעץ‬ ‫הקודקודים‬ ‫כל‬ ‫את‬ ‫הופכים‬ ‫אנחנו‬ ‫הצלעות‬ ‫כל‬ ‫את‬ ‫משמיטים‬ ‫וירטואלי‬ ‫באופן‬ ‫)אנחנו‬ ‫נפרדים‬ .(‫הקודקודים‬ ‫רק‬ ‫נשארים‬ ‫כך‬ ‫עפ‬ ‫עולה‬ ‫לא‬ ‫בסדר‬ (‫הגרף‬ ‫)צלעות‬ E ‫את‬ ‫ממינים‬ ‫אנחנו‬ .‫שלהן‬ ‫המשקל‬ :(‫לגדולה‬ ‫)מהקטנה‬ ‫הצלעות‬ ‫על‬ ‫לעבור‬ ‫מתחילים‬ ‫אנחנו‬ ‫כעת‬ ‫רכיבי‬ ‫בשני‬ ‫נמצאים‬ u, v ‫־‬ (u, v) ∈ E ‫צלע‬ ‫עבור‬ ‫אם‬ .A‫ל־‬ (u, v) ‫הצלע‬ ‫את‬ ‫מכניסים‬ ‫־‬ ‫שונים‬ ‫קשירות‬ ‫פורש‬ ‫עץ‬ ‫כפלט‬ ‫וקיבלנו‬ ‫הצלעות‬ ‫על‬ ‫עברנו‬ ‫כאשר‬ ‫סיימנו‬ .‫מינימלי‬ .O (|E| log |E|) :‫האלגוריתם‬ ‫של‬ ‫הריצה‬ ‫זמן‬ ‫מינימלי‬ ‫פורש‬ ‫עץ‬ ‫למציאת‬ ‫פריים‬ ‫אלגוריתם‬ 10.4 ‫ופונקציית‬ ‫גרף‬ ‫רק‬ ‫לא‬ ‫כקלט‬ ‫נתונים‬ ‫אנחנו‬ ‫זה‬ ‫באלגוריתם‬ .r ‫התחלתי‬ ‫קודקוד‬ ‫גם‬ ‫אלא‬ ,‫משקל‬ .Q ‫לתור־עדיפויות‬ G ‫צלעות‬ ‫כל‬ ‫את‬ ‫מכניסים‬ ‫אנחנו‬ .Key ‫פונקציה‬ G‫ב־‬ ‫קודקוד‬ ‫לכל‬ ‫נגדיר‬ ‫כעת‬ ‫מלבד‬ ∞‫ל־‬ ‫בתור‬ ‫הקודקודים‬ ‫כל‬ ‫של‬ Key‫ה־‬ ‫את‬ ‫נתאחל‬ .Key [r] = 0 :r ‫של‬ ‫זה‬ .π [r] = NIL :‫כמו־כן‬ :‫ריק‬ ‫יהיה‬ Q‫ש־‬ ‫עד‬ ‫הבאה‬ ‫הלולאה‬ ‫את‬ ‫מקיימים‬ ‫אנחנו‬ ‫כעת‬ ‫הערך‬ ‫עם‬ ‫הקודקוד‬ ‫את‬ Q‫מ־‬ ‫מוציאים‬ ‫פעם‬ ‫כל‬ ‫אנחנו‬ :‫האם‬ v ‫שלו‬ ‫שכן‬ ‫כל‬ ‫עבור‬ ‫ובודקים‬ ‫המינימלי‬ :‫אזי‬ w (u, v) Key [v] ‫וגם‬ v ∈ Q .Key [v] = w (u, v) ‫וגם‬ π [v] = u :‫מעדכנים‬ :‫אחרות‬ ‫במילים‬ ‫כל‬ ‫לגבי‬ ‫בודקים‬ ‫אנחנו‬ ‫לקודקוד‬ ‫מגיעים‬ ‫שאנחנו‬ ‫פעם‬ ‫כל‬ ‫קטנה‬ ‫בניהם‬ ‫הצלע‬ ‫משקל‬ ‫וגם‬ Q‫ב־‬ ‫הוא‬ ‫אם‬ ‫משכניו‬ ‫אחד‬ .‫השכן‬ ‫של‬ Key‫מה־‬ (π [v] = u) u ‫גילה‬ v ‫שאת‬ ‫מעדכנים‬ ‫אנחנו‬ ‫־‬ ‫כן‬ ‫אם‬ .(w (u, v)‫)ב־‬ ‫בהתאם‬ ‫השכן‬ ‫של‬ Key‫ה־‬ ‫את‬ ‫ומעדכנים‬ O (|E| log |V |) :‫הינו‬ ‫זה‬ ‫אלגוריתם‬ ‫של‬ ‫הריצה‬ ‫זמן‬ ‫ומרחקים‬ ‫ביותר‬ ‫קצרות‬ ‫מסילות‬ 11 ‫בעיקר‬ ‫יהיה‬ ‫והדגש‬ ‫קצרים‬ ‫הסברים‬ ‫יוצגו‬ ,‫הבא‬ ‫בחלק‬ ‫תמיד‬ ‫ולא‬ ‫שלהם‬ ‫והפלט‬ ‫)הקלט‬ ‫השונים‬ ‫האלגוריתמים‬ ‫על‬ .(‫שלהם‬ ‫התיאור‬ (‫הקודקודים‬ ‫לכל‬ ‫מסוים‬ ‫)מקודקוד‬ ‫הקדמה‬ 11.1 ‫גם‬ ‫להיות‬ ‫שיכולה‬ ‫משקל‬ ‫פונקצית‬ ‫עם‬ ‫מכוון‬ ‫גרף‬ ‫לנו‬ ‫נתון‬ .‫חיוביות‬ ‫לא‬ ‫ביותר‬ ‫הקצרה‬ ‫המסילה‬ ‫את‬ ‫מוצאים‬ ‫אנחנו‬ ‫איך‬ ‫השאלה‬ ‫לכל‬ ‫קודקוד‬ ‫מכל‬ ‫או‬ ‫הקודקודים‬ ‫לכל‬ ‫מסוים‬ ‫מקודקוד‬ .‫קודקוד‬ :‫בגרף‬ ‫מעגלים‬ ‫לגבי‬ ‫הערה‬ ‫במקרים‬ ‫אז‬ ,‫ישנן‬ ‫אם‬ ‫)או‬ ‫מעגלים‬ ‫אין‬ ‫כין‬ ‫להניח‬ ‫ניתן‬ :‫כי‬ ,(‫קצרות‬ ‫מסילות‬ ‫לחפש‬ ‫להמשיך‬ ‫טעם‬ ‫אין‬ ‫מסוימים‬ ‫טעם‬ ‫אין‬ ‫אזי‬ ‫־‬ (0 ‫הינו‬ ‫שסכומו‬ ‫)או‬ ‫חיובי‬ ‫מעגל‬ ‫ישנו‬ ‫אם‬ .‫א‬ .‫אליו‬ ‫להיכנס‬ .‫נצא‬ ‫ולא‬ ‫אליו‬ ‫ניכנס‬ ‫נאחנו‬ ‫אזי‬ ‫־‬ ‫שלילי‬ ‫מעגל‬ ‫ישנו‬ ‫אם‬ .‫ב‬ ‫או‬ ‫האורך‬ ‫את‬ ‫נשים‬ ‫אנחנו‬ ‫הזה‬ ‫בגרף‬ ‫קודקוד‬ ‫לכל‬ :‫למשל‬ ,‫אליו‬ ‫המשקל‬ 0 2 2 −1 1 ‫יכולים‬ ,‫שליליים‬ ‫להיות‬ ‫יכולים‬ ‫בקודקודים‬ ‫שהערכים‬ ‫כמובן‬ .−∞ ‫או‬ ∞ ‫להיות‬ ‫את‬ ‫נעשה‬ ‫קודקוד‬ ‫מאותו‬ ‫הנל‬ ‫המסילות‬ ‫את‬ ‫למצוא‬ ‫בשביל‬ :‫הבא‬ ‫הדבר‬ ‫הקודקודים‬ ‫שאר‬ ‫ואת‬ 0 ‫להיות‬ ‫נאתחל‬ ‫המקור‬ ‫קודקוד‬ ‫את‬ .∞‫ל־‬ 15
  • 16. ‫נתונים‬ ‫מבני‬‫תשעה‬ '‫א‬ ‫סמסטר‬ Relax ‫־‬ ‫ההרפיה‬ ‫פעולת‬ 11.2 ‫להגיע‬ ‫יותר‬ ‫קלה‬ ‫דרך‬ ‫ישנה‬ ‫אם‬ ‫לנו‬ ‫אומרת‬ ‫ההרפיה‬ ‫פעולת‬ .‫קודקוד‬ ‫אל‬ :‫הבא‬ ‫המצב‬ ‫לנו‬ ‫ונתון‬ ‫נניח‬ ,‫למשל‬ 3 2 9 ‫המשקל‬ ‫אזי‬ ‫הנתונה‬ ‫הצלע‬ ‫דרך‬ ‫נלך‬ ‫שאם‬ ‫לראות‬ ‫ניתן‬ ‫אזי‬ ‫תהיה‬ ‫הימני‬ ‫לקודקוד‬ (‫המקור‬ ‫)קודקוד‬ s‫מ־‬ ‫המסילה‬ ‫עבור‬ :‫ונקבל‬ ‫ההרפיה‬ ‫פעולת‬ ‫את‬ ‫עושים‬ ‫אנחנו‬ ‫אזי‬ ‫קצרה‬ 3 2 5 ‫קודקוד‬ ‫להיות‬ 5 ‫בו‬ ‫שיש‬ ‫הקודקוד‬ ‫את‬ ‫שגילה‬ ‫זה‬ ‫את‬ ‫ונעדכן‬ .3 :‫כזה‬ ‫הוא‬ (‫)להרפיה‬ ‫לעידכון‬ ‫התנאי‬ ‫כללי‬ ‫באופן‬ :u, v ‫קודקודים‬ ‫שני‬ ‫עבור‬ :‫אזי‬ d [v] d [u] + w (u, v) ‫אם‬ d [v] = du + w (u, v) π [v] = u ‫וגם‬ (‫בלבד‬ ‫)תיאור‬ ‫פורד‬ ‫בלמן‬ ‫אלגוריתם‬ 11.3 ‫משקל‬ ‫פונקצית‬ ,‫גרף‬ :‫הינו‬ ‫פורד‬ ‫בלמן‬ ‫אגלוריתם‬ ‫של‬ ‫הקלט‬ .‫מקור‬ ‫וקדוקוד‬ ‫ושקר‬ ‫בגרף‬ ‫שלילי‬ ‫מעגל‬ ‫אין‬ ‫אם‬ ‫אמת‬ ‫מחזיר‬ ‫האלגוריתם‬ .‫שלילי‬ ‫מעגל‬ ‫ישנו‬ ‫אם‬ ‫לכל‬ ‫ביותר‬ ‫הקלה‬ ‫המסילה‬ ‫את‬ ‫למצוא‬ ‫לנו‬ ‫עוזר‬ ‫האלגוריתם‬ .‫המקור‬ ‫מקודקוד‬ ‫קודקוד‬ .O (|V | |E|) ‫הינו‬ ‫האלגוריתם‬ ‫ריצת‬ ‫זמן‬ ‫מעגלים‬ ‫חסר‬ ‫מכוון‬ ‫בגרף‬ ‫אלגוריתם‬ 11.4 (DAG) .‫מקור‬ ‫וקודקוד‬ ‫משקל‬ ‫פונקציית‬ ,‫גרף‬ ‫הינו‬ ‫הקלט‬ ,‫טופולוגי‬ ‫מיון‬ ‫עושים‬ ‫אנחנו‬ ‫אזי‬ DAG‫ב־‬ ‫ומדובר‬ ‫היות‬ ‫אנחנו‬ ‫הטופולוגי‬ ‫המיון‬ ‫עפ‬ ‫לקוחים‬ ‫שאנחנו‬ ‫קודקוד‬ ‫ולכל‬ .‫שלו‬ ‫השכנים‬ ‫לכל‬ Relax ‫עושים‬ (Dijkstra) ‫דייקסטרה‬ ‫אלגוריתם‬ 11.5 ‫שלו‬ ‫הריצה‬ ‫שזמן‬ ‫רק‬ ‫לבלמן־פורד‬ ‫דומה‬ ‫מאוד‬ ‫זה‬ ‫אלגוריתם‬ .‫יותר‬ ‫טוב‬ ‫אין‬ ‫בגרף‬ ‫כי‬ ‫זה‬ ‫באלגוריתם‬ ‫מניחים‬ ‫גם‬ ‫אנחנו‬ ,‫כמו־כן‬ .‫שליליים‬ ‫משקלים‬ ‫כמתואר‬ ‫הקודקודים‬ ‫כל‬ ‫את‬ ‫מאתחלים‬ ‫אנחנו‬ ‫כל‬ ‫ראשית‬ .11.1‫ב־‬ .S = ∅ ‫קודקודים‬ ‫קבוצת‬ ‫ומגדירים‬ ‫את‬ ‫נכניס‬ ‫שאליו‬ Q ‫תור־עדיפויות‬ ‫מייצרים‬ ‫אנחנו‬ ‫יהיה‬ ‫זה‬ ‫קודקוד‬ ‫ממנו‬ ‫שנשלוף‬ ‫פעם‬ ‫וכל‬ ‫הקודקודים‬ .‫המינימלי‬ ‫נעשה‬ ‫ההוספה‬ ‫אחרי‬ ‫ומיד‬ S‫ל־‬ ‫הקודקוד‬ ‫את‬ ‫נוסיף‬ ‫אנחנו‬ .‫קודקוד‬ ‫מאותו‬ ‫היוצאות‬ ‫הצלעות‬ ‫לכל‬ Relax :‫הריצה‬ ‫זמן‬ ‫שולפים‬ ‫שאנחנו‬ ‫באירך‬ ‫כתלות‬ ‫להשתנות‬ ‫יכול‬ ‫הריצה‬ ‫זמן‬ :‫הקודקודים‬ ‫את‬ ‫השני‬ ‫אחרי‬ ‫אחד‬ ‫ממערך‬ ‫הקודקודים‬ ‫את‬ ‫שולפים‬ ‫אנחנו‬ ‫אם‬ :‫הינו‬ ‫הריצה‬ ‫זמן‬ ‫אזי‬ (...‫הלאה‬ ‫וכך‬ 2 ‫ואז‬ 1'‫מס‬ ‫)קודקוד‬ .O |V | 2 ‫האיבר‬ ‫הוא‬ ‫)השורש‬ ‫בערימת־מינימום‬ ‫משתמשים‬ ‫אנחנו‬ ‫אם‬ O ((|V | + |E|) log |V |) :‫הינו‬ ‫הריצה‬ ‫זמן‬ ‫אזי‬ (‫המינימלי‬ ‫הריצה‬ ‫זמן‬ ‫אזי‬ ‫פיבונאצ'י‬ ‫בערימת‬ ‫משתמשים‬ ‫אנחנו‬ ‫ואם‬ ‫הטוב‬ ‫הריצה‬ ‫זמן‬ ‫)זהו‬ O (|V | log |V | + |E|) :‫הינו‬ .(‫ביותר‬ ‫בין‬ ‫ומרחקים‬ ‫ביותר‬ ‫קצרות‬ ‫מסילות‬ 12 ‫הקודקודים‬ ‫זוגות‬ ‫כל‬ ‫את‬ ‫למצוא‬ ‫ורצינו‬ ‫מקור‬ ‫קודקוד‬ ‫שיש‬ ‫על־כך‬ ‫דיברנו‬ ‫מקודם‬ ‫עם‬ ‫מכוון‬ ‫בגרף‬ ‫קודקוד‬ ‫לכל‬ ‫ממנו‬ ‫ביותר‬ ‫הקלים‬ ‫המרחקים‬ .‫צלע‬ ‫לכל‬ ‫משקל‬ ‫פונקצית‬ ‫את‬ ‫למצוא‬ ‫רוצים‬ ‫אנחנו‬ ‫־‬ ‫כללי‬ ‫באופן‬ ‫מדברים‬ ‫אנחנו‬ ‫כעת‬ ...‫מקור‬ ‫קודקוד‬ ‫בלי‬ ‫שישנן‬ ‫ביותר‬ ‫הקלות‬ ‫המסילות‬ ‫המסליות‬ ‫מטריצת‬ 12.1 16