Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 - אוסף של איברים - לעיתים מסודרים לינארית 1) לכל a=b,a b 2) טרנזיטיביות: a>c b>c, a>b דוגמה: שלמים, ממשיים, אותיות. - רשום: {1,4}, {תכונה { X - חברות:

Similar presentations


Presentation on theme: "1 - אוסף של איברים - לעיתים מסודרים לינארית 1) לכל a=b,a b 2) טרנזיטיביות: a>c b>c, a>b דוגמה: שלמים, ממשיים, אותיות. - רשום: {1,4}, {תכונה { X - חברות:"— Presentation transcript:

1 1 - אוסף של איברים - לעיתים מסודרים לינארית 1) לכל a=b,a b 2) טרנזיטיביות: a>c b>c, a>b דוגמה: שלמים, ממשיים, אותיות. - רשום: {1,4}, {תכונה { X - חברות: x A, x A - קבוצה ריקה: - בד”כ אותיות קטנות = איברים, גדולות = קבוצות - x y חסר משמעות - תת קבוצה (מוכל): A B - קבוצת על: A B - הכלה ממש: A B - פעולות: A B, A B, A–B Data Structures, CS, TAU - 4.1 פעילויות בסיסיות על קבוצות - מושגים

2 2 UNION (A, B, C) INTERSECTION (A, B, C) DIFFERENCE (A, B, C) MERGE (A, B, C) = disjoint set UNION (לא מוגדר אם הקבוצות אינן זרות) MEMBER (x, A) MAKENULL (A) INSERT (x, A) DELETE (x,A) ASSIGN (A, B) MIN (A) EQUAL (A, B) FIND (X) Data Structures, CS, TAU - 4.2 מבני נתונים אבסטרקטיים לקבוצות

3 3 1. ווקטור ביטים (Cormen: 12.1 - Direct address Table) טוב לקבוצה צפופה Const N type SET = packed array[1…N] of boolean יתרונות: DELETE, MEMBER, INSERT = O(1) UNION, INTERSECTION, DIFF = O(N) N גודלה של הקבוצה האוניברסלית - עבור קבוצה כללית: נבצע MAPPING מאברי התחום ל- INTEGERS חסרונות: אם הקבוצה אינה צפופה Data Structures, CS, TAU - 4.3 ייצוגים של קבוצות

4 4 2) רשימה מקושרת - אין בעיות של גודל קבוצה - האיברים לא צריכים להיות תת קבוצה של קבוצה אוניברסלית סופית. - ביצוע איחוד, חיתוך, וחיסור: אם הרשימות אינן ממוינות - אם ממויינות: - למצוא N איברים: - אבל כולם ביחד: - למצוא איבר בודד: Data Structures, CS, TAU - 4.4 ייצוגים של קבוצות (המשך)

5 5 השיטה: ריצה משולבת על שתי הרשימות. כל פעם מקדמים את הקטן. חיתוך: איחוד:הכנס לאחוד וקדם שניהםקדם קטן והכנס לאחוד חיסור:קדם שניהםקדם קטן (הכנס) טיפול זנבות: צרף השמט צרף (השמט) סיבוכיות:O(N) - כי בכל פעולה מתקדמים באחד Data Structures, CS, TAU - 4.5 ייצוגים של קבוצות (המשך) הכנס לחיתוך וקדם שניהם זהים קדם הקטן אחרת

6 6 מבנה נתונים להחזקת קבוצות שבו רוצים INSERT, DELETE, MEMBER דוגמה: קלט מורכב מ - 1. (‘F’, שם) 2. (‘U’, שם) 3. (?, שם) 1. סמן ח”כ כ”טוב” 2. סמן ח”כ כ“רע” 3. האם “רע” או “טוב”? רוצים לשמור האינפורמציה ולענות על שאילתות מסוג 3 Data Structures, CS, TAU - 4.6 מילון

7 7 1) רשימה מקושרת 2) Bit Vector – מאוד יעיל אם התחום מוגבל וקטן 3) מערך - טוב רק אם אין הרבה דינמיות (שינוי מבנה) אם לא ממויין: INS = O(1) DEL = O(N) MEM = O(N) אם ממויין: INS = O(N) DEL = O(N) MEM = O(logN) Data Structures, CS, TAU - 4.7 יישום המילון

