צריך עזרה בפתרון שאלה במבני נתונים (פסיאודו קוד) לגבי עצים בינאריים. - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


Da-Funk

Recommended Posts

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

הצלחתי לעשות את זה בסיבוכיות n^2 בהנחה שמס' האיברים הכללי הוא n . למשהו יש רעיון יותר יעיל ?

קישור לתוכן
שתף באתרים אחרים

אז ככה:

הפונקציה שתכתוב צריכה לקבל 2 ארגומנטים - צומת, והגובה של הצומת הזה.

על מנת לקבל את סכום הגבהים בעץ אתה צריך להפעיל את הפונקציה הזו על שורש העץ ו-0 (כי גובה השורש הוא 0).

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

קישור לתוכן
שתף באתרים אחרים

אם הבנתי את השאלה נכונה - (סכום העומקים של כל הצמתים)

זו התשובה הפשוטה - סיבוכיות 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;
}

קישור לתוכן
שתף באתרים אחרים

אמממ לא הבנתי איך זה עובד.. מה הערך הראשוני ש depth מקבל ? בשאלה ביקשו ממני שהפונ' תקבל ארגומנט יחיד T... עץ..

עריכה: הבנתי מה אתה מחשב ולא הבנת נכון את השאלה.. אתה מחשב עומקים אני צריך גבהים משמע עלה בעץ גובהו1 אבא שלו יהיה בגובה 2 וכו' וכו'.

קישור לתוכן
שתף באתרים אחרים

אפשר עם משתנה גלובלי? כי אם כן אפשר לסרוק את כל העץ, לעלות כל פעם את המונה ב-1, ולשמור את המקסימום במשתנה הגלובלי.

ככה הפונקציה תקבל פרמטר אחד כמו שרצית, והסיבוכיות תיהיה O(n)

קישור לתוכן
שתף באתרים אחרים

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

 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

זה חוקי ברקורסיה ?

קישור לתוכן
שתף באתרים אחרים

עריכה: הבנתי מה אתה מחשב ולא הבנת נכון את השאלה.. אתה מחשב עומקים אני צריך גבהים משמע עלה בעץ גובהו1 אבא שלו יהיה בגובה 2 וכו' וכו'.

אז חישבנו הפוך?

איך אתה מחשב את זה?


0
/\
0 0
/
0

מה הגובה של השורש?

קישור לתוכן
שתף באתרים אחרים

ומה שעשית עד עכשיו זה לרוץ(PRE ORDER) ועבור כל אחד מצאת את הגובה שלו וסכמת עם הבנים שלו?


func(t)

1. if(t!=nil)
1.1 return 0
2. else
2.1. a<-func(right(t))
2.2. b<-func(left(t))
2.3. c<-height(t)
2.4. return a+b+c

2.3 זה o(n)

ולכן כל הפונ זה o(n^2)

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...