עבודה 3 - בעיה בהוספת איבר

מנהל: TA_Isana

שלח תגובה
elzam
הודעות: 2
הצטרף: 10:36 10/04/2010

עבודה 3 - בעיה בהוספת איבר

שליחה על ידי elzam » 14:39 10/04/2010

היי וסליחה מראש על החפירה,

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

לפי מה שהבנתי מהשיעור, שלבי הוספת איבר הם:
1. המחלקה main פונה לפונקציה insert שבמחלקה - AVLSearchTree.
2.הפונקציה insert שבמחלקה AVLSearchTree - פונה לפונקציה insert שבמחלקה AVLSearchNode
3.הפונקציה insert שבמחלקה AVLSearchNode פונה לפונקציה insert שבמחלקה BinarySearchNode.
4.הפונקציה insert שבמחלקה BinarySearchNode מכניסה את האיבר למקום שבו הוא צריך להיות ומחזירה את התוצאה ל-AVLSearchNode.
5.הפונקציה insert שבמחלקה AVLSearchNode מתקנת את העץ שנוצר לפי כללי ה- AVL.

הבעיה היא שהפונקציה insert בBinarySearchNode שכתבתי, היא פונקציה רקורסיבית ובכל קריאה לרקורסיה, במקום לחזור לאותה insert (שב-BinarySearchNode), מתבצעת בעצם קריאה לinsert שב-AVLSearchNode (משום שהעלה החדש שיצרתי הוא מסוג AVLSearchNode).
ניסיתי ליצור את העלים מסוג BinarySearchNode, אבל משום שהשורש הוא מסוג AVLSearchNode, אז כל פניה לבן ימני/שמאלי קוראת לפונקציה שב-AVLSearchNode (וזו פונקציה שכבר היתה כתובה, שבה עושים casting לקלט ל-AVLSearchNode, מה שגורם לשגיאה).

מה פספסתי??

תודה רבה!

TA_Yoni
הודעות: 236
הצטרף: 13:44 18/10/2009

Re: עבודה 3 - בעיה בהוספת איבר

שליחה על ידי TA_Yoni » 15:41 10/04/2010

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

elzam
הודעות: 2
הצטרף: 10:36 10/04/2010

Re: עבודה 3 - בעיה בהוספת איבר

שליחה על ידי elzam » 19:47 10/04/2010

תודה רבה רבה! :)

sheknabs
הודעות: 31
הצטרף: 17:03 12/11/2009

Re: עבודה 3 - בעיה בהוספת איבר

שליחה על ידי sheknabs » 22:28 12/04/2010

נתקלתי באותה הבעיה ולא כל כך הבנתי את ההצעה?
מה זאת אומרת לחלק את המטודה ל2 מטודות הריי בכל מיקרה שתיהן ירוצו כאשר מטודת ההכנסה תקרא רקורסיבית.
אפשר להסביר את העיקרון הזה יותר טוב?

בר כהן
הודעות: 146
הצטרף: 18:24 22/10/2009

Re: עבודה 3 - בעיה בהוספת איבר

שליחה על ידי בר כהן » 22:35 12/04/2010

sheknabs כתב:נתקלתי באותה הבעיה ולא כל כך הבנתי את ההצעה?
מה זאת אומרת לחלק את המטודה ל2 מטודות הריי בכל מיקרה שתיהן ירוצו כאשר מטודת ההכנסה תקרא רקורסיבית.
אפשר להסביר את העיקרון הזה יותר טוב?
הוא מתכוון, שלא תעשה את ההכנסה ואת התיקון של האיזון באותה הפונקציה הרקורסיבית, אלא תחלק את זה, לפונקציה אחת שתטפל בהכנסת איבר
ופונקציה נוספת שתתקן את העץ שתקרא לה לפי צורך ולא עם כל קריאה רקורסיבית.

sheknabs
הודעות: 31
הצטרף: 17:03 12/11/2009

Re: עבודה 3 - בעיה בהוספת איבר

שליחה על ידי sheknabs » 22:46 12/04/2010

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

בר כהן
הודעות: 146
הצטרף: 18:24 22/10/2009

Re: עבודה 3 - בעיה בהוספת איבר

שליחה על ידי בר כהן » 22:53 12/04/2010

אתה מתכוון שגם בAVL וגם נBSN זו אותה פונקצית insert? נראה לי לא הבנתי איפה הבעיה..

Brk
הודעות: 87
הצטרף: 17:58 25/10/2009

Re: עבודה 3 - בעיה בהוספת איבר

שליחה על ידי Brk » 23:03 12/04/2010

הוא חילק את זה לשני מתודות כבר לפני כן את הinsert הוא עושה בסופו של דבר בBinaryNode ואת הrestructure הוא עושה בAVLsearchnode לפי מה שהבנתי עדיין לא ברור איך פתרתם לו את הבעיה או מה הייתה הבעיה אם אפשר הבהרה? :D

שלח תגובה

חזור אל “- מבני נתונים 2010”