8 8 יישום מערך ( - O(Nווקטור ביטים - O(1) אבל מוגבל בגודל. HASH - בממוצע זמן קבוע ואין מגבלת גודל כמו בווקטור הביטים. HASH פתוח (Chaining) : - נחזיק B סלים שבהם נאחסן את האיברים (Buckets) - גישה לכל סל ב O(1) -חפוש בסל לינארי. - Overflow ברשימות 0 1 B-1 פונקצית :Hash הכנסת איבר:1) חישוב h(x)o 2) הכנסתו ברשימה המתאימה עבור כל ערך h(x), x הוא ערך הפונקציה ונופל בתחום.0, 1, …B-1 Data Structures, CS, TAU - 4.8 HASH TABLE ליישום המילון

9 9 משתמשים רק בטבלה (בלי רשימותOverflow ) 0 1 B-1 Bucket Table אם h(x) גורמת התנגשות: מחשבים (rehash) h 2 (x) ואח”כ h 3 (x) דוגמה פשוטה : Linear Hashing H i (x) = (h(x)+i) mod B a b c d e f 3 4 2 3 6 0 fcabdefcabde 01234560123456 Data Structures, CS, TAU - 4.9 HASH סגור (Open Addressing)

10 10 - בדוק h1(x), h2(x)…o והשווה את האיבר הנמצא עם x - בדיקה עד שנמצא “ריק” (צריך ערך ל”ריק”) - אם השמטות אסורות בישום, אזי ריק x איננו. - אבל: אם השמטות מותרות: ריק איננו! דוגמה: Ins (a, 1), Ins (b, 1), Ins (c, 1) Del (b) Member (c) abcabc 01230123 א) בחיפוש של איבר - לפסוח עליו ב) בהכנסה - ניתן להשתמש בו נצטרך לסמן “deleted” במקום שהושמט Data Structures, CS, TAU - 4.10 בדיקת חברות (MEMBER) ב-HASH סגור

11 11 נתון: B סלים N איברים N/B = load factor - נניח: הכנסה של כל איבר פעם אחת - בממוצע יש בכל סל N/B איברים - לכן כל N/2 האיברים האחרונים דורשים כל-אחד פעולות (הכנסת איבר לרשימה ממויינת) וסה”כ כל N האיברים דורשים: - אזי אםN B סה”כ אם חפוש בשכיחות דומה: Data Structures, CS, TAU - 4.11 ביצועים של Hash פתוח (Chaining)

12 12 הנחות::SIMPLE UNIFORM HASHING (1 לכל מפתח יש אותה הסתברות ליפול בכל תא אחרי שהופעלה עליו פונקצית ה HASH- ללא תלות במפתחות אחרים. 2) פונקצית HASH מחושבת ב O(1) זמן.  בפונקציות HASH ההגדרה “לכל מפתח יש אותה הסתברות ליפול בכל תא" אינה במובן של מפתח (ערך) ספציפי, כי: עבור פונקציה נתונה מפתח נתון ייפול בדיוק בתא אחד! לכל התאים 0, 1, …B-1 כלומר: עבור מפתח אקראי ההסתברות ליפול בכל תא הינה  הגדרה שכן תופסת: Data Structures, CS, TAU - 4.12 ביצועים של Hash פתוח (Chaining) - המשך

13 13 1) אם : אז h(k) = k B מקיימת את הנחה (1) 2) אם k מספרים שלמים: h(k) = k mod B (עדיף לקחת B ראשוני) 3) אם k שלמים: h(k) = B (kA mod 1) החלק השבור של kA B ראשוני, 0<A<1 Knuth ממליץ: Data Structures, CS, TAU - 4.13 דוגמאות לפונקציות HASH

