תוכן העניינים הקדמה שיטה כללית לכתיבת תוכנית יעילות של תוכנית (סיבוכיות) מדדי סיבוכיות נוספים משוואת נסיגה Recurrences - - Substitution הצבה איטרציה The Master Method 1

Download Report

Transcript תוכן העניינים הקדמה שיטה כללית לכתיבת תוכנית יעילות של תוכנית (סיבוכיות) מדדי סיבוכיות נוספים משוואת נסיגה Recurrences - - Substitution הצבה איטרציה The Master Method 1

‫תוכן העניינים‬
‫הקדמה‬
‫שיטה כללית לכתיבת תוכנית‬
‫יעילות של תוכנית (סיבוכיות)‬
‫מדדי סיבוכיות נוספים‬
‫משוואת נסיגה ‪Recurrences -‬‬
‫‪ - Substitution‬הצבה‬
‫איטרציה‬
‫‪The Master Method‬‬
‫‪1‬‬
‫שפה‬-‫כתיבת הפתרון בפסאודו‬
Procedure greedy (var G:GRAPH;
var newclr:SET)
{greedy assigns to newclr a set of vertices
that may be given the same color}
begin
(1) newclr :=
(2) for each uncolored vertex v of G do
(3)
if v is not adjacent to any vertex in
newclr then begin
(4)
mark v colored
(5)
add v to newclr
end;
end;
end; {greedy}
2
Data Structures, CS, TAU - 2.2
‫עידון האלגוריתם להשגת תוכנית‬
.)3 ‫ מציאה אם צומת שכן (שורה‬:‫דוגמא‬
(if v is not adjacent to any vertex in newclr then begin)
(3.1) found := false;
(3.2) for each vertex W in newclr do
(3.3)
(3.4)
if there is an edge between V and W in G then
found := true;
(3.5) if found = false then begin
(4)
.
. (5)
.
.
.
3
Data Structures, CS, TAU - 2.1
‫שיטה כללית לכתיבת תוכנית‬
‫מבנה נתונים‬
‫מבנה נתונים מופשט‬
‫מודל מתמטי‬
‫תכנית ( ‪C,‬‬
‫‪(…C++, Java,‬‬
‫תכנית בפסאודו‪-‬שפה‬
‫אלגוריתם לא פורמלי‬
‫מבנה נתונים מופשט = ‪* Abstract Data Type-ADT‬‬
‫= מודל מתמטי עם אוסף הפעולות‬
‫דוגמא‪ :‬השלמים עם פעולות ‪.+ ,-‬‬
‫דוגמא‪ :‬קבוצה של שלמים עם פעולות‬
‫‪Union, Intersection, Difference‬‬
‫* משמשים תפקיד דומה לשגרות‬
‫(שגרות ‪ -‬תפקיד תפעולי‪ ,‬מבני נתונים ‪ -‬תפקיד מבני)‬
‫‪4‬‬
‫‪Data Structures, CS, TAU - 2.3‬‬
‫‪Abstract Data Types‬‬
‫מטרה‪ -‬לספק כלי עבודה נוח למתכנת (בקבוצות “נוח” להגדיר איחוד‪ ,‬חיתוך…)‬
‫אמצעי‪ -‬הפרדה בין הגדרת הפעולות ובין ישומן‬
‫חוזה בין‬
‫“מתכנת העל”‬
‫ומיישם מבנה‬
‫הנתונים‬
‫תכנות‪:‬‬
‫‪SET‬‬
‫‪‬‬
‫‪‬‬
‫ממשק‬
‫ישום‪:‬‬
‫‪= SET‬‬
‫דוגמא‪:‬‬
‫בדוגמת הצביעה ‪ -‬שימוש ברשימה ‪LIST‬‬
‫פעולות‪:‬‬
‫‪=‬‬
‫‪=‬‬
‫)‪1. MAKENULL (newclr‬‬
‫)‪2. W:= FIRST (newclr‬‬
‫)‪3. W:= NEXT (newclr‬‬
‫)‪4. INSERT (v, newclr‬‬
‫‪5‬‬
‫‪Data Structures, CS, TAU - 2.4‬‬
‫דוגמא ב‪GRAPH-‬‬
‫‪ .1‬השג הצומת הראשון הלא צבוע‬
‫‪ .2‬בדוק האם יש קשת בין ‪ 2‬צמתים‬
‫‪ .3‬סמן צומת כצבוע‬
‫‪ .4‬השג את הצומת הבא‬
‫‪.‬‬
‫‪( .‬הוסף צומת‪ ,‬השמט קשת…)‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫ישום‪:‬‬
‫* תרגום לשפת התכנות‬
‫* תלוי בשפת התכנות ובמשתנים שלה‬
‫* ניתן להשתמש רק במבנים הקיימים בשפה‬
‫* השפה צריכה להרשות מבנים מופשטים‬
‫‪6‬‬
‫‪Data Structures, CS, TAU - 2.5‬‬
‫יעילות של תוכנית (סיבוכיות(‬
‫מטרות בתכנית‪:‬‬
‫קלות בתכנות‪ ,‬נוחות באחזקה‪ ,‬יעילות (מהירות וזיכרון)‬
‫איכות‪:‬‬
‫מהירות‪:‬‬
‫* מס’ הפעולות‪ ,‬סוג הפעולות‪.‬‬
‫* פונקציה של סוג הקלט‪ ,‬סוג מחשב‪ ,‬קומפיילר‬
‫* ממוצע‪ ,‬מקרה גרוע ביותר‬
‫* חישוב כפונקציה של גודל הבעיה‬
‫(אורך הקלט)‪n :‬‬
‫* סדר גודל ‪BIG O -‬‬
‫)) ‪T ( n )  O ( f ( n‬‬
‫‪T ( n )  c  f ( n ) n  n0‬‬
‫דוגמא‪:‬‬
‫‪2‬‬
‫‪ -‬קיים ‪ c‬ו‪n0-‬‬
‫כך ש‪:‬‬
‫)‪T ( 0)  1, T (1)  4, ....T ( n )  ( n  1‬‬
‫‪2‬‬
‫) ‪ O(n‬‬
‫‪2‬‬
‫‪ 4n‬‬
‫‪2‬‬
‫)‪( n  1‬‬
‫‪7‬‬
‫‪Data Structures, CS, TAU - 2.6‬‬
‫דוגמא‬
‫דוגמא‬
‫‪:‬‬
‫‪T (n)  3n  2n‬‬
‫‪3‬‬
‫‪T (n)  5n n‬‬
‫‪2‬‬
‫‪3‬‬
‫) ‪ T (n)  O(n‬‬
‫‪3‬‬
‫משמעות סדרי גודל‪:‬‬
‫‪2‬‬
‫‪5n‬‬
‫‪2‬‬
‫‪n3‬‬
‫‪n‬‬
‫‪2‬‬
‫‪3000‬‬
‫‪100 n‬‬
‫‪2000‬‬
‫‪1000‬‬
‫חשוב מבחינת פיתוח מחשבים‪:‬‬
‫אם מחשב מהיר פי ‪ - 10‬מה תהיה הגדלת הבעיה?‬
‫‪8‬‬
‫‪Data Structures, CS, TAU - 2.7‬‬
64 ‫ מחשב מהיר פי‬:‫דוגמא‬
O ( n ) : T ( n )  c  n;
2
2
O(n ) : T (n)  c  n ;
3
3
n 
O(n ) : T (n)  c  n ;
n
n
T
n 
n
c;
T ;
c
n  3T ;
c
n
64
 8 T
64
n
64
T
T
 64
c
c
 43 T
c
T
O (2 ) : T ( n )  c  2 ; n  log ( c ); n
 log( c )  6
2
64
T1 (n)  O( f (n))
T2 (n)  O( g (n))
‫חישובי זמן ריצה‬
T1  T2  O(max[f (n), g (n)])
T1  T2  O( f (n)  g (n))
9
Data Structures, CS, TAU - 2.8
‫דוגמא‬
Procedure bubble
var i, j, temp : integer
begin
(1) for i := 1 to n-1 do
(2)
for j := n downto i+1 do
(3)
if A[j-1] > A[j] then begin
{swap A[j-1] and A[j]}
(4)
temp := A[j-1];
(5)
A[j-1] := A[j];
(6)
A[j] := temp;
end
end; {bubble}
n 1
2
2
n
n
n
 ( n i )  ( n  1) 2 
2  2  O(n )
i 1
10
Data Structures, CS, TAU - 2.9
)‫ חישוב עצרת (רקורסיבי‬:‫דוגמא‬
Function fact (n: integer)
begin
(1) if n<=1 then
(2) fact := 1
else
(3) fact := n*fact(n-1)
end; {fact}
d
n 1
c + T(n-1)
n 1
T(n) =
T(n) = 2c+T(n-2)
n  2
T(n) = 3c+T(n-3)
n  3
T(n)
.
.
.
=.
c(n-1)+T(1)=c(n-1)+d=O(n)
11
Data Structures, CS, TAU - 2.10
‫מדדי סיבוכיות נוספים‬
f (n)  ( g (n)) :
O( f (n))
‫חסם עליון‬
( f (n))
( f (n))
‫חסם תחתון‬
exist c, n0
such that
0  c g ( n )  f ( n )
f (n)  ( g (n)) :
‫חסם עליון ותחתון‬
n  n0
f(n): exist c1, n0, c2
such that
0c1 g ( n )  f ( n )  c2  g ( n )
n  n0
12
Data Structures, CS, TAU - 2.11
‫מדד ‪ o‬קטן‬
‫‪ O‬יכול להיות ‪( tight‬הדוק) או לא‪.‬‬
‫) ‪2n  O(n‬‬
‫‪2‬‬
‫) ‪4n  O(n‬‬
‫‪2‬‬
‫הדוק‬
‫לא הדוק‬
‫‪2‬‬
‫‪ - o‬מסמן חסמים שאינם הדוקים אסימפטוטית‬
‫‪for any c>0 there exists n0>0‬‬
‫‪such that‬‬
‫‪0  f ( n )  c g ( n ) n  n0‬‬
‫החסם‬
‫‪f ( n)  o( g ( n)) :‬‬
‫תופס לכל ה ‪-C‬ים!‬
‫)‪f(n)<cg(n‬‬
‫אינטואיציה‪ :‬אסימפטוטית )‪f(n‬‬
‫היא לא משמעותית לעומת )‪g(n‬‬
‫‪13‬‬
‫‪Data Structures, CS, TAU - 2.12‬‬
‫ציור מדדי סיבוכיות‬
f ( n)O( g ( n))
f ( n)( g ( n))
cg(n)
f(n)
f(n)
cg(n)
n0
n0
f ( n)( g ( n))
f ( n)  o( g ( n))
cg(n) c1g(n)
c2g(n)
f(n)
c2g(n)
f(n)
c1g(n)
n0
n0
14
Data Structures, CS, TAU - 2.13
‫חומר קריאה‬
CLR 1, 2.1-2.2
Growth of functions ‫להבין את‬
)‫(גם מושגים שלא עברנו בכיתה‬
1.
2.
15
Data Structures, CS, TAU - 2.14
Recurrences - ‫משוואת נסיגה‬
– Recurrence
‫שיוויון) שמתארת פונקציה ע”י ערכים קטנים של הפונקציה‬-‫משוואה (אי‬
T (n) 
(1)
2T ( n )  (n)
2
1) Substitution
:‫דוגמא‬
n=1
n>1
:‫שיטות לפתרון‬
2) Iteration
3) Master
16
Data Structures, CS, TAU - 2.15
)‫ (הצבה‬SUBSTITUTION .1
 2)  n,
T ( n )  2T ( n
:‫דוגמה‬
T (1)  1
:‫הוכח‬
T ( n)O( n logn)
.‫ גדול‬c ‫ עבור‬T ( n)cn log n
‫ נחש פיתרון‬.‫א‬
‫ הוכח באינדוקציה‬.‫ב‬
:‫צ”ל‬
 2  ‫ נניח נכונות לגבי‬.1
n
:‫לכן‬
log(
)
2
n
T(

n
2

)c

n
2



 2  2
 cn log  n   n
2
T ( n ) 2[ c
n
log( n
:‫הוכחה‬
)] n :‫הצבה‬
cnlogncnlog 2n
cnlogncnn
cnlogn
(c1)
17
Data Structures, CS, TAU - 2.16
‫‪ .2‬הוכח נכונות לגבי תנאי הגבול‬
‫בדוגמא‪:‬‬
‫בעיה‬
‫‪T (1)  1  c log 1‬‬
‫עקיפת הבעיה‪ :‬התחל ב‪ n-‬גבוה יותר‪:‬‬
‫‪c  2‬‬
‫‪T (2)2T (1)24c2log2‬‬
‫‪T (3)2T (1)35c3log3‬‬
‫ולכן נכון עבור כל ‪n2‬‬
‫נקודות חשובות‪:‬‬
‫‪ )1‬בחירת ‪ - c‬בד”כ ניתן לבצע בסוף הוכחת האינדוקציה‪.‬‬
‫‪ )2‬אם ההוכחה לא עובדת ‪ -‬יתכן והטענה לא נכונה‪.‬‬
‫‪ )3‬אסור לערבב ‪ O‬בהוכחה‪.‬‬
‫‪18‬‬
‫‪Data Structures, CS, TAU - 2.17‬‬
‫דוגמא‬
 2)  n,
T ( n )  2T ( n
T (1)  1
T ( n)O( n)
 2
T( n
 2
)  c n
 2
T ( n ) 2( c n
) n
:‫יכולנו לטעון‬
:‫ולהוכיח‬
:‫ע"ס הנחה‬
:‫הצבה‬
cnn
O(n)
!‫לא נכון‬
19
Data Structures, CS, TAU - 2.18
‫ שיטת האיטרציה‬.2
 4
T ( n ) 3T ( n
) n,
T (1) (1) :‫דוגמא‬
 4
 n 3(  n  ) 9T (  n  )
4
16
 n  3( n )  9n   27T ( n ) 
4
16
64
T ( n ) n 3T ( n
:‫הדגמת השיטה‬
)
log4 n
...3
(1)
T ( n)n3n 9n  27 n
4
16
64

log
3
i
4 )
n  ( 3 ) ( n
4
i 0
4nO( n)
O(n)
20
Data Structures, CS, TAU - 2.19
THE MASTER METHOD .3
T ( n )  aT ( n )  f ( n )
b
‫ לנוסחאות‬Cookbook ‫שיטת‬
Master Thm
‫ קבועים‬a1, b1 :‫יהיו‬
‫ פונקציה‬- f ( n )
- ‫מוגדרת על שלמים לא שליליים‬: T ( n )
T ( n )  aT ( n )  f ( n )
b
n
n
‫או‬
 b  ‫הינו‬
 b
T ( n )  ( n log b a )
T ( n )  ( n log b a log n )
b
:‫כאשר‬
:‫ יכולה להחסם‬T ( n ) ‫אזי‬
f ( n )O ( nlog b a  ) ‫) אם‬1
:
f ( n )  ( nlog b a )
:
:
T ( n ) ( f ( n ) )
n
‫) אם‬2
f ( n ) ( nlog b a  ) ‫אם‬
af ( n ) cf ( n )
:‫ו‬
b
‫ים הגדולים‬-n‫ כלשהו וכל ה‬c ‫ל‬
Data Structures, CS, TAU - 2.20
)3
21
1 ‫דוגמא‬
a
T ( n ) 9T ( n
logb a
n
n


b
f(n)
3
log3 9
) n
2
n
log3 91
f ( n ) O ( n
)
T ( n )  ( n
2
T ( n)  ( n
)
log b a
)
f ( n )O ( nlog b a  )
22
Data Structures, CS, TAU - 2.21
2 ‫דוגמא‬
a
b
T ( n ) 1T ( 2 n
n
logb a

 n
2 ‫מקרה‬
log 3 1
2
f(n)
3
 n
) 1
0
1
( f ( n)  (1))
 T ( n)(1logn)(logn)
T ( n )  ( n log b a log n )
f ( n )  ( nlog b a )
23
Data Structures, CS, TAU - 2.22
3 ‫דוגמא‬
b
a
T ( n ) 3T ( n
f(n)
)  n log n
4
logb a
log4 3
0
.
793
n
n
O ( n
)
1
f ( n )  ( n )
T ( n ) ( f ( n ) )
 3 ‫מקרה‬
af ( n
b
f ( n: ) ( nlog b a  )
af ( n ) cf ( n )
b
:‫ גדול‬n ‫עבור‬
) 3n
4
log( n
 cf ( n )
)  3 n log n
4
4
(c 3
4
)
 T ( n)( nlogn)
24
Data Structures, CS, TAU - 2.23