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

16
מבני נתונים סמסטר א' תשע"ה נתונים מבני ד"ר ערן לונדון חלק מיון ראוי קודם כל להגדיר את הבעיה ואז להציע דרכים לפתרונה... הגדרה של המושג מיון0.1 בגודלA קלט שלו הוא מערך אשר ה אלגוריתם מיון הוא:n A =[a 1 ,a 2 ,...,a n ] של המערך, בסדר עולה או1 פלט הינו פרמוטציה ואילו ה יורד, דהיינו:A 0 = a σ(1) ,a σ(2) ,...,a σ(n) .a σ(1) a σ(2) ≤···≤ a σ(n) כאשר:) ממין במקום אלגוריתם מיון מכונה0.1 הגדרה, כלומר,n אם מספר התאים הנוספים אינו תלוי ב־( .O (1) מספר התאים הנוסיפים הנדרשים הוא קבוע ־ ניתן כלומר סדר כלשהו של האיברים במערך. פרמוטציה=תמורה.1 עמוד) 12.5 בסעיף מבנים אלגבריים לקרוא עוד על פרמוטציות בסיכום של.(8 עמוד) 18 ובפרק(S X , מה שנקרא שם:5 ( ) מיון ערימה1 הגדרת ערימה1.1 הינה מערך אשר ניתן להציגו כמו עץ(בינארית) ערימה בינארי מלא או כמעט מלא כאשר כל קודקוד בעץ מתאים. 2 לתא במערך(השורה) הרמה מלבד הרמות בכל מלא הינו העץ ־ שיכולה(במקרים שבהם העץ הינו כמעט מלא) האחרונה להיות לא שלמה אבל היא תהיה מלאה מהקצה השמאלי ־(שורה) עד לקודקוד כלשהו באותה רמה נסמן: ־ גודל המערך.length [A] ־ מספר האלמנטים בערימה.heap - size [A] מכיוון שלא) heap - size [A] length [A] כמובן ש־.( תמיד גודל הערימה יהיה זהה לגודל המערך עצים: לגבי תזכורת.2 היותר לכל הדרגה של כל קודקוד היא עץ בינארי ־ כל העלים באותו העומק ולכל ־ שלם בינארי עץ.2 הקודקודים דרגה2 כל קודקוד הוא עלה או שדרגתו מלא ־ עץ בינארי בדיוק., וככה בעיקרון בנוי העץ:A [1] שורש העץ הינוa i 2i 2i+1 b c .a b a c האבא תמיד יהיה גדול מהילדים שלו::(i 6= 1) במילים אחרות לכל קודקוד שהוא אינו השורש.A [P arent (i)] A [i] מסקנה: הערך הכי גבוה בערימה נמצא בשורש העץ!:(כמתואר בתרשים) כדאי לזכורP arent (i)= i 2 Lef t (i)=2i Right (i)=2i +1 בעץ(קודקוד) הגדרת גובה של צומת1.1.1 של קודקוד בעץ מוגדר ע"י המסילה כלפי מטהגובה ה שצריך לעבור בעץ מאותו קודקוד עד לעלה הכי רחוקזה) כמובן שזה תלוי על איזה מערך מדובר. לא כל מערך הוא ערימה2 .( תלוי במיקומי הערכים שבו1

Upload: csnotes

Post on 20-Feb-2017

277 views

Category:

Education


1 download

TRANSCRIPT

Page 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 6= 1) השורש אינו שהוא קודקוד לכל אחרות במילים

.A [Parent (i)] ≥ A [i]

בשורש נמצא בערימה גבוה הכי הערך מסקנה:העץ!