14 14 - משתמש “זדוני” יכול לבחור n מפתחות, כולם לתוך אותו סל. ממוצע זמן חיפוש - נכון עבור כל פונקצית Hash קבועה. - דרך מניעה יחידה: בחירת פונקציה באקראי לא תלויה במפתחות. - בגלל אקראיות האלגוריתם יתנהג שונה בכל ריצה (על אותו input ) input - מסויים אינו יכול “לסבול” באופן תמידי. - עבור כל input ההסתברות לבצועים גרועים קטנה (וזהה לקלטים אחרים דומים) Data Structures, CS, TAU - 4.14 UNIVERSAL HASHING

15 15 H - אוסף סופי של פונקציות Hash שממפות תחום U ל B סלים{0, 1,…B-1} H נקרא אוניברסלי אם: לכל x, y U מספר הפונקציות h Hכל ש h(x )=h(y) הינו B / |H| כלומר: אם פונקציה נבחרת אקראית מ- H אזי סיכוי ההתנגשות של x ו y הינו 1/B משפט אם h נבחרת מאוסף אוניברסלי של פונקציותhash ומשומשת להכניס N מפתחות לתוך טבלה בגודל N B,B, אזי תוחלת מס’ ההתנגשויות הקשורות במפתח x הינה קטנה מ 1. Data Structures, CS, TAU - 4.15 UNIVERSAL HASHING - המשך TAU vs misrad hapniim

16 16 הוכחה: יהי: =C yz אם z, y מתנגשים אחרת 0 1 לכן: E[C yz ] = 1 B )כי z, y מתנגשים בהסתברות 1 ) B יהי C x מס’ ההתנגשויות הכולל של X אזי: Data Structures, CS, TAU - 4.16 הוכחת המשפט תוחלת סכום = סכום תוחלות

17 17 - בחר B ראשוני. - פרק x ל r+1 בתים x=(x 0, x 1,…x r ) - דרישה: ערך כל byte קטן מ B- - יהי a={a 0, …a r } רצף של אברים נלקחים באקראי מהקבוצה {0, 1,…B-1} ונגדיר h a H : Data Structures, CS, TAU - 4.17 בחירת קבוצה אוניברסלית

18 18 האוסף H הוא אוסף אוניברסלי של פונקציות Hash הוכחה: - ניקח שני מפתחות שונים כלשהם x y - בלי הגבלת הכלליות נניח x 0 y 0 - נסתכל על בחירה שרירותית שלa 1, a 2,…a r טענה: עבור הבחירה הנ”ל ישנו בדיוק a 0 בודד המקיים h(x)=h(y) הוכחה: כדי שיתקיים h(x)=h(y) חייב להתקיים: אבל B הוא ראשוני ולכן יש יחידי הפותר את המשוואה a 0 w=z וזה נכון כי אם a 0 ’w=z, a 0 w=z אז (a 0 -a 0 ’)w=B בניגוד לראשוניות של B 0 a 0 B Data Structures, CS, TAU - 4.18 משפט

19 19 - לכן יש בדיוק ערכים של {a 0, …a r } שעבורם x ו y מתנגשים לכל (x,y) - היות ומס’ הערכים של a={a 0, …a n } הוא בדיוק x ו-y מתנגשים בדיוק בהסתברות: H אוניברסלית Data Structures, CS, TAU - 4.19 המשך ההוכחה

20 20 B - סלים N - איברים (כרגע בטבלה) אם התנגשנו סיכוי התנגשות שניה גבוה (כבר נפלנו באזור “מועד”) Hash לינארי: נניח: פונקצית rehash שולחת בצורה אקראית. “אמונה”: זה הטוב ביותר Data Structures, CS, TAU - 4.20 הערכת ביצועים Hash סגור (OPEN ADDRESSING)

21 21 הסתברות לפחות להתנגשות אחת: הסתברות לפחות לשתי התנגשויות: הסתברות לפחות ל i התנגשויות: עבור N, B גדולים: אבל: ממוצע: הצלחה Data Structures, CS, TAU - 4.21 הערכת ביצועים - המשך

