פורסם 2006 באוקטובר 1719 שנים והשאלה היא: כתוב פונ' בפסיאודו קוד (יעילה ביותר מבחינת סיבוכיות זמן ריצה) שמקבלת עץ בינארי כלשהו T ומחזירה את סכום הגבהים של כל הצמתים בעץ T הצלחתי לעשות את זה בסיבוכיות n^2 בהנחה שמס' האיברים הכללי הוא n . למשהו יש רעיון יותר יעיל ?
פורסם 2006 באוקטובר 1719 שנים אתה יכול לעשות את זה בברקורסיה. תצייר על דף צומת מסויימת ותראה למה שווה הגובה שלה.
פורסם 2006 באוקטובר 1719 שנים מחבר עשיתי ברקורסיה אבל אני צריך את סכום הגבהים... הרקוריסה שהצעת נהרסת כשעולים יותר מרמה אחת...
פורסם 2006 באוקטובר 1719 שנים אז ככה:הפונקציה שתכתוב צריכה לקבל 2 ארגומנטים - צומת, והגובה של הצומת הזה.על מנת לקבל את סכום הגבהים בעץ אתה צריך להפעיל את הפונקציה הזו על שורש העץ ו-0 (כי גובה השורש הוא 0).עכשיו נסה לחשוב איך הפונקציה תקרא לבנים של הצומת בדיוק...
פורסם 2006 באוקטובר 1719 שנים מחבר אז ככה כדרישה : נניח ושם הפונ' הוא sum_heights אז הקריאה לפונ' צריכה להיות עם ארגומנט יחיד T באופן הבא .. sum_heights(T) אז מה שהצעת לא יעזור. תודה בכל אופן.
פורסם 2006 באוקטובר 1719 שנים אני לא חושב שתוכל עם ארגומנט יחיד.אם אתה חייב, תכתוב את הפונקציה שהצעתי כפונקציית עזר ופשוט תקרא לה מתוך הפונקציה שלך.
פורסם 2006 באוקטובר 1719 שנים אם הבנתי את השאלה נכונה - (סכום העומקים של כל הצמתים)זו התשובה הפשוטה - סיבוכיות o(n)int DepthSum(Node n,depth){ if (n=null) return 0; leftsum=DepthSum(n.left,depth+1);rightsum=DepthSum(n.right,depth+1); return depth+leftsum+rightsum;}
פורסם 2006 באוקטובר 1719 שנים מחבר אמממ לא הבנתי איך זה עובד.. מה הערך הראשוני ש depth מקבל ? בשאלה ביקשו ממני שהפונ' תקבל ארגומנט יחיד T... עץ..עריכה: הבנתי מה אתה מחשב ולא הבנת נכון את השאלה.. אתה מחשב עומקים אני צריך גבהים משמע עלה בעץ גובהו1 אבא שלו יהיה בגובה 2 וכו' וכו'.
פורסם 2006 באוקטובר 1719 שנים אפשר עם משתנה גלובלי? כי אם כן אפשר לסרוק את כל העץ, לעלות כל פעם את המונה ב-1, ולשמור את המקסימום במשתנה הגלובלי.ככה הפונקציה תקבל פרמטר אחד כמו שרצית, והסיבוכיות תיהיה O(n)
פורסם 2006 באוקטובר 1719 שנים מחבר משתנה גלובלי זה רעיון שעלה לי לראש כרגע.. ואפילו אם אסור תמיד אפשר איזה פויינטר לתור ולדחוף לו כל פעם את הגובה של העץ ובסוף לעשות עוד לולאה משהו בסגנון הזה sum_heights(T) create Q mark_heights(T,Q) ... ... ... פה תישב עוד לולאה שתסכום את איברי התור (לא מקוננת)התת פונ' שתסמן את הגבהים mark_heights(T,Q) x=root(T) if (x==null) return a = mark_heights(Tleft(x),Q) b =mark_heights(Tright(x),Q) c= max(a,b) +1 enqueue (Q,c) return c זה חוקי ברקורסיה ?
פורסם 2006 באוקטובר 1719 שנים עריכה: הבנתי מה אתה מחשב ולא הבנת נכון את השאלה.. אתה מחשב עומקים אני צריך גבהים משמע עלה בעץ גובהו1 אבא שלו יהיה בגובה 2 וכו' וכו'.אז חישבנו הפוך?איך אתה מחשב את זה? 0 /\ 0 0 / 0מה הגובה של השורש?
פורסם 2006 באוקטובר 1719 שנים ומה שעשית עד עכשיו זה לרוץ(PRE ORDER) ועבור כל אחד מצאת את הגובה שלו וסכמת עם הבנים שלו?func(t)1. if(t!=nil)1.1 return 02. else2.1. a<-func(right(t))2.2. b<-func(left(t))2.3. c<-height(t)2.4. return a+b+c2.3 זה o(n)ולכן כל הפונ זה o(n^2)
פורסם 2006 באוקטובר 1819 שנים מחבר כמעט.. הקוד שנתתי קודם דיי מסביר מה עשיתי... רק שאני לא יודע אם זה חוקי לתת פויינטר לתור ברקורסיה..
פורסם 2006 באוקטובר 1819 שנים 1) זה O של N 2) אני חושב שכדי לשבור את הראש עם התרגיל הזה בגלל שהוא חשוב ! לפני שאתה פונה לקהילה ....זה תרגיל חשוב ברקורסיה !!!3) רמזים אפשר לתת ...BFS או חברו הטוב ..
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.