בתרשים): (כמתואר לזכור כדאיParent (i) =

⌊i2

⌋Left (i) = 2i

Right (i) = 2i+ 1

בעץ (קודקוד) צומת של גובה הגדרת 1.1.1

מטה כלפי המסילה ע"י מוגדר בעץ קודקוד של הגובהרחוק הכי לעלה עד קודקוד מאותו בעץ לעבור שצריך

(זה ערימה הוא מערך כל לא מדובר. מערך איזה על תלוי שזה 2כמובן

שבו). הערכים במיקומי תלוי

1

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

נתונים תשע"המבני א' סמסטר

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

ערימה): שאינו בינארי עץ (ניקח למשל

19

11 4

7 10

5 3

.2 הינו 11 קודקוד של הגובה.0 הינו 3 קודקוד של הגובה

.1 הינו 10 של הגובה־ שלנו במקרה השורש, של הגובה הינו העץ של הגובה לכן,

.3 ־ 19 קודקוד של הגובה זה

־ היא איברים n עם ערימה של הגובה 1.1 טענה.Θ (logn)

בערימה שונים שימושים 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 (logn)

BUILD-HEAP ערימה בניית 1.2.2

.O (n) הינו נתון ממערך ערימה בניית של הריצה זמןהעלים, את לבדוק צורך לנו אין בקצרה: הרעיון (התחלתנתחיל אנחנו ממערך ערימה נבנה אנחנו כאשר לכן

.⌊length(A)

2

⌋שזה: עלים שאינם מהקודקודים

(וככה⌊length(A)

2

⌋שמספרו מהקודקוד נתחיל כלומר,

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

הקודקוד ולכן עלים, שאינם קודקודים⌊length(A)

2

⌋יש

אינו בוודאי הוא אזי⌊length(A)

2

⌋הוא הסידורי שמספרו

הם השאר כל ממנו, קטן הסידורי שמספרם אלה וכך עלהמהקודקודים אחד כל על ,1 מספר לקודקוד עד ונרד עלים)

במערך. התא ־ או ־ הקודקוד לערך היא כמובן 3הכוונה

2

Page 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

Page 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

Page 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

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

נתונים תשע"המבני א' סמסטר

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

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

כלומר: האחרונה,הינו: שלנו והקלט נניח

002 347 916 078

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

האחדות: ספרת לפי השני על אחד אותם נערום כעת

002916347078

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

אותו). תיארתי רק אלא הזה השלב אתנפזר כלומר האחדות, ספרת לפי זה את נעשתה ־ ולבסוף

האחדות: ספרת ע"פ המספרים את

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

Page 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

Page 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

Page 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 � �� � � �

� �

חוקי: אדום־שחור עץ זה.X שחור השורש �

.X ברצף אדומים שני אין �

לכל זהה שלו השחור הגובה בעץ, שנבחר קודקוד כל �

.X העלים לאחד מטה) (כלפי פשוטה מסילה בכל

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

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

הקודקודים.

5

2 6

1 3 7 8

� 4 � �� � � �

� �

הרעיון כי בהנחה ה־�, בעצים יוצגו לא ואליך מכאן הערה:הובן.

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

שמה). אפשרי הדבר אם

עומק. באותו בם קודקוד כל של העצים תתי שכל 9כלומר,

9

Page 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

Page 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.22t היותר לכל להכיל יכול פנימי קודקוד לכן,אומרים אנו ילדים 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

Page 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 41 0 1 0 02 0 0 1 03 0 0 0 14 1 0 0 0

צלע מרשים (אנחנו עצמה של שכנה היא צלע שאם כמובן.0 ולא 1 יהיה באלכסון אזי לעצמו) מקודקוד

השכנות מטריצת אזי מכוון שאינו גרף היה הנ"ל הגרך אםהיתה:

1 2 3 41 0 1 0 12 1 0 1 03 0 1 0 14 1 0 1 0

סימטרית. תמיד היא המטריצה מכוון שאינו בגרף כשמדוברתא שבכל מקושרות רשימות של רשימה הינה שכנים רשימה

