חומרי לימוד - מדעי המחשב
Transcription
חומרי לימוד - מדעי המחשב
כ"ה/אייר/תשע"ה עץ חיפוש בינארי – Binary Search Tree הגדרה- עץ חיפוש בינארי הוא -עץ בינארי של מספרים אשר בכל צומת שלו מתקיים שכל הערכים בתת העץ הימני שלו (אם קיים) גדולים מהערך בצומת ,וכל הערכים בתת העץ השמאלי שלו (אם קיים) קטנים מהערך בצומת. 1 עץ חיפוש בינארי – Binary Search Tree עץ חיפוש בינארי -דוגמה 10 15 26 5 9 עץ חיפוש בינארי – Binary Search Tree 3 2 1 תשע"ה/אייר/כ"ה השימוש בעץ בינארי – הגדרה הגדרה יצירת מופע חדש של עץ בינארי BinTreeNode< >טיפוס ערכי העץtree = new BinTreeNode<;)ערך לשורש העץ – בהתאם לטיפוסו(>טיפוס ערכי העץ 12 בשורש העץ המספר, כעץ שלמיםtree הגדרת,למשל BinTreeNode<int> tree = new BinTreeNode<int>(12); 3 Binary Search Tree – עץ חיפוש בינארי מציאת איבר- עץ חיפוש בינארי public static bool IsXinSearchTree(BinTreeNode<int> t, int x) הנחה – העץ אותחל.t נמצא בעץ החיפוש הבינאריx הפעולה מחזירה האם הערך// { if(t == null) return false; else if (t.GetInfo() == x) return true; else if (x < t.GetInfo()) return IsXinSearchTree(t.GetLeft(),x); else return IsXinSearchTree(t.GetRight(),x); } 4 2 Binary Search Tree – עץ חיפוש בינארי כ"ה/אייר/תשע"ה עץ חיפוש בינארי -מציאת איבר -סיבוכיות זמן הריצה צריך להבחין בין שני מקרי קצה של מבנה העץ כאשר לכל צומת צאצא בודד לכל צומת צאצא בודד כאשר העץ מלא (מאוזן ,לכל צומת שני בנים עד לשלב האחרון - הנמוך ביותר ,שם כולם עלים). סיבוכיות זמן הריצה היא ,O(n) -שכן ,במקרה הגרוע ביותר ,האיבר נמצא בצומת ברמה התחתונה ביותר (או לא נמצא כלל בעץ) -מה שיחייב מעבר על nצמתי עץ החיפוש הבינארי. כאשר העץ מלא סיבוכיות זמן הריצה היא ,O(log2n) -שכן ,בכל פעם החיפוש ימשיך להתבצע רק על אחד משני תתי העצים. 5 עץ חיפוש בינארי – Binary Search Tree עץ חיפוש בינארי -מציאת איבר -מעקב האם 9נמצא - בעץ החיפוש הבינארי הבא? 9 10 15 26 5 9 עץ חיפוש בינארי – Binary Search Tree 9 9 3 6 3 תשע"ה/אייר/כ"ה עץ חיפוש בינארי – הוספת איבר public static void AddToSearchTree(BinTreeNode<int> t, int x) { העץ אותחל ואינו ריק- הנחה,מוסיפה את המספר השלם לעץ החיפוש הבינארי// if (x < t.GetInfo()) מוסיפים לעץ בן שמאלי עם המספר- אם לא קיים בן שמאלי// if (t.GetLeft() == null) t.SetLeft(new BinTreeNode<int>(x)); else AddToSearchTree(t.GetLeft(), x); else if (x > t.GetInfo()) מוסיפים לעץ בן ימני עם המספר- אם לא קיים בן ימני// if (t.GetRight() == null) t.SetRight(new BinTreeNode<int>(x)); else AddToSearchTree(t.GetRight(), x); }7 Binary Search Tree – עץ חיפוש בינארי מעקב- עץ חיפוש בינארי – הוספת איבר 8 8 5 15 8 3 10 - 8 הוספת לעץ החיפוש הבינארי הבא 9 8 8 4 Binary Search Tree – עץ חיפוש בינארי 26 כ"ה/אייר/תשע"ה עץ חיפוש בינארי -תרגילים א -כתוב פעולה חיצונית המחזירה את הערך הגדול ביותר בעץ חיפוש בינארי של מספרים שלמים ב -מה סיבוכיות זמן הריצה של הפעולה שרשמת בסעיף א'? נמק. הפתרון )public static int BiggestInTree(BinTreeNode<int> t //הפעולה מחזירה את הערך הגדול ביותר בעץ החיפוש הבינארי .tהנחה – העץ אותחל ואינו ריק { )if((t.GetRight() == null ;)(return t.GetInfo else ;))(return BiggestInTree(t.GetRight סיבוכיות זמן הריצה של הפעולה היא בין ) O)nל- } )O)log2n עבור עץ שכל הצמתים בו ימניים – יסרקו בדיוק פעם אחת כל צמתי העץ. עבור עץ מלא – בכל פעולה רקורסיבית יבחר רק חצי מהעץ (הימני) להמשך הסריקה. 9 עץ חיפוש בינארי – Binary Search Tree עץ חיפוש בינארי -תרגילים א -כתוב פעולה חיצונית המקבלת שני עצי חיפוש בינאריים t1,t2שניהם של מספרים שלמים ובשניהם אין חזרות על ערכים .הפעולה תחזיר האם כלל הערכים בt1- נמצאים ב.t2- ב -מה סיבוכיות זמן הריצה של הפעולה שרשמת בסעיף א'? נמק. )public static bool IsTree1InTree2(BinTreeNode<int> t1, BinTreeNode<int> t2 //הפעולה מחזירה האם העץ t1מוכל בעץ החיפוש הבינארי .t2הנחה – העצים אותחלו { )if (t1 == null ;return true else )))(if (!IsXinSearchTree(t2, t1.GetInfo ;return false else )return IsTree1InTree2(t1.GetRight(), t2 ;)&& IsTree1InTree2(t1.GetLeft(), t2 עץ חיפוש בינארי – Binary Search Tree } 10 5 כ"ה/אייר/תשע"ה עץ חיפוש בינארי -תרגילים )public static bool IsTree1InTree2(BinTreeNode<int> t1, BinTreeNode<int> t2 //הפעולה מחזירה האם העץ t1מוכל בעץ החיפוש הבינארי .t2הנחה – העצים אותחלו { )if (t1 == null ;return true else )))(if (!IsXinSearchTree(t2, t1.GetInfo ;return false else )return IsTree1InTree2(t1.GetRight(), t2 ;)&& IsTree1InTree2(t1.GetLeft(), t2 } ב -מה סיבוכיות זמן הריצה של הפעולה שרשמת בסעיף א'? נמק. סיבוכיות זמן הריצה של הפעולה היא בין ) O)n∙mל- שכן ,עבור גודל ,n - t1פעולת העזר - IsXinSearchTreeהיא בין ) O)nל- )O)m ∙ log2n )O) log2n והפעולה העיקרית - IsTree1InTree2 -מופעלת רקורסיבית עבור כל צמתי העץ t2שגודלו m עץ חיפוש בינארי – Binary Search Tree 11 עץ חיפוש בינארי -תרגילים א -כתוב פעולה חיצונית המקבלת עץ חיפוש בינארי ורשימה ממוינת שניהם של מספרים שלמים .הפעולה תחזיר רשימה חדשה וממוינת המכילה את כלל הערכים של העץ ובנוסף את כל הערכים של הרשימה ב -מה סיבוכיות זמן הריצה של הפעולה שרשמת בסעיף א'? נמק. עץ חיפוש בינארי – Binary Search Tree 12 6