Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

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

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

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

9 HASH סגור ( Open Addressing): משתמשים רק בטבלה ( בלי רשימות Overflow) 01 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 fcabde0123456 Data Structures, CS, TAU - 4.9

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

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

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

13 דוגמאות לפונקציות HASH: 1 ) אם : 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

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

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

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

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 משפט האוסף H הוא אוסף אוניברסלי של פונקציות Hash. הוכחה : - ניקח שני מפתחות שונים כלשהם x y - בלי הגבלת הכלליות נניח x 0 y 0 - נסתכל על בחירה שרירותית של a 1, a 2,…a r טענה : עבור הבחירה הנ ” ל ישנו בדיוק a 0 בודד המקיים (h(x)=h(y. בודד המקיים (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 - לכן יש בדיוק ערכים של {a 0, …a r } שעבורם x ו y מתנגשים ( כל x, y). שעבורם x ו y מתנגשים ( כל x, y). - היות ומס ’ הערכים של {a={a 0, …a n הוא בדיוק, x ו y מתנגשים בדיוק בדיוק, x ו y מתנגשים בדיוק בהסתברות בהסתברות H אוניברסלית Data Structures, CS, TAU - 4.19

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

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

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

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

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

25 פתרון ההתנגשויות - rehash 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). מס ’ ההתנגשויות (i). [ כל מי שנופל על אותו תא מקבל את [ כל מי שנופל על אותו תא מקבל את אותה h i !!] אותה h i !!] Data Structures, CS, TAU - 4.25

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

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

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

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

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

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

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

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

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

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

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

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


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

Similar presentations


Ads by Google