עבור לתוכן

מילוי מערכים לא ידועים מראש בגודלם בצורה יעילה

Featured Replies

פורסם

השפה : c#

אני מנסה למלא 16 מערכים של Double. גודל המערך לא ידוע.

השיטה הראשונה - הקצתי מערך בגודל 60000, ומלאתי אותו (המילוי נעשה אחד אחד - מכל ה-16 ואז "עוברים" לשורה הבאה)

זה טס. הבעיה -נשארתי עם הרבה "תאים רקים".

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

השיטה השניה - לעבוד עם LIST16 ים. זה עושה את הכל "במכה אחת" אבל.... לוקח פי 100 זמן (פעולת ה-ADD) יקרה.

מישהו מכיר שיטה מהירה לבצע את זה במעבר אחד ?

פורסם

מומלץ שתסביר עם יותר פירוט מה בדיוק אתה מנסה לעשות.

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

פורסם
  • מחבר

גודל המערך לא ידוע מראש.

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

60000 זה חסם עליון.

כרגע השיטה הראשונה עובדת לי בלי בעיות ביצועים.

פורסם

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

פורסם
  • מחבר

יכול להיות שהיתה לי טעות במדידה, אבל נראה שלעשות 2000*16 פעמים lst.add(value) לקח משמעותית יותר זמן מלהקצות מראש את הזכרון ולבצע

lst= value

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

(האמת שזה 32 מערכים כפול 2000 איברים שזה 64000 פעולות הוספה)

נערך על-ידי kdani

פורסם

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

אפשר להעביר לבנאי של List מספר שאומר כמה איברים אתה מצפה שיהיו ברשימה (ואז המערך הפנימי שהוא מקצה עבור הרשימה יהיה בגודל הזה). אחרי שסיימת למלא את הרשימה אתה יכול לקרוא לפונקציה TrimExcess שמקטינה את המערך הפנימי לגודל המתאים. אופציה שנייה היא לעשות את זה בעצמך עם מערך (ליצור מערך בגודל 60000, למלא אותו, ואחרי שסיימת להעתיק אותו למערך קטן יותר בגודל המתאים).

  • 2 שבועות מאוחר יותר...
פורסם
  • מחבר

תודה, לא הכרתי את האופציה הזאת ב-LIST. די שימושי.

ארכיון

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

דיונים חדשים