R i c h i e R i c h
New member
שאלה במבני-נתונים
מערך [A[1...n מכיל את כל השלמים מ-0 עד n חוץ מאחד. קל לקבוע מהו המספר החסר בזמן (O(n בעזרת מערך עזר [B[0..n, שבו רושמים את המספרים המופיעים ב- A. אולם בבעיה שלפנינו לא ניתן לגשת אל מספר המאוחסן ב- A באמצעות פעולה אחת. המספרים ב- A מיוצגים בכתיב בינארי, ופעולת הגישה היחידה המותרת היא "הבא את הסיבית ה-j של [A[i". פעולה זו מתבצעת בזמן קבוע. הראה שגם אם משתמשים אך ורק בפעולה זו כדי להשיג מידע מ- A, ניתן לקבוע מהו המספר החסר בזמן (O(n. טוב, אז ישבתי וחשבתי על פתרון יצירתי, בין השאר לסכום את הסיביות של ספרת האחדות/עשרות/וכולי ולהפחית את התוצאה מהסכום שהיה יוצא אילו כל המספרים היו נמצאים. רעיון נוסף היה להמיר כל מספר בינארי למספר שלם רגיל ולפתור כמו שהוצג בשאלה. הבעיה היא שככל שיש יותר מספרים במערך כך יש יותר סיביות בכל תא וזה כמובן משפיע על זמן הריצה....(או שלא?) למישהו יש רעיון?
מערך [A[1...n מכיל את כל השלמים מ-0 עד n חוץ מאחד. קל לקבוע מהו המספר החסר בזמן (O(n בעזרת מערך עזר [B[0..n, שבו רושמים את המספרים המופיעים ב- A. אולם בבעיה שלפנינו לא ניתן לגשת אל מספר המאוחסן ב- A באמצעות פעולה אחת. המספרים ב- A מיוצגים בכתיב בינארי, ופעולת הגישה היחידה המותרת היא "הבא את הסיבית ה-j של [A[i". פעולה זו מתבצעת בזמן קבוע. הראה שגם אם משתמשים אך ורק בפעולה זו כדי להשיג מידע מ- A, ניתן לקבוע מהו המספר החסר בזמן (O(n. טוב, אז ישבתי וחשבתי על פתרון יצירתי, בין השאר לסכום את הסיביות של ספרת האחדות/עשרות/וכולי ולהפחית את התוצאה מהסכום שהיה יוצא אילו כל המספרים היו נמצאים. רעיון נוסף היה להמיר כל מספר בינארי למספר שלם רגיל ולפתור כמו שהוצג בשאלה. הבעיה היא שככל שיש יותר מספרים במערך כך יש יותר סיביות בכל תא וזה כמובן משפיע על זמן הריצה....(או שלא?) למישהו יש רעיון?