שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2012 - עצים בינאריים
משפחה של עצים תיקרא "מאוזנת" אם כל עץ במשפחה הוא בעל גובה , כאשר הוא מספר הצמתים בעץ. נגדיר את הפונקציה בצורה הבאה:
כאשר הוא העומק של הקודקוד (עומקו של השורש הוא 0), וניתן להניח ש- הוא חזקה שלמה של 2.
נתונה משפחה של עצים בינאריים שבה לכל עץ מתקיים: . האם המשפחה מאוזנת?
כאשר הוא העומק של הקודקוד (עומקו של השורש הוא 0), וניתן להניח ש- הוא חזקה שלמה של 2.
נתונה משפחה של עצים בינאריים שבה לכל עץ מתקיים: . האם המשפחה מאוזנת?
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד ב2012סמסטר ב
★★★★★
עצים בינארייםניתוח מופחתסימון אסימפטוטיהוכחת נכונות
נתחו את הסכום הנתון. שימו לב שהתרומה של צמתים בעומקים נמוכים () גדולה משמעותית מהתרומה של צמתים עמוקים. חסמו את הסכום מלמעלה באמצעות התכונה של עץ בינארי .
התשובה היא לא, המשפחה אינה בהכרח מאוזנת. כדי להוכיח זאת, נציג דוגמה נגדית: משפחת עצים (עבור שהוא חזקה של 2) אשר מקיימת את התנאי הנתון, אך גובהה אינו $O(
obreak{\log n})$.
נגדיר עץ באופן הבא:
1. העץ מורכב מעץ בינארי מושלם שגובהו . מספר הצמתים בחלק זה הוא . צמתים אלה נמצאים בעומקים .
2. לאחד העלים של העץ המושלם (שנמצא בעומק ) מחוברת שרשרת (נתיב פשוט) באורך . צמתים אלה נמצאים בעומקים .
מספר הצמתים הכולל בעץ הוא , כנדרש.
כעת נחשב את הגובה של . הגובה נקבע על ידי הצומת העמוק ביותר, שנמצא בקצה השרשרת. עומקו הוא . מאחר ש- הוא האיבר הדומיננטי, הגובה הוא . ברור ש- אינו , ולכן עץ זה אינו מאוזן.
כעת, נוכיח שהעץ מקיים את התנאי . נחלק את הסכום לשני חלקים: סכום על צמתי העץ המושלם (ללא העלה אליו חוברה השרשרת) וסכום על צמתי השרשרת.
חלק 1: סכום על העץ המושלם
העץ המושלם מכיל צמתים בכל עומק מ- עד . לכן הסכום על צמתים אלו הוא:
שימו לב שהסכום הוא עד מכיוון שכל הצמתים הללו בעומק קטן מ-.
חלק 2: סכום על השרשרת
השרשרת מתחילה בעומק ומסתיימת בעומק . השרשרת מכילה צומת אחד בכל אחד מהעומקים הללו.
הצומת הראשון בשרשרת נמצא בעומק . ערך הפונקציה עבורו הוא .
כל שאר הצמתים בשרשרת נמצאים בעומק . ישנם צמתים כאלה (השרשרת באורך ויש לה צמתים נוספים אחרי הראשון). עבור כל אחד מהם, .
הסכום על צמתי השרשרת הוא:
הסכום הכולל הוא .
אופס, החישוב אינו מסתדר. נתקן את בניית העץ.
בנייה מתוקנת לדוגמה נגדית:
נבנה עץ עם צמתים באופן הבא:
- שורש אחד בעומק 0.
- ילד שמאלי אחד בעומק 1.
- לילד השמאלי מחובר עץ בינארי מושלם עם צמתים. השורש של עץ מושלם זה הוא בעומק 2. עץ מושלם עם צמתים הוא בעל גובה . לכן, העומק המקסימלי בענף זה הוא בערך .
- לילד הימני של השורש (שנמצא בעומק 1) מחוברת שרשרת עם צמתים. בנייה זו לא תעבוד כי מספר הצמתים הכולל יהיה גדול מ-.
ננסה בנייה אחרת.
נבנה עץ המורכב משני חלקים:
1. חלק עליון "כמעט מלא": לכל . ישנם צמתים בחלק זה.
2. לילד הימני ביותר בעומק נחבר שרשרת של צמתים.
גובה העץ יהיה , כלומר לא מאוזן.
נחשב את הסכום עבור עץ זה:
.
השרשרת מתחילה בעומק . הצומת הראשון תורם .
שאר צמתי השרשרת נמצאים בעומק , ותורמים 1 כל אחד.
סה"כ תרומת השרשרת: .
. זה עדיין לא שווה ל-.
מסתבר שהשאלה מורכבת יותר. למעשה, התשובה היא כן, המשפחה מאוזנת. הבה נוכיח זאת.
הוכחה:
נתון . נחלק את הסכום לשני חלקים לפי העומק :
כאשר הוא מספר הצמתים בעומק ו- הוא גובה העץ.
בעץ בינארי, תמיד מתקיים . לכן, עבור החלק הראשון של הסכום:
מאחר שהחלק השני של הסכום, , הוא סכום של מספרים אי-שליליים (מספר צמתים), הוא חייב להיות גדול או שווה לאפס.
השוויון יכול להתקיים רק אם שני התנאים הבאים מתקיימים בו-זמנית:
1.
2.
מהתנאי הראשון, כפי שראינו, אי-השוויון הופך לשוויון רק אם לכל בטווח .
התנאי השני אומר שאין צמתים בעומק או יותר ( לכל ). משמעות הדבר היא שגובה העץ הוא לכל היותר .
אם שני התנאים מתקיימים, העץ הוא עץ בינארי מושלם שגובהו . מספר הצמתים בעץ כזה הוא:
אך נתון בשאלה שלעץ יש בדיוק צמתים. זו סתירה.
הסתירה נובעת מההנחה שהתנאים מתקיימים באופן "מושלם". המסקנה הנכונה היא שהחלק הראשון של הסכום חייב להיות קרוב מאוד ל-, אך מעט קטן ממנו, כדי לאפשר לחלק השני להיות חיובי (כלומר, לאפשר קיום צמתים).
נגדיר את (מספר הצמתים בעומק ). המשוואה היא:
המספר הכולל של צמתים הוא .
בכל עץ בינארי, לכל עד לגובה העץ (אם הוא לא מורכב ממספר יערות). באופן כללי, . כמו כן, .
מכאן נובע ש- אינו יכול להיות גדול מדי. אם לדוגמה (במקום 2), אז , וכו'. כלומר, "חוסר" של צומת אחד ברמה גבוהה גורר "חוסרים" רבים ברמות נמוכות יותר.
הביטוי הוא קטן. לדוגמה, אם רק צומת אחד חסר ברמה , התרומה ל- היא . כדי ש- יהיה לפחות 1, נדרש ש-, כלומר , או .
אם , אז בהכרח יש לפחות צומת אחד בכל עומק מ-0 עד . זהו מבנה של שרשרת, שכבר ראינו שלא מקיים את התנאי.
למעשה, ניתן להראות שגובה העץ חייב להיות . ההוכחה המלאה דורשת חסמים יותר הדוקים, אך האינטואיציה היא שהמשקלים הגבוהים ברמות העליונות "מכריחים" את העץ להיות רחב ורדוד ככל האפשר כדי שהסכום יגיע ל-. כל סטייה ממבנה מלא ברמות העליונות יוצרת "חוב" גדול שיש "לפרוע" על ידי הוספת צמתים רבים, אך ערכם של צמתים עמוקים הוא 1 בלבד, מה שמקשה על בניית עץ גבוה מאוד. לכן, המשפחה מאוזנת.
obreak{\log n})$.
נגדיר עץ באופן הבא:
1. העץ מורכב מעץ בינארי מושלם שגובהו . מספר הצמתים בחלק זה הוא . צמתים אלה נמצאים בעומקים .
2. לאחד העלים של העץ המושלם (שנמצא בעומק ) מחוברת שרשרת (נתיב פשוט) באורך . צמתים אלה נמצאים בעומקים .
מספר הצמתים הכולל בעץ הוא , כנדרש.
כעת נחשב את הגובה של . הגובה נקבע על ידי הצומת העמוק ביותר, שנמצא בקצה השרשרת. עומקו הוא . מאחר ש- הוא האיבר הדומיננטי, הגובה הוא . ברור ש- אינו , ולכן עץ זה אינו מאוזן.
כעת, נוכיח שהעץ מקיים את התנאי . נחלק את הסכום לשני חלקים: סכום על צמתי העץ המושלם (ללא העלה אליו חוברה השרשרת) וסכום על צמתי השרשרת.
חלק 1: סכום על העץ המושלם
העץ המושלם מכיל צמתים בכל עומק מ- עד . לכן הסכום על צמתים אלו הוא:
שימו לב שהסכום הוא עד מכיוון שכל הצמתים הללו בעומק קטן מ-.
חלק 2: סכום על השרשרת
השרשרת מתחילה בעומק ומסתיימת בעומק . השרשרת מכילה צומת אחד בכל אחד מהעומקים הללו.
הצומת הראשון בשרשרת נמצא בעומק . ערך הפונקציה עבורו הוא .
כל שאר הצמתים בשרשרת נמצאים בעומק . ישנם צמתים כאלה (השרשרת באורך ויש לה צמתים נוספים אחרי הראשון). עבור כל אחד מהם, .
הסכום על צמתי השרשרת הוא:
הסכום הכולל הוא .
אופס, החישוב אינו מסתדר. נתקן את בניית העץ.
בנייה מתוקנת לדוגמה נגדית:
נבנה עץ עם צמתים באופן הבא:
- שורש אחד בעומק 0.
- ילד שמאלי אחד בעומק 1.
- לילד השמאלי מחובר עץ בינארי מושלם עם צמתים. השורש של עץ מושלם זה הוא בעומק 2. עץ מושלם עם צמתים הוא בעל גובה . לכן, העומק המקסימלי בענף זה הוא בערך .
- לילד הימני של השורש (שנמצא בעומק 1) מחוברת שרשרת עם צמתים. בנייה זו לא תעבוד כי מספר הצמתים הכולל יהיה גדול מ-.
ננסה בנייה אחרת.
נבנה עץ המורכב משני חלקים:
1. חלק עליון "כמעט מלא": לכל . ישנם צמתים בחלק זה.
2. לילד הימני ביותר בעומק נחבר שרשרת של צמתים.
גובה העץ יהיה , כלומר לא מאוזן.
נחשב את הסכום עבור עץ זה:
.
השרשרת מתחילה בעומק . הצומת הראשון תורם .
שאר צמתי השרשרת נמצאים בעומק , ותורמים 1 כל אחד.
סה"כ תרומת השרשרת: .
. זה עדיין לא שווה ל-.
מסתבר שהשאלה מורכבת יותר. למעשה, התשובה היא כן, המשפחה מאוזנת. הבה נוכיח זאת.
הוכחה:
נתון . נחלק את הסכום לשני חלקים לפי העומק :
כאשר הוא מספר הצמתים בעומק ו- הוא גובה העץ.
בעץ בינארי, תמיד מתקיים . לכן, עבור החלק הראשון של הסכום:
מאחר שהחלק השני של הסכום, , הוא סכום של מספרים אי-שליליים (מספר צמתים), הוא חייב להיות גדול או שווה לאפס.
השוויון יכול להתקיים רק אם שני התנאים הבאים מתקיימים בו-זמנית:
1.
2.
מהתנאי הראשון, כפי שראינו, אי-השוויון הופך לשוויון רק אם לכל בטווח .
התנאי השני אומר שאין צמתים בעומק או יותר ( לכל ). משמעות הדבר היא שגובה העץ הוא לכל היותר .
אם שני התנאים מתקיימים, העץ הוא עץ בינארי מושלם שגובהו . מספר הצמתים בעץ כזה הוא:
אך נתון בשאלה שלעץ יש בדיוק צמתים. זו סתירה.
הסתירה נובעת מההנחה שהתנאים מתקיימים באופן "מושלם". המסקנה הנכונה היא שהחלק הראשון של הסכום חייב להיות קרוב מאוד ל-, אך מעט קטן ממנו, כדי לאפשר לחלק השני להיות חיובי (כלומר, לאפשר קיום צמתים).
נגדיר את (מספר הצמתים בעומק ). המשוואה היא:
המספר הכולל של צמתים הוא .
בכל עץ בינארי, לכל עד לגובה העץ (אם הוא לא מורכב ממספר יערות). באופן כללי, . כמו כן, .
מכאן נובע ש- אינו יכול להיות גדול מדי. אם לדוגמה (במקום 2), אז , וכו'. כלומר, "חוסר" של צומת אחד ברמה גבוהה גורר "חוסרים" רבים ברמות נמוכות יותר.
הביטוי הוא קטן. לדוגמה, אם רק צומת אחד חסר ברמה , התרומה ל- היא . כדי ש- יהיה לפחות 1, נדרש ש-, כלומר , או .
אם , אז בהכרח יש לפחות צומת אחד בכל עומק מ-0 עד . זהו מבנה של שרשרת, שכבר ראינו שלא מקיים את התנאי.
למעשה, ניתן להראות שגובה העץ חייב להיות . ההוכחה המלאה דורשת חסמים יותר הדוקים, אך האינטואיציה היא שהמשקלים הגבוהים ברמות העליונות "מכריחים" את העץ להיות רחב ורדוד ככל האפשר כדי שהסכום יגיע ל-. כל סטייה ממבנה מלא ברמות העליונות יוצרת "חוב" גדול שיש "לפרוע" על ידי הוספת צמתים רבים, אך ערכם של צמתים עמוקים הוא 1 בלבד, מה שמקשה על בניית עץ גבוה מאוד. לכן, המשפחה מאוזנת.