מבני נתונים Data Structures הרצאת חזרה הרצאת חזרה ארז פטרנק Geiger & Wajc, 22 X
הקורס תוכנית מבני נתונים בסיסיים וסימונים אסימפטוטיים מערכים ורשימות מקושרות עצים ועצי חיפוש AVL עצי עצי 2-3 עצי הרחבה?..2.3.4.5 דרגות.6 רשימות דילוגים סיבוכיות משוערכת cs, Technion 2.7.8.9...2.3.4 טבלאות ערבול אחזקת קבוצות זרות מיון מיון טיפול במחרוזות גרפים איסוף אשפה הרצאת חזרה קושי? קופסאות שחורות?
תוכנית השיעור חלק ראשון - חזרה על נושאי הקורס מבני נתונים ומימושים שלהם. q שמורות מבנה. q מבנים מאוזנים. שמירת מידע נוסף בצמתים. בעיות בסיסיות בהן נתקלנו. q סיבוכיות. q חלק שני תרגילים לדוגמה נראה שאלות ממבחני עבר. q נפתור אותן. q נדגיש עקרונות להפיק מהפתרונות. cs, Technion 3
חלק ראשון חזרה על נושאי הקורס cs, Technion 4
מבני נתונים ומימושים שלהם Insert(x) Find(x) Remove(x) O(n) O(log n) O(n) מילון: מערכים O() O(n) רשימות O(n) O(h) עצי חיפוש בינאריים עצי AVL O(log n) עצי +B בפרט עצי 2-3 רשימות דילוגים *O() טבלאות ערבול **O( x ) Trie *עבור טבלאות ערבול כל החסמים הם בהנחת קלט סביר. **עבור Trie מדובר על מחרוזות, x ו- אורך המחרוזת.x cs, Technion 5
מבני נתונים ומימושים שלהם Makeset(i) Union(p, q) Find(i) O(n) O() :Union-Find מערכים O() רשימות O(n) O() O log n משוערך O() O() O(h) רשימות + מערכים, עם איחוד לפי גודל עצים הפוכים O() O(log n) עצים הפוכים עם איחוד לפי גודל O(log n) משוערך עצים הפוכים עם איחוד לפי גודל וכיווץ מסלולים cs, Technion 6
מבני נתונים ומימושים שלהם ערימת מינימום (תור עדיפויות): Init(x,, x 3 ), FindMin( ), Insert(x), DelMin( ), DecKey(p, x). מימושים: עץ כמעט שלם המקיים את כלל הערימה, מיוצג באמצעות: מערך עץ ב- 2 המימושים הנ"ל סיבוכיות הפעולות היא: Init(x,,x 3 ) FindMin( ) O(n) O() Insert(x) DelMin( ) O(log n) DecKey(p,x) cs, Technion 7
מבני נתונים ומימושים שלהם עץ סיומות\עץ סיומות מוכלל: ) 3.Init(s,,s למבנה זה לא הגדרנו פעולות נוספות, אך צייננו אלגוריתם "קופסא שחורה" שבונה 3 את המבנה בזמן ( 7 )O 78 s והצגנו שימושים רבים למבנה זה, רובן נסובו סביב בעיות שקשורות לתתי מחרוזות: מציאת תת מחרוזת. מציאת מספר מופעי תת מחרוזת. מציאת תת מחרוזת משותפת ארוכה ביותר. q q q cs, Technion 8
מבני נתונים ומימושים שלהם Exists(i, j) O() Neighbors(i) O(n) גרפים: מטריצת סמיכויות O(deg (i)) רשימת סמיכויות ((i) O(deg בנוסף, ראינו כיצד להשתמש בייצוגים אלו לגרפים ובמבני נתונים אחרים בכדי לפתור בעיות בסיסיות בגרפים, כגון: q מיון טופולוגי. q חישוב עץ פורש מינימום. q חישוב מסלול ארוך ביותר בגרף מכוון ללא מעגלים (בתרגול). cs, Technion 9
שמורות מבנה Invariants במהלך לפעולה הקורס ראינו כיצד הבטחת קיום תכונות מסוימות של מבנים בין (שמורות) הועילו לנו במימוש פעולות המבנים, ואף פעולות נוספות. פעולה אחת הדוגמאות הראשונות של שמורה שראינו היא שמורת עץ החיפוש הבינארי: בעץ חיפוש בינארי לכל צומת יש לכל היותר 2 בנים, ולכל צומת עם מפתח x כל הצמתים בתת העץ השמאלי של הצומת קטנים מ- x ואלו בימני גדולים מ- x. x שמורה זו אפשרה חיפוש יעיל. < x > x למעשה, כל התכונות שדרשנו מהמבנים שלנו היו שמורות של המבנים. בעת תיאור שמורה, היה עלינו להסביר איך משתמשים בשמורה וכיצד מתחזקים אותה. בשקפים הבאים נזכיר כמה דוגמאות בולטות שחזרו על עצמן במהלך הקורס. cs, Technion
שמורות מבנה איזון מבנים במהלך הקורס מימשנו מבנים רבים באמצעות עצים. במימושים אלו פעולות בסיסיות דרשו: לרוב סיור מהשורש לצומת (או מצומת לשורש). זמן ()O רמה לכל במסלול. h הוא סה"כ O(h) כאשר זמן, גובה העץ. בהמשך, ראינו כיצד להבטיח כי גובה העץ יהיה חסום (n h, = O(log מבלי לפגוע בזמן הריצה בכל רמה של הפעולות הבסיסיות. ע"י דוגמאות לאיזון מבנים: במימושי מילונים למיניהם באמצעות (עצי עצים רשימות,B+,AVL דילוגים).. ב- Find Union ממומש באמצעות עצים הפוכים..2 cs, Technion
שמורות מבנה מידע נוסף בצמתים ברבים מהמבנים נוסף מידע הוספת כיצד ראינו בצמתים עוזרת לפתור ביעילות בעיות נוספות אותן המבנה הבסיסי לפתור. ידע לא בשקפים הבאים כמה נציג דוגמאות נוסף למידע כזה שראינו במהלך הסמסטר. cs, Technion 2
מידע נוסף בצמתים דוגמאות במילונים מבוססי עצים: שמירת מספר הצמתים\עלים בתת\י העץ בכדי:..Select(k) למצוא את האיבר ה- k בגודלו במילון q.rank(x) למצוא את מספרו הסידורי של איבר x במילון: q 7 4 2 3 4 7 5 2 8 סכום האיברים עץ בתת כדי לחשב סכום האיברים עד לאיבר מסוים..2 סכום האיברים הזוגיים בתת העץ כדי לחשב סכומים אלו בכל העץ (בתרגול).3 cs, Technion 3
מידע נוסף בצמתים דוגמאות (המשך) בעצי סיומות (גם מוכללים),s,s A סיומות בעץ מוכלל של שתי מחרוזות הוא האם פנימי צומת לכל סימון. מייצג תת מחרוזת של s, של s, A או של שתיהן, בכדי: xa,2 bxa$ b $ $ A a,2 2,2 a$ $ $ A 2 52 2 עץ סיומות מוכלל של המחרוזות ba ו- xabxa עם המידע הנ"ל $ מציאת תת מחרוזת משותפת ארוכה ביותר. q - שמירת c C המיקום תת של הראשון המחרוזת המסלול ע"י המיוצגת.2 ועד מהשורש v, למטרת: מציאת מופע ראשון של מחרוזת בטקסט. q דחיסת q אינפורמציה. cs, Technion 4
מידע נוסף בצמתים עדכון\חישוב נשים לב שלרוב תיארנו מידע כך שלכל נוסף צומת v המידע של ניתן היה v לחישוב לפי המידע שבבניו, ובזמן שתלוי בניו. במספר רק עובדה זו אפשרה לנו:.Postorder לחשב את המידע הנוסף לכל הצמתים ע"י סיור. לעדכן את המידע הנוסף ביעילות לאחר עדכוני המבנה (הכנסה\הוצאה וכו')..2 הצמתים עבורם השתנה המידע הנוסף נמצאים על מסלול החיפוש. עדכון המידע הנוסף מתבצע מתחתית מסלול העדכון כלפי מעלה. מבטיח זה דבר צומת כל עדכון שבזמן במסלול התיקון, המידע אחד בכל הנוסף מבניו תקין. cs, Technion 5
בעיות בסיסיות במהלך הקורס במספר דננו בעיות בסיסיות, ביניהן: בעית המיון:.QuickSort.HeapSort חסמים תחתונים למיון...2.3 אלגוריתמים יעילים בהם למקרים ידוע מידע נוסף על הקלט..4 מציאת האיבר ה- k בגודלו במערך: לינארי בזמן בממוצע הסתברותי.. Select (חציון החציונים). לינארי בזמן במקרה הגרוע, באמצעות אלגוריתם.2 cs, Technion 6
סיבוכיות בתחילת מושג על חזרנו הקורס הסיבוכיות האסימפטוטית, מושג את לפרמל בכדי היעילות (בזמן ובמקום) של פתרונות לבעיות. תזכורת להגדרה הנפוצה בקורס: תהיינא פונקציות חיוביות. נאמר כי f n = O(g n ) f n,g(n).f n c g(n) מתקיים n K n אם קיימים קבועים ו- < n K כך שלכל < c למה הגדרות כאלו מעניינות אותנו? תשובה: הן מאפשרות להתעלם מקבועים וגם נותנות הבטחות על קלטים ההולכים וגדלים. cs, Technion 7
סיבוכיות (המשך) בהמשך הקורס דיברנו על סיבוכיות מעבר לסיבוכיות המקרה הגרוע. על: דיברנו סיבוכיות בממוצע על הקלט ממוצע על פני כל הקלטים האפשריים.. גובה עצי חיפוש בינאריים. טבלאות ערבול (פיזור אחיד). - סיבוכיות בממוצע הסתברותי ממוצע על פני הרנדומיות של האלגוריתם..2 רשימות דילוגים. טבלאות ערבול (ערבול אוניברסלי). אלגוריתמי מיון\מציאת חציון רנדומיים. 3. סיבוכיות משוערכת סיבוכיות המקרה הגרוע של סדרת פעולות. מערכים דינמיים וטבלאות ערבול (בתירגולים). מימושי.Union Find cs, Technion 8
סיבוכיות משוערכת שיטות הוכחה שראינו. שיטת הצבירה הוכחת חסם באופן על סך ישיר זמן הריצה. 2. שיטת התשלומים בפעולה ה- i נקצה. a 7 ההפרש בין המחיר המעשי t 7 ומה שאנו משלמים a 7 נצבר בבנק. אם חשבון הבנק לא נכנס לחוב, הרי שמה ששילמנו הוא חסם על עלות הפעולות. 3. שיטת הפוטנציאל T הגדרת ערך מספרי של מבנה הנתונים בשלב ה- i, הפוטנציאל φ. 7 הגדרת המחיר המשוערך להיות.a 7 = t 7 + φ 7 φ 7R T אם סוכמים על פני m פעולות מקבלים 78 a 7 = 78 t 7 + φ T φ K. הרעיון: נרצה להתייחס לפוטנציאל שקטן הרבה במהלך פעולות יקרות ולא גדל יותר מדי במהלך פעולות זולות. cs, Technion 9
חלק שני תרגילים cs, Technion 2
חיפוש כל האיברים ב- Union-Find מועד א חורף מבנה נתון (UF) 29-2 Union-Find ממוספרים:,n.,2, איברים רצף ע"י בשלב ידוע של לא כלשהו אשר ממומש אלה מחולקים פעולות זה מריצים את האלגוריתם הבא:.Union ע"י לקבוצות עצים זרות הפוכים. איברי המבנה כלשהן, אשר התקבלו for(int i = ; i n; i++) { Find(i) } כאשר פעולת Find מבצעת הוכיחו כי האלגוריתם הנ"ל כיווץ מסלולים. רץ בזמן O(n) במקרה הגרוע. איברים p 2 2 7 9 cs, Technion 2 4 5 3 23 5 2 קבוצות n n
חיפוש כל האיברים ב- Union-Find (המשך) אבחנות: אם בנוסף לכיווץ המסלולים היה נתון כי מתבצע איחוד גודל: לפי cs, Technion 22 משורש איבר כל מרחק. הוא קבוצתו.O(log n) O(n log n).2 אנחנו וזאת זמן על הסיבוכיות המשוערכת של כיוון ופעולות לבצע שניתן ריצת האלגוריתם. היותר לכל במימוש UF פעולות לכן זה היא להראות ניתן.O(log n) n פעולות Union רק Find פחות מ- 2n פעולות זמן לכן ובפרט הריצה מקלות הכולל Find פעולות על עוקבות, Union-Find מאתחול המבנה. פעולות כל של זמן הריצה של האלגוריתם הנ"ל היא מתבקשים ללא תלות להראות חסם באופן האיחודים. יותר הדוק המבנה של for(int i = ; i n; i++) { Find(i) } שמשנות ניתן מאתחולו להניח הן את של חסם המבנה, שהתבצעו,O(n log n).o(n log n) עבור O(n) האלגוריתם הנ"ל,
חיפוש כל האיברים ב- Union-Find (המשך) החסם, את שנוכיח לפני ניזכר בפעולת איחודים עם חיפוש וננסה הפוך, בעץ לקבל אינטואיציה נכון. זה למה חסם 3 23 5 i 9 9 4 5 Find(i) 9 9 4 5 3 23 5 i נגדיר שני מושגים שיעזרו לנו בהוכחה: קשת שורש: קשת בין בן של שורש לשורש. קשת פנימית: קשת שאינה קשת שורש. cs, Technion 23
חיפוש כל האיברים ב- Union-Find (המשך) הוכחה בשיטת הצבירה: הפעולה Find(i) מורכבת מפעולות שעלותן לינארית באורך קבוצת i. כלומר העלות הכוללת לינארית במספר הקשתות בהן המסלול מ -i לשורש נבקר בסיורים. צומת לכל במהלך נבקר Find(i) בקשת שורש אחת. i. קשת פנימית מופיעה כחלק ממסלול חיפוש בדיוק פעם אחת..2.O(n) 2n = O(n) נבקר לכן בלכל היותר קשתות במהלך האלגוריתם ריצתו וזמן 3 23 5 i 9 9 4 5 Find(i) 9 9 4 5 3 23 5 i cs, Technion 24
חיפוש כל האיברים ב- Union-Find (המשך) או לקשת הוכחה באמצעות שיטת החיובים: בתוכנית התשלומים, נשלם מראש (בפעולות יצירה ואיחוד) על ה- find : נקצה לכל צומת וקשת בעצים ההפוכים. 2 כיוון שמדובר ביער, מספר הקשתות קטן מ- n. זמן משוערך לכל makeset() או union() הוא לכל היותר 4: 2 לצומת שנוצרת, ו- 2 לפעולה עצמה. סה כ ()O. נראה שתשלום זה ישלם על כלל הפעולות מבלי להיכנס לחוב. מכאן זמן הריצה הכולל הוא.O(n) 3 23 5 i 9 9 4 5 Find(i) 9 9 4 5 2 23 3 2 5 2 i 2 cs, Technion 25
חיפוש כל האיברים ב- Union-Find (המשך) במהלך פעולת Find(i) הגוררת עליה במעלה מסלול קשתות: k באורך cs, Technion 26 בכדי המחיר המעשי הוא לשלם מחיר זה:. 2k כל k הקשתות הפנימיות ישלמו את 2 ה- שקיבלו i הצומת הוכחה שהבנק ישלם את נכנס לא 2 ה- הנותרים. כל קשת צומת לכל לחוב: פנימית מופיעה נבצע i Find(i) דוגמא: יהיה פעולה בכל לכן פעם אחת בדיוק לנו מספיק בחיפוש פעם אחת. בבנק כסף 9 r 4 5 3 2 23 2 5 2 i 2 Find(v K ) (ואז הופכת לשלם על הפעולה. בפעולה הראשונה. לקשת שורש).
חיפוש כל האיברים ב- Union-Find (המשך) הוכחה בשיטת הפוטנציאל: הפוטנציאל יהיה פעמיים מספר הקשתות הפנימיות. נבחין:. φ K 2n. φ 3 = ב-(.2(k i הפעולה ה- :Find(i) עבור מסלול חיפוש באורך k קשתות: מחיר הפעולה המעשי הוא.t 7 = 2k k קשתות פנימיות מוחלפות בקשתות שורש והפוטנציאל יורד = 2 k.a 7 = t 7 + φ 7 φ 7R = 2k 2 מכאן נקבל 3 n הפעולות ונקבל:. 2n 78 a 7 = 78 t 7 + φ 3 φ K 3 על פני נסכום 3 78 נעביר אגפים. 4n 2n + φ K t 7 ונקבל cs, Technion 27
נקודות לקחת מהוכחת הפוטנציאל: כפי שצייננו קודם, דרך מבטיחה להגדיר פוטנציאל שיעזור להוכיח חסמים על הסיבוכיות המשוערכת של פעולה היא ע"י בחירת פוטנציאל להיות ערך מספרי של מבנה הנתונים שלא גדל יותר מדי בפעולות הקלות וצונח בפעולות היקרות. במקרה הזה לקחנו את מספר הקשתות הפנימיות. במהלך הקורס ראינו מספר דוגמאות נוספות: בMultiPop מספר האיברים במחסנית. - במונה הבינארי מספר ה- םי- במונה. - במערכים דינאמיים (בתרגול) מרחק מספר האיברים ממחצית גודל המערך. - cs, Technion 28
מילון נוסף למספרים מועד א אביב + 2 תוספת סעיף א דרוש מבנה נתונים, אשר מחזיק מספרים שלמים חיוביים הנתונים ותומך בפעולות הבאות: בבסיס בינארי,.O().O(log x) אתחול מבנה ריק. Init() הכנס את המספר x למבנה. Insert(x) Z נמצא במבנה. x החזר האם Find(x) Delete(x) מחק את המספר x מהמבנה. רמז: שימו לב שהסיבוכיות הנדרשת לכל פעולה אינה תלויה במספר האיברים במבנה. cs, Technion 29
מילון נוסף למספרים פתרון סעיף א ב-( x log A x + = O(log,x כדי לייצג מספר שלם להשתמש די ביטים. במלים אחרות, די ב-( x O(log אותיות מעל הא"ב {,} = Σ. נשתמש ב- Trie של המספרים מיוצגים כמחרוזות בינאריות מה- MSB ל- LSB. פעולות הכנסה, הוצאה וחיפוש של מחרוזת בTrie s לוקחות $ $ זמן. בפתרוננו מספר מיוצג כמחרוזת בינארית x O( s ) באורך עומד זה (x.o(log מכאן שפתרון בדרישות התרגיל. נקודות לקחת מפתרון זה: ייצוג הנתונים יכול להיות חלק גדול מפתרון בעיה. $ $ במקרה זה, ברגע שחשבנו לייצג כל מספר ע"י מחרוזת שהיא הייצוג הבינארי שלו, התרגיל נפתר כמעט מיידית. cs, Technion 3
מילון נוסף למספרים.x T`a סעיף נוסף הוסיפו למבנה מסעיף א' את הפונקציונליות הבאה: Max() מחזיר את המספר הגדול ביותר במבנה, סיבוכיות זמן: ) T`a O(log x במקרה הגרוע. תארו אילו שינויים לעשות יש למימוש שהצעתם לתמוך כדי בסעיף א בפעולה. ניסיון ראשון: בתרגול ראינו כיצד למצוא את שתלוי רק באורכה בכל צומת המחרוזת הגדולה ביותר לקסיקוגרפית בTrie יש לפנות בקשת שמייצגת אות גדולה ביותר. בזמן לצערנו, לא את מחרוזת זו אנו מבקשים. למשל, המחרוזת גדולה לקסיקוגרפית מהמחרוזת, אבל זה אינו הסדר בין המספרים שמחרוזות אלו מייצגים:. A = 3 < 6 = A cs, Technion 3
מילון נוסף למספרים ניסיון שני פתרון לסעיף הנוסף: אבחנה: בין שני מספרים, מספר "ארוך יותר" (בעל יותר ספרות) הוא גדול בין מספרים מאותו אורך, המספר הגדול יותר לקסיקוגרפית הוא הגדול יותר. יותר. 6 5 רעיון פתרון: נשמור בכל צומת את גובהו. שימוש במידע הנוסף: נתחיל מהשורש ועד שנגיע לעלה: נפנה לבן הגבוה יותר. במקרה של שוויון בגבהי הבנים, $ 4 3 2 $. נמשיך בקשת שמייצגת ריצה: זמן ) T`a.O(log x $ $ cs, Technion 32
מילון נוסף למספרים 6 עדכון המידע הנוסף בהכנסות\הוצאות: בעת הכנסה או הוצאה של מספר מהמבנה, ייתכן וגבהי צמתים השתנו. צמתים אלו נמצאים במסלול החיפוש. 5 גובה צומת הוא המקסימלי מבין גבהי בניו, ועוד. מכאן שגבהי הצמתים ניתנים לעדכון ב-( O( בכל רמה. סה"כ x) O(log אחרי הכנסת\הוצאת.x $ 4 $ נקודות לקחת מפתרון זה: 3 2 עוד דוגמה לתועלת הוספת מידע נוסף בצמתים. בעת הגדרת מידע נוסף, יש: לתאר מפורשות את המידע הנוסף בכל צומת. $ $ להסביר כיצד להשתמש במידע הנוסף. לתאר כיצד לעדכן את המידע הנוסף. cs, Technion 33
מילון נוסף למספרים סעיף ב הוסיפו למבנה מהסעיף הקודם את הפעולה הבאה:.x m (mod 2 i ) המקיימים x החזר את מספר האיברים CountMod(m,d) m,d מספרים שלמים. סיבוכיות זמן: O(d) במקרה הגרוע. 4 2 $ $ 2 $ $ פתרון לסעיף ב נחזיק Trie נוסף של המספרים, מיוצגים מה- LSB ל- MSB. בכל צומת נשמור מידע נוסף מספר העלים בתת העץ. שימוש במידע הנוסף: בכדי לענות על :CountMod(m,d) נבדוק כמה מחרוזות מתחילות ב- d הביטים ה- LSB של m. זמן:.O(d) cs, Technion 34
מילון נוסף למספרים פתרון לסעיף ב (המשך) עדכון המידע הנוסף בהכנסות\הוצאות: זהה לאופן בו עדכננו את גבהי הצמתים בסעיף הקודם, ומכאן זמן (x.o(log ההבדל היחיד הוא בנוסחה לפיה מעדכנים את המידע הנוסף בצמתים על מסלול החיפוש: מספר העלים בתת העץ של צומת הוא סכום מספר העלים בתתי העצים של בניו. נקודות לקחת מפתרון זה: ושימוש נכון ייצוג שוב, נוסף במידע בצמתים מאפשר פתרון שאלה נוספת. הוספת מבנה למבנה נוסף בו השתמשתם עשויה כה עד להקל על הפתרון. cs, Technion 35