עזרה בבחירת מבנה נתונים ליישום פשוט בשפת c++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בבחירת מבנה נתונים ליישום פשוט בשפת c++


FARKASH7

Recommended Posts

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

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

חשבתי להשתמש במבנה map של c++.

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

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

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

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

אולי משהו בסגנון AVL?

הכנסה והוצאה לוגרתמי.

חיפוש גם.

אתה יכול לשמור בכל איבר את מספר האיברים הגדולים ממנו. ולכן יצא O(1)

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

לא ידוע איך map פועל בc++

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

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

חשבתי על AVL, פשוט map היה נראה לי בהתחלה אידאלי עד שנתקלתי בבעיה שפירטתי.

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

טוב כנראה שאעבור לAVL. יש לך המלצה לחבילה בנויה בc++?

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

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

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

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

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

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

ארכיון

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

×
  • צור חדש...