22 22 חשבון מסובך ייתן אם נדייק ונחליף ב: כמה עולה להכניס האיברים:1, 2,…M בממוצע: Data Structures, CS, TAU - 4.22 הערכת ביצועים - המשך

23 23 למלא את הטבלה יקח: logB בממוצע לאיבר כלומר: - מילוי הטבלה – פונקציה B - כל שבר שונה מ- 1 – לא תלויים ב- B אבל למלא 90% (M=0.9B) : 10/9 ln10 בדיקת חברות - לאיבר שלא קיים - כמו הכנסה - לאיבר שקיים - כמו הממוצע עד כה קיים: לא קיים: Data Structures, CS, TAU - 4.23 הערכת ביצועים - המשך

24 24 הערה: אם M אחוז (  ) של B – אזי יעילות הכנסה היא: לא תלוי ב-B!!! כלומר: למלא 90% מ 1000 למלא 90% מ- 10 9 שווה!! אבל למלא הכל lnB סיבה: השבריר האחרון של המילוי שבו אורך השרשרות פרופורציונלי למספר הסלים – קובע. Data Structures, CS, TAU - 4.24 הערכת ביצועים - המשך

25 25 1) לינארי: h i (x) = h(x) + i (mod B) בעייתי כי גורם התקבצות. h i (x) = h(x) + C i (mod B) 2) גרוע מאוד מכיוון שיחזור על עצמו !!! אם B מתחלק ב C (או גורם משותף) דוגמא : C=20 B=50 C i = 20, 40, 10, 30, 50, 20... לכן: צריך ש B ו C בלי גורם משותף. אבל - תופעת ההתקבצות לא נפתרת. סיבה: התקבצות נובעת מכך ש h i מחושבת כפונקציה של המקום בטבלה ולא של מס’ ההתנגשויות (i) – כל מי שנופל על אותו תא מקבל את אותה [h i !!] Data Structures, CS, TAU - 4.25 פתרון התנגשויות Rehash

26 26 3) יותר טוב:h i (x) = h(x) + d i (mod B) כש d i הינו פרמוטציה של 1, 2, … B-1 דוגמא : B=5d 1 =4, d 2 =1, d 3 =2, d 4 =3 - מונע שכל מי שנופל על h(x) יפול באותה השרשרת. ( כמובן לא מונע שבעלי h(x) זהה יפלו על שרשרת זהה! ) הערה: סתם פרמוטציה אינה טובה. לדוגמא: d 1 =1, d 2 =2, d 3 =3, d 4 =4 Data Structures, CS, TAU - 4.26 פתרון התנגשויות Rehash - המשך

27 27 - טבלה מלאה בעיה רה-ארגון כשמבנה הנתונים מתמלא (חוקי אצבע): טבלה פתוחה: אם N 2B כדאי להכפיל הגודל ולהעתיק. טבלה סגורה: אם N > 0.9B במקרה של DELETIONS כשכמות המקומות הפנויים קטן [0.1B] Data Structures, CS, TAU - 4.27 רה-ארגון

28 28 (CORMEN CH7, pp140) קבוצות עם הפעולות: INSERT DELETEMIN דוגמה: תור שבו נכנסות פעולות לפי סדר, אבל יוצאות לא ב FIFO אלא לפי עדיפות. “דוגמה מהחיים”: ג’ובים במחשב (עם עדיפויות שונות) נהול חבילות בנתבים יישומים: 1) רשימה מקושרת לא מסודרת הכנסה O(1): שליפה O(N): 2) רשימה מקושרת מסודרת שליפה O(1): הכנסה O(N): (N/2) פעולות Data Structures, CS, TAU - 4.28 תורי עדיפויות PRIORITY QUEUES