שלו. השכנים רשימה את ואחריו קודקוד ישלמעלה): שנתון גרף (אותו מכוון גרף של דוגמר נראה אנחנו

1 // 22 // 33 // 44 // 1

12

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

נתונים תשע"המבני א' סמסטר

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

.DFSו־ BFS באלגוריתמים לקודקודים הכניסהמכוון: שאינו בגרף מדובר היה אם שלנו, במקרה למשל,

1 // 2 // 42 // 3 // 13 // 4 // 24 // 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 לגבי וכנ"ל 21 ושל 5 יהיה 2 של 4 יהיה 3 של יציאה הזמן ־ חזרה לחזור

.6 יהיהונגיע ־ (1,2,3 את סיימנו (כי ־ בקודקודים הלאה נמשיך ואזיהיה שלו היציאה וזמן 7 יהיה שלו הכניסה שזמן 4 לקודקוד

.8הינו: שנקבל והגרף

1 // 2

��4 3

טופולוגי מיון 9.3

ללא מכוון גרף ־ בלבד DAGב־ לעשות ניתן טופולוגי מיוןמעגלים!

13

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

נתונים תשע"המבני א' סמסטר

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

(למשל). בשורה הקודקודים כל את להציגזאת? עושים איך

זמן לפי הקודקודים את מסדרים ואז לגרף DFS עושיםשלנו: בדוגמא למשל היציאה,

4''

1 // 2 // 3

הכיוון... באותו הם החצים כל כי לב ונשים

מינמליים פורשים עצים 10

(הגדרה) מינימלי פורש עץ 10.1

w : E → R+ משקל פונקצית עם G גרף לנו ויש נניחהצלעות על שלילי) משקל גם להניח ניתן יהיה (בהמשך

למשל: משקל, ישנו צלע לכל כלומר שלו.

13

24

3

פירושו a →→ b) .7 הינו 1 →→ 3 של המשקל אזי.(bל־ aמ־ המסילה

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

הבא: הגרף את ניקל למשל

11

2

6

4

3

34

2

יהיה: המינימלי הפורש העץ אזי

11

2

4

3

3

2

G מגרף כזה עץ לבנית הפשוט האלגוריתם 10.2

הקבוצה היא בהתחלה (אשר A צלעות קבוצת לוקחיםהריקה).

את לה מוסיפים אנחנו פורש עץ מכילה אינה A עוד וכלבטוחה. צלע שהיא בתנאי (u, v) צלע

חתך: קודם נגדיר בטוחה צלע מהי להגדיר בשביללשתי הגרף של חלוקה הוא G מכוון לא גרף של חתך

.S, V \S קבוצות:נמצא מהקצוות אחד כל אם החתך את חוצה (u, v) צלע

אחרת. בקבוצהAב־ צלע אין אם A את מכבד החתך כי אורמים אנחנו

אותו. שחוצהויש החתך את חוצה היא אם ־ קלה צלע ־ נקראת צלעכולן אבל שחוצות, כמה להיות (יכולות מינימלי משקל להלהיות צריך [המשקל מינימלי משקל בעל להיות צריכות

זהה]).בטוחה. צלע היא זאת צלע כי יודעים אנחנו

למשל:

17

9

2

3

32

4

של החלוקה את מכבד המקווקו) (הקו החתך כי לראות ניתןהבטוחה הצלע את להוסיף נוכל כעת ועילו (3, ו־(4 (1, 2)

פורש). עץ (ויוצרת קלה צלע היא כי (2, 4)אותה להוריד ניתן היה צלע הייתה כבר (1, 3) אם ־ כן כמו

הפורש. לעץ (2, 4) את במקומה ולקחת

פורש עץ למציאת קרוסקל אלגוריתם 10.3מינימלי

.w משקל ופונקצית G גרף הינו האלגוריתם קלטA מקבוצה מתחילים גם אנחנו קרוסקל של באלגוריתם

ריקה. שהיא

14

Page 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 הינו שסכומו (או חיובי מעגל ישנו אם א.אליו. להיכנס

נצא. ולא אליו ניכנס נאחנו אזי ־ שלילי מעגל ישנו אם ב.

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

02

2−1

1

יכולים שליליים, להיות יכולים בקודקודים שהערכים כמובן.−∞ או ∞ להיות

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

הקודקודים שאר ואת 0 להיות נאתחל המקור קודקוד אתל־∞.

15

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

נתונים תשע"המבני א' סמסטר

Relax ־ ההרפיה פעולת 11.2

להגיע יותר קלה דרך ישנה אם לנו אומרת ההרפיה פעולתקודקוד. אל

הבא: המצב לנו ונתון נניח למשל,

32

9

המשקל אזי הנתונה הצלע דרך נלך שאם לראות ניתן אזיתהיה הימני לקודקוד המקור) (קודקוד sמ־ המסילה עבור

ונקבל: ההרפיה פעולת את עושים אנחנו אזי קצרה

32

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