פורסם 2012 במאי 1513 שנים אני צריך לייצר טיפוס בשם set שמסוגל להחזיק קבוצת שלמים בתחום [127....0] ,על המבנה להיות יעיל מבחינת כמות הזכרון הנדרשת לשמירתו (עבודה עם סביות).איך אני עושה את זה הכי יעיל?תודה.
פורסם 2012 במאי 1513 שנים תחשוב איזה "מידע" המבנה הזה בעצם צריך לשמור. מה המידע שצריך להישמר לכל מספר בתחום בין 0 ל-127? תתחיל מפתרון יותר נאיבי ותחשוב איך בדיוק לשפר אותו.
פורסם 2012 במאי 1513 שנים מחבר אני אמור לקבל מהמשתמש רשימה של מספרים שהמספר הכי גבוהה יכול להיות 127 והכי נמוך 0כל איבר בקבוצה מופיע רק פעם אחת.אני אמור לייצר כמה טיפוסים מ set שיכילו מספרים ואז לעשות עליהם פעולות על קבוצות (חיתוך איחוד וכו..)לכן חשבתי על מערך בגודל 127 ואז כל מספר שאני מקבל מהמשתמש אני מכניס למשל 1 בתא של אותו מספרובפעולות אני משתמש במחרוזות ועל ידי שימוש באינדקס לדעת איזה מספרים מופיעים בקבוצה.השאלה אם זה נכון ואם זה יעיל?
פורסם 2012 במאי 1513 שנים בבסיס אתה צודק - מערך בגודל 128 שאתה שם בו 0 עבור כל מספר שלא נמצא בקבוצה, ו-1 עבור כל מספר שכן נמצא בקבוצה.הבעיה היא שזה מאוד בזבזני - אם לדוגמה תשתמש במערך של char אז יש לך המון מקום מבוזבז: כל תא במערך תופס בית שלם, למרות שהוא צריך להחזיק רק ביט אחד (0 או 1). תחשוב איך לייעל את החלק הזה.
פורסם 2012 במאי 1513 שנים על איזה אתה צריך לחשוב בעצמך.כמה מידע צריך לשמור לכל מספר בין 0 ל-127? כמה מידע צריך סה"כ?
פורסם 2012 במאי 1513 שנים מחבר בסופו של דבר שורת פלט לקבוצה תיהיה לכל היותר עד 16 איברים.אז ההגיון אומר לעשות מערך של 16נראה לי שצריך בסופו של דבר לדחוס 128 בייטים ל 16 בייטים.אבל אני לא יודע מה קורה עם המשתמש מכניס מעל ל16 מספרים שונים...
פורסם 2012 במאי 1513 שנים לא הבנתי איך הקלט והפלט קשורים לכאן. אתה צריך לבנות מבנה נתונים שיעמוד בכל שימוש אפשרי: הקבוצה יכולה להכיל שום דבר (0 מספרים) או את כל המספרים (128 מספרים) וכמובן כל קומבינציה אחרת, והיא צריך לעבוד באופן יעיל - בפעולה פשוטה להוסיף איבר לקבוצה, להוריד איבר מהקבוצה או לבדוק אם איבר קיים בקבוצה.איזה מידע צריך להחזיק עבור כל מספר בין 0 ל-127? כמה מידע זה? (ביט? בייט? int?)
פורסם 2012 במאי 1513 שנים מחבר אוקיי אני יודע שזה אמור להיות:#defin size 16typedef unsigned char set [size];יצרתי למשל קבוצה A מהסוג הזה. וקבלתי מהמשתמש 18מספרים שונים. איך זה מוכל במערך?
פורסם 2012 במאי 1513 שנים לא לפחות - בדיוק.אז תחשוב איך אתה יכול באמצעות char אחד להחזיק את המידע עבור 8 איברים (לדוגמה, עבור המספרים 0 עד 7). אפילו בהודעה הראשונה שלך ציינת שזה צריך להיעשות ע"י עבודה עם סיביות.
פורסם 2012 במאי 1513 שנים יש בשפת C כמה אופרטורים שנקראים bitwise operations (למשל, | ו->>).אני ממליץ לך לקרוא עליהם, ובעיקר - על מה אפשר לעשות איתם.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.