
29-02-2008, 14:22
|
 |
|
|
חבר מתאריך: 05.08.06
הודעות: 2,860
|
|
|
פסאודו קוד...

השתמשתי בסימון A.member ולא בסימון הרגיל member[A] zz כדי שלא יהיה בלבול..
בכמה מילים:
המערך H2 ממען את האינדקס המבוקש לתא בו הוא באמת נשמר
המערך H1 מאמת את זה (כי יכול להיות מספרים כלשהם בH2)
המערך V מכיל את הערכים האמיתיים
c מאחסן את הערך שעד אליו מולאו H1 ו V
שאר המשתנים די ברורים
כשעושים set לתא i, אם הוא עוד לא נוצר אז יוצרים אותו בתא הפנוי הראשון (שנשמר בc) ואז מקדמים את c, ואחרת מציבים בתא הקיים.
כשעושים get בודקים אם תא i קיים ואם כן מחזירים את ערכו, אם לא מחזירים את הערך שאיתו איתחלו את המערך.
קל לראות שזה אכן O(1) עבור כל הפעולות, ו 3n+3 = O(n) zz מקום.
זה הפיתרון הראשון שקפץ לי לראש, יכול להיות שיש פיתרון טוב יותר (אתה מוזמן לשתף, אם אתה מכיר כזה).
*זה בתמונה כי משום מה FF קורס אצלי כל פעם שאני עושה תצוגה מקדימה לתגובה :O
נערך לאחרונה ע"י maxim k בתאריך 29-02-2008 בשעה 14:24.
|