נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: איזה אלגוריתם חיפוש יפתור לי את הבעיה?

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
AlonStyle
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 01 March 2005 בשעה 18:12 | IP רשוּם
ציטוט AlonStyle

שלום רב!,

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

עליי לפתור את הבעיה הזאת:

אני צריך לסדר מבנה של ה10 איברים הכי טובים (שערכם הכי גדול) מתוך מספר רב של איברים.

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

ז"א שבכל רגע נתון יהיו לי את ה10 איברים הכי "טובים" במבנה אחד.

אני רוצה לעשות את זה בסיבוכיות זמן הריצה הכי נמוך שאפשר.

כמו כן שלא יהיה מסובך יתר על המידה לתיכנות.

איך אתם ממליצים לפתור את הבעיה הזאת?

תודה!

חזרה לתחילת העמוד הצג את כרטיס החבר של AlonStyle חפש הודעות אחרות של AlonStyle בקר בדף הבית של AlonStyle
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 01 March 2005 בשעה 18:45 | IP רשוּם
ציטוט ניר

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

ככה כל פעם שאתה מקבל איבר אתה עובר על 10 איברים ברשימה בלבד.

הסיבוכיות תהיה
קוד:
O(10n)=O(n)

חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
AlonStyle
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 01 March 2005 בשעה 21:11 | IP רשוּם
ציטוט AlonStyle

יש לי רעיון טוב יותר, תקן אותי אם אני טועה...

חשבתי לעשות זאת עם עץ חיפוש בינארי...ואז כל הסיפור יהיה

קוד:
O(log n)

ואז יהיה לי צומת מיוחדת שהיא תיהיה המצביעה על שורש העץ ויהיה בה גם הנתון של:

כמה צמתים יש בעץ (עד 10)

ומהו האיבר הקטן ביותר (תנאי כניסה לעץ)

מה אתה חושב?

מסובך מידי?

 

תודה!

חזרה לתחילת העמוד הצג את כרטיס החבר של AlonStyle חפש הודעות אחרות של AlonStyle בקר בדף הבית של AlonStyle
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 02 March 2005 בשעה 01:57 | IP רשוּם
ציטוט ניר

מיותר. כי כדי שזה יהיה שימושי, אתה צריך לשמור על העץ מאוזן כל פעם (כי אחרת מתישהוא תקבל רשימה).
מאוזן - נגיד עץ AVL - זה אומר שבכל פעם שאתה מכניס צומת אתה עובר על
log10 צמתים פעמיים - פעם כדי להוציא איבר ישן ועוד פעם כדי להכניס חדש. לוג10 זה בעיגול למעלה 4. כלומר אתה מבצע 8 פעולות לא כולל איזון עץ.

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 02 March 2005 בשעה 01:58 | IP רשוּם
ציטוט ניר

מבחינת סיבוכיות - אולי הפתרון שלך יהיה יעיל יותר. מבחינת פעולות בפועל, הקבוע C המתחבא בחישוב הסיבוכיות, עבור הבעיה הספציפית לא שווה לך
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
AlonStyle
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 02 March 2005 בשעה 18:07 | IP רשוּם
ציטוט AlonStyle

תודה רבה!

בסופו של דבר השתמשתי במערך דינאמי.

יצא אחלה.

חזרה לתחילת העמוד הצג את כרטיס החבר של AlonStyle חפש הודעות אחרות של AlonStyle בקר בדף הבית של AlonStyle
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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