29 29 עץ בינארי, מאוזן ככל האפשר (רק ברמה התחתונה חסרים). אבא קטן מבניו. 3 5 6 10 15 9 13 8 10.5 11 12 דוגמה: שימו לב: אין קשר בין צומת לדודיו !!! Data Structures, CS, TAU - 4.29 עץ מוסדר חלקית HEAP

30 30 1. הוסף הערך החדש ב”סוף העץ”. 2. עדכן מבנה העץ ע”י הצפת הערך החדש כלפי מעלה (השווה אותו עם אביו עד שהעץ “מיושב”) טענה אינדוקטיבית: בכל רגע כל צומת (פרט למוכנס) גדול מכל אבותיו הקדמונים. Data Structures, CS, TAU - 4.30 ביצוע INSERT

31 31 1. החזר את ערך השורש. 2. החלף השורש עם העלה האחרון והשמט עלה אחרון. 3. "השקע” את השורש כלפי מטה עד שהעץ יהיה “נורמלי”. בהשקעה - החלף עם הבן הקטן ביותר. Data Structures, CS, TAU - 4.31 ביצוע DELETEMIN

32 32 עץ כמעט מלא נוח ליישם במערך שבו i הוא אב של 2i ושל 2i+1 ביישום זה: - (שורש)MIN נמצא ב- A[1] - עלה אחרון נמצא ב- A[Last] - אינפורמציה משפחתית ע”י הכפלה/חלוקה ב- 2. סבוכיות הפעולות: עץ בינארי - עומקו מס’ הצמתים הינו לכן סיבוכיות של INSERT, DELETEMIN היא: Data Structures, CS, TAU - 4.32 יישום העץ

33 33 מיון איברים - הכנס N איברים - בצע DELETEMIN של N איברים O(NlogN) תור עדיפויות דינאמי. Data Structures, CS, TAU - 4.33 שימושים

34 34 (Many to Many Relationships & Multilists) דוגמה ליחס רב-רב ערכי: אברהם יצחק יעקב יוסף שרה רבקה רחל לאה xxxxxxxx xxxxxxxx xxxxxx CS101 CS102 CS103 CS104 מיפוי בין סטודנטים והקורסים בהם הם משתתפים. רוצים לדעת בד”כ: לכל קורס - רשימת סטודנטים לכל סטודנט - רשימת קורסים Data Structures, CS, TAU - 4.34 יחסים רב-ערכיים ורבי רשימות

35 35 ישום: 1. האינפורמציה כמטריצה בינארית. 2. מיפוי משמות למטריצה טבלת (Hash) בעיה : דלילות המטריצה. דוגמה: 500 קורסים, 10,000 תלמידים. CS101 CS102 CS103 123456123456 אברהם יצחק יעקב 7 6 5 4 3 2 1 1 0 1 0 1 HASH Data Structures, CS, TAU - 4.35 יישום במערך בינארי

36 36 יישום דומה: מטריצה דלילה. אפשרות ב’: החזר מצביע מכל רשומת הרשמה לקורס המתאים ולסטודנט המתאים. סבוכיות: למציאת כל הקורסים של סטודנט הלוקח k קורסים נצטרך לרוץ על-פני k רשימות. אפשרות א’: השתמש באחרון של כל רשימה כדי לפנות חזרה לאבי הרשימה. לשם מציאת האנפורמציה הדרושה: CS101 אברהם CS102CS103 יצחק יעקב רשימת סטודנטים רשימת קורסים Data Structures, CS, TAU - 4.36 פתרון באמצעות Multilist

37 37 במקרים רבים: נוח לבצע חלק מהפעולות במבנה אחד וחלק באחר. לעיתים: שמירת כמה מבנים תייעל ביצועים. Data Structures, CS, TAU - 4.37 מבני נתוני כפולים להגברת היעילות


Download ppt "1 - אוסף של איברים - לעיתים מסודרים לינארית 1) לכל a=b,a b 2) טרנזיטיביות: a>c b>c, a>b דוגמה: שלמים, ממשיים, אותיות. - רשום: {1,4}, {תכונה { X - חברות:"

Similar presentations


Ads by Google