1 of 49

Data Structures – Recitation 6

Shay Golan

1

2 of 49

ניתוח לשיעורין�Amortized Analysis

2

3 of 49

מחסנית משודרגת

  • להלן מבנה נתונים התומך בפעולות הבאות
    • Push – מכניסה איבר לראש המבנה
    • Pop – מוציאה איבר מראש המבנה
    • IsEmpty – מחזירה האם המבנה ריק או לא
    • MultiPop – מוציאה את כל האיברים מהמבנה.

MultiPop(S)

While (S.isEmpty()==false)

S.Pop();

​

    • מהו זמן הריצה של כל פעולה במקרה הגרוע?

3

 

 

 

 

4 of 49

מחסנית משודרגת

  •  

4

5 of 49

מחסנית משודרגת

  •  

5

6 of 49

ניתוח לשיעורין

  •  

6

7 of 49

ניתוח לשיעורין

  • נראה השיעור שלוש שיטות שונות לניתוח לשיעורין של מבני נתונים.
    • שיטת הצבירה.
    • שיטת החיובים.
    • ושיטת הפוטנציאל.

7

8 of 49

שיטת הצבירה

8

9 of 49

שיטת הצבירה

  •  

9

10 of 49

שיטת הצבירה – מחסנית משודרגת

  •  

10

11 of 49

שיטת הצבירה – מחסנית משודרגת

  •  

11

12 of 49

דוגמה נוספת – קידום מונה בינארי

  •  

12

0

0

0

0

0

0

0

0

0

1

1

1

 

 

0

1

2

3

4

5

6

 

 

 

 

13 of 49

קידום מונה בינארי

  •  

13

14 of 49

קידום מונה בינארי

  •  

14

15 of 49

דוגמה נוספת – מערך דינמי

  • המטרה: מערך התומך בהכנסה – ללא הגבלה (למשל למימוש מחסנית).
  • מתחילים בגודל כלשהו ובכל פעם שנגמר המקום מקצים מערך חדש גדול יותר.
  • בכל הקצאה, מעתיקים את כל האיברים מהמערך הישן לחדש.

15

16 of 49

שיטה א'

  •  

16

17 of 49

שיטה ב'

  • הכפלה – נתחיל עם מערך בגודל 2 וכל פעם שיגמר המקום נכפיל את גודל המערך.

17

1

3

4

6

1

3

1

3

4

6

7

12

15

17

1

3

4

6

7

12

15

17

20

25

27

4

18 of 49

שיטה ב'

  •  

18

19 of 49

שיטת החיובים

19

20 of 49

שיטת החיובים – "בנק"

  • בשיטה זו אנחנו מייחסים לפעולות מסוימות עלויות שונות מהעלויות האמיתיות שלהן. ומבנ"ת כביכול מנהל "חשבון בנק" לשימוש עתידי.
  • לפעולות שעלותן האמיתית נמוכה, נשייך עלות נוספת, שתצטבר לשימוש עתידי.
  • לפעולות שעלותן גבוהה, "נשלם" על הפעולות מסכומים שנצברו בפעולות הקודמות.

20

21 of 49

שיטת החיובים למחסנית

  • למחסנית המשודרגת ניתן לשייך את עלויות הפעולה הבאות:

​

​

​

​

  • נראה שבמחירים אלו, נוכל לשלם על כל סדרת פעולות שהיא.

21

​

עלות אמיתית

עלות לשיעורין

Push

1

2

Pop

1

0

MultiPop

כמספר האיברים במחסנית

0

22 of 49

שיטת החיובים למחסנית

  • בעת ביצוע פעולת Push אנו "מביאים" שני שקלים.
    • שקל אחד ישמש אותנו לתשלום על ההכנסה.
    • השקל השני יונח "על האיבר" אותו הכנסנו.
  • הבחנה: בכל זמן, על כל איבר במחסנית יש מטבע של שקל.
  • בעת ביצוע Pop/MultiPop – עלות ההוצאה של איבר תשולם ע"י המטבע שברשותו. ולכן אין צורך בתשלום נוסף.

22

23 of 49

דוגמה נוספת – קידום מונה בינארי

  •  

23

0

0

0

0

0

0

0

0

0

1

1

1

 

 

0

1

2

3

4

5

6

 

 

 

 

24 of 49

קידום מונה בינארי

  •  

24

25 of 49

מונה בינארי

  • נתמחר פעולת Increment (קידום) בעלות של 2 שקלים.
  • נשים לב שבכל פעולה אנחנו מכבים מספר כלשהו של ביטים (רצף הביטים הדולקים מהLSB) ומדליקים ביט יחיד.
  • לכן:
    • שקל אחד ישלם את הדלקת הביט.
    • השקל השני יישאר צמוד לביט שנדלק כעת.

​

25

26 of 49

מונה בינארי

26

0

0

0

0

0

0

0

0

0

1

1

1

 

 

0

1

2

3

4

5

6

 

 

 

 

27 of 49

מונה בינארי

  • הבחנה: ליד כל ביט דולק יש שקל.
  • נימוק – בהתחלה נכון כי אין ביטים דולקים. לאחר מכן, כל ביט שנדלק מוצמד לו שקל.

​

  • מסקנה: ניתן לשלם על כל הכיבויים מהשקלים הצמודים לביטים הדולקים.�לפיכך העלות לשיעורין של כל פעולה היא קבועה.

27

28 of 49

מערך דינמי

  • בכל הכנסה נקבע מחיר לשיעורין של 3 שקלים.
  • להכנסות שאין בהן הכפלה:
    • שקל אחד להכנסה.
    • שקל אחד יישמר עם האיבר הנכנס.
    • שקל אחד יישמר עם האיבר המקביל בחצי השני של המערך.
  • להכנסות עם הכפלה:
    • כל האיברים המקוריים ישלמו על העתקתם (לכולם יש מטבע).
    • שקל אחד ישלם על הכנסת האיבר החדש.
    • שקל אחד יישמר עם האיבר החדש.
    • שקל אחד יישמר עם האיבר הראשון במערך.

28

29 of 49

מערך דינמי

  • הכפלה.

29

1

3

4

6

1

3

4

6

7

12

15

17

1

3

4

6

7

12

15

17

20

25

27

30 of 49

מערך דינמי - הבחנות

  • כל הכנסה (חוץ מהראשונה) למערך מתבצעת לחציו הימני.

​

  • מיד אחר הכפלה החצי הימני של המערך –ריק.
  • בעת הכפלה – החצי הימני של המערך מלא.
  • בין שתי הכפלות, מכניסים את כל איברי החצי הימני.
  • בעת הכנסת כל איברי החצי הימני שמים שקלים על כל איברי המערך
  • לאחר הכנסת החצי הימני של המערך, יהיו שקלים על כל המערך
  • שקלים אלו יכולים לשלם על ביצוע ההכפלה.

30

31 of 49

שיטת הפוטנציאל

31

32 of 49

שיטת הפוטנציאל

  • ביסוס מתמטי של שיטת החיובים.
  • בהשראת מושג הפוטנציאל מפיזיקה, למשל "פוטנציאל גובה".
  • ללא תלות ב"היסטוריה".
    • בין אם הגעתם לגג במדרגות, במעלית או ממסוק – פוטנציאל הגובה שלכם זהה – נקבע לפי גובה הבניין בלבד.

​

  • הרעיון: לכל מצב של המבנה נגדיר "פוטנציאל".

​

32

33 of 49

  • בכל פעולה, הפוטנציאל של המבנה יכול להשתנות.
  • אם הפוטנציאל עלה – העלות של הפעולה צריכה לכלול גם את העלייה הזו.
  • אם הפוטנציאל ירד – אפשר "לקזז" בין ירידת הפוטנציאל לעלות הפעולה.

​

  • הרעיון: עולים במדרגות, יורדים במגלשה.
  • בכל צעד עולים עוד מדרגה או 2. אחת לכמה זמן כשצריך לבצע פעולה כבדה – מתגלשים רחוק במגלשה, על חשבון הפוטנציאל שצברנו.

​

33

34 of 49

שיטת הפוטנציאל

  •  

34

עלות אמיתית

הפרש הפוטנציאלים

35 of 49

שיטת הפוטנציאל

  •  

35

36 of 49

שיטת הפוטנציאל

  •  

36

37 of 49

מחסנית

  •  

37

38 of 49

מערך דינמי

  •  

38

1

3

4

6

7

12

15

17

20

25

27

 

 

 

39 of 49

מערך דינמי - הכנסה

  •  

39

40 of 49

מערך דינמי - הכנסה

  •  

40

41 of 49

מערך דינמי מלא

  •  

41

42 of 49

מערך דינמי מלא

  •  

42

 

 

 

 

 

 

43 of 49

ניתוח-הכנסה

  •  

43

44 of 49

ניתוח - הוצאה

  •  

44

45 of 49

דה-אמורטיזציה�Deamortization

45

46 of 49

דה-אמורטיזציה למערך דינמי

  •  

46

47 of 49

מערך דינמי –דה אמורטיזציה

47

1

3

4

6

1

3

1

3

4

6

7

12

15

17

1

3

4

6

7

12

15

17

20

25

27

4

1

3

4

6

7

12

A

B

A

B

A

B

A

B

48 of 49

מערך דינמי –דה אמורטיזציה

  • טענה: כאשר המערך A מתמלא, כל איבריו כבר הועתקו לB.

​

  • הוכחה:
  • כאשר המערך B נוצר, היו בA בדיוק |A|/2 איברים.
  • A מתמלא אחרי |A|/2 הכנסות.
  • בזמן זה מועתקים 2*|A|/2=|A| איברים ל-B.
  • לכן כל איברי A הועתקו ל-B.

​

48

49 of 49

מערך דינמי –דה אמורטיזציה

  •  

49