Upload
buidan
View
222
Download
0
Embed Size (px)
Citation preview
Matlabמבוא למחשב בשפת
זמן( סיבוכיות)יעילות
.דורון משולםידי -נכתב על .מכון טכנולוגי לישראל –כל הזכויות שמורות לטכניון ©
2 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב 9תרגול
(סיבוכיות)יעילות
,על פי ויקיפדיה•
משאבי כלי מדד מתמטי שלסיבוכיות היא , במדעי המחשב"
המשאב . מחשב הנחוצים לפתרון בעיה נתונה באמצעות המערכת
כלומר נבחן משך הזמן הנחוץ לשם ביצוע , זמן הריצה העיקרי הנבחן הוא
."האלגוריתם
כתלות בגודל הקלט: תוספת.
נרצה אפוא למצוא , 𝑛עבור אלגוריתם המקבל קלט באורך , כלומר•
.המתארת את זמן הריצה שלו 𝑓(𝑛)פונקציה
.𝑛וכמותן כתלות ב , אנו נספור את הפעולות האטומיות בתוכנית•
3 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב 9תרגול
𝑶הסימון ⋅
𝑔כאשר עוסקים בשאיפה של • 𝑛 מוגדרת הקבוצה , לאינסוף
𝑂 𝑔 𝑛 בתור אוסף כל הפונקציות𝑓 𝑛 עבורן קיימים הקבועים
𝑛0, 𝑐 , כך שלכל𝑛 > 𝑛0 מתקיים ,𝑓 𝑛 < 𝑐 ⋅ 𝑔 𝑛.
חלק מחומר הקורס אינהההגדרה , שימו לב.
gהיא קטנה יותר מ , fהולכים וגדלים שמקבלת nעבור ערכי , כלומר•
.cעד כדי כפל בקבוע כלשהו
ניתן לומר גם שg חוסמת אתf בשאיפה לאינסוף עד כדי כפל בקבוע.
.gשל מסדר גודל היא לכל היותר fש , נאמר אם כן•
:לדוגמה•
אם𝑔 𝑛 = 1, 𝑓 𝑛 = 𝑛0אז עבור , 5 = 0, 𝑐 = מתקיים 6𝑓 𝑛 = 5 < 6 = 6 ⋅ 1 = 6 ⋅ 𝑔 𝑛 = 𝑐 ⋅ 𝑔 𝑛
עבור𝑓 𝑛 = 𝑛2 + 𝑛 + ? fמהו סדר הגודל של , 25
𝑶זמן קבוע 𝟏
הפונקציה תקיים•
𝑓 𝑛 = 𝐶
.פעולה שביצועה אינו תלוי בגודל הקלט :מסקנה•
𝑂מצא את האיבר המינימלי ב. ממוין Aנתון מערך :דוגמה• 1.
if A(1) < A(end)
ret = A(1);
else
ret = A(end);
, כפל, חיבור, כגון השמה" אטומיות"אנו סופרים פעולות , שימו לב•
גישה למערך באינדקס מסויים כפעולות שקורות בזמן , השוואה, חילוק𝑂קבוע 1.
𝑶זמן לוגריתמי 𝐥𝐨𝐠 𝒏
הפונקציה תקיים•
𝑓 𝑛 = 𝐶0 ⋅ log 𝑛 + 𝐶1
ממש את )מצא את היצוג הבינארי שלו , nבהנתן מספר :תרגיל•
dec2bin)
:פתרון•function res = my_dec2bin(n)
s = ceil(log(n)/log(2));
res = zeros(1, s)
while n>0
res(i) = mod(n, 2);
i = i+1;
n = n/2;
end
𝑶זמן לוגריתמי 𝐥𝐨𝐠 𝒏
או , Aב xמצא את האינדקס של . xוערך ממוין Aנתון מערך :בעיה•
.אחרת, ערך שגיאה
.חיפוש בינארי :פתרון•
.זהו אלגוריתם יחודי שיש לדעת למבחן :שימו לב•
function id = binarySearch(a, x)
n=length(a); p=1; q=n;
while p<=q
m=floor((p+q)/2);
if a(m)==x; break;
elseif a(m)<x; p=m+1;
else q=m-1;
end
end
if p>q; id=-1;
else id=m;
end
7 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
חיפוש בינארי
𝑶זמן לינארי 𝒏
הפונקציה תקיים•
𝑓 𝑛 = 𝐶0 ⋅ 𝑛 + 𝐶1
או ערך , Aב xמצא את האינדקס של . xוערך Aנתון מערך :דוגמה•
. אחרת, שגיאה
.חיפוש ממצה :פתרון•function ret = find(A, x)
ret = -1;
n = length(A);
for i=1:n
if x == A(i)
ret = i;
end
end
---> Break נוסיף
מיזוג – זמן לינארי
.A, B, שני מערכים ממויינים :קלט•
.Bו Aהמכיל את אברי Cמערך ממויין :פלט•
ובכל פעם נכניס את הערך , נעבור על שני המערכים במקביל :פתרון•
.Cהקטן ביותר לתא הנוכחי במערך
.זהו אלגוריתם יחודי שיש לדעת למבחן :שימו לב•
function C = mergeArrays(A, B)
idx1=1; idx2=1; idx3=1;
n1=length(A); n2=length(B);
C(n1+n2)=0;
while idx1<=n1 & idx2<=n2
if A(idx1) <= B(idx2)
C(idx3) = A(idx1); idx1=idx1+1;
else
C(idx3) = B(idx2); idx2=idx2+1;
end
idx3=idx3+1;
end
if idx1<=n1
C(idx3:end) = A(idx1:n1);
else
C(idx3:end) = B(idx2:n2);
end
10 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
מיזוג
הפונקציה תקיים•
𝑓 𝑛 = 𝐶0 ⋅ 𝑛2
כך שעבורה מתקיים , Bחשב את המטריצה , Aעבור מטריצה :דוגמה•
𝐵 𝑖, 𝑗 = 𝐴 𝑖, 𝑗 𝑖+10𝑗.
11 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
𝑶זמן ריבועי 𝒏𝟐
כתבו פונקציה הסוכמת את אברי מטריצה משולשת עליונה ריבועית •
.ונתחו את הסיבוכיות שלהfunction ret = sumUp(A)
n = size(A, 1);
ret = 0;
for i=1:n
for j=i:n
ret = ret + A(i, j);
end
end
end
𝑓 𝑛 = 1
𝑛
𝑗=𝑖
𝑛
𝑖=1
= 𝑛 − 𝑖 + 1
𝑛
𝑖=1
= 𝑛2 + 𝑛 − 𝑖
𝑛
𝑖=1
= 𝑛2 + 𝑛 −𝑛 𝑛 + 1
2=𝑛 𝑛 + 1
2= 𝑂 𝑛2
12 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
תרגיל
𝐴𝑚×𝑛בתרגולים קודמים כתבנו פונקציה המכפילה בין מטריצה •
.נתחו את יעילות הפונקציה. 𝐵𝑛×𝑙למטריצה
:תזכורת•function ret = matrix_mult(A, B)
if ~isequal(size(A, 2), size(B, 1))
ret=-1;
disp(‘Inner matrix dimensions must agree’);
return;
end
ret = zeros(size(A,1), size(B, 2));
for i=1:size(A, 1)
for j=1:size(B, 2)
for k=1:size(A, 2)
ret(i, j) = ret(i,j) + A(i,k)*B(k,j);
end
end
end
end
13 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
תרגיל
הפונקציה תקיים•
𝑓 𝑛 = 𝐶0 ⋅ 𝛼𝛽⋅𝑛
:דוגמאות•
הצג את כל התמורות של סדרה בינרית באורךn.
ערכו של איבר מהוn חישוב ישיר על פי הגדרת )י 'בסדרת פיבונצ
(.הסדרה
14 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
𝑶זמן אקספוננטיאלי 𝜶𝜷⋅𝒏
nכדי להגיע אליה עליו לעבור . פורץ מנסה להגיע אל תוך כספת•
' הפורץ יכול להכנס דרך חלון א. כאשר בכל קיר יש שתי חלונות, קירות
וגם שם הוא )ואז הוא ממשיך לקיר הבא , בכל קיר' או דרך חלון ב
הציגו קלט המאפשר להסיק את (. 'לחלון ב' עומד בבחירה בין חלון א
.חד ערכי-כל המסלולים האפשריים באופן חד
.נוכל לדעת ישירות את המסלול, בהינתן הדפסה כלשהי, כלומר•
15 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
𝑶זמן אקספוננטיאלי –תרגיל 𝜶𝜷⋅𝒏
ולהדפיס את , 𝑁יש לספור את מספר המסלולים האפשריים :הבחנה•
ע ועל נוכל להתאים מספר "אז באופן חח. 𝑁כל המספרים עד ל
.למסלול
function ret = routes(n)
for i=1:2^n
disp(i);
end
בהמשך נפתור באמצעות רקורסיה וממש נציג את כל המסלולים •
.האפשריים
16 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
𝑶זמן אקספוננטיאלי 𝜶𝜷⋅𝒏
:נתחו את יעילות השגרה הבאה•
function ret = routes(n)
for i=1:2^n
my_dec2bin(i);
end
:פתרון•
𝑓𝑚𝑦_𝑑𝑒𝑐2𝑏𝑖𝑛 𝑖
2𝑛
𝑖=1
= log2 𝑖
2𝑛
𝑖=1
= log2 𝑖
2𝑛
𝑖=1
= log2 2𝑛!
17 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
תרגיל
log2נשים לב ש :פתרון חלופי• 𝑖 היא פונקציה מונוטונית עולה ולכן
𝑖לכל ≤ 2𝑛 מתקייםlog2 𝑖 ≤ log2 2𝑛 .לכן ,
𝑓𝑚𝑦_𝑑𝑒𝑐2𝑏𝑖𝑛 𝑖
2𝑛
𝑖=1
= log2 𝑖
2𝑛
𝑖=1
≤ log2 2𝑛
2𝑛
𝑖=1
= log2 2𝑛
2𝑛
𝑖=1
= log2 2𝑛 2𝑛 = 𝑛 ⋅ 2𝑛
אבל אל הסיבוכיות , קיבלנו שהסיבוכיות הקודמת יותר מדויקת, כלומר•
ככל שניתן יותר הנחות מקלות ככה הפתרון יהיה . הזו יותר קל להגיע
. פחות מדויק
log2(2בנוסף הצלחנו להוכיח כי •𝑛!) ≤ 𝑛 ⋅ 2𝑛.
18 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
תרגיל
(.מטלאבשל sort)יעיל כללי מיון •
(.בהרצאה)מיזוג מיון •
(.העשרה)ערימה יון מ•
19 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
𝑶זמן יעיל ביותר לחיפוש 𝒏𝐥𝐨𝐠 𝒏
20 ©כל הזכויות שמורות . מבוא למחשב בשפת מטלאב
טבלת סדרי גודל
הגודל מהקטן לגדול סדרי
𝑂 1
𝑂 log𝑛
𝑂 𝑛
𝑂 𝑛log𝑛
𝑂 𝑛2
𝑂 𝑛3
𝑂 2𝑛
𝑂 𝑛𝑛
…