קורס אלגוריתמים ספר הקורס: מרצה: נעם ניסן מתרגלים: Introduction to Algorithms (Cormen, Leiserson, Rivest). גרסה עברית בהוצאת האונ’ הפתוחה (שני חלקים) מרצה: נעם ניסן שעור: ב’ 10-12 ד’ 12-1 שעת קבלה: ד’ 1-2 מתרגלים: דן גוטפרוינד אלי בן ששון יונתן בילו
דרישות הקורס תרגיל לבית כל שבועיים. ציון סופי: 90% מבחן; 12% תרגילים. הגשה חובה, בדיקה מדגמית ציון סופי: 90% מבחן; 12% תרגילים. אתר WEB של הקורס: פרטים, תרגילים, עדכונים. נדרשת חזרה בבית על חומר השיעור!
שיטות תכנון וניתוח אלגוריתמים תוכן הקורס חלק ב' (4-5 שבועות) אלגוריתמים על גרפים חיפוש לרוחב ולעומק מסלולים קצרים ביותר זרימה ושידוכים חלק א (5-4 שבועות) שיטות תכנון וניתוח אלגוריתמים מבוא ניתוח זמן ריצה (חזרה) תכנות דינמי אלגוריתמים חמדניים אלגוריתמים לקירוב
תוכן הקורס (המשך) חלק ג' (5-4 שבועות) נושאים נבחרים אלגוריתמים מקביליים אלגוריתמים על מספרים טבעיים אלגוריתמים הסתברותיים אלגוריתמים אלגבריים התאמת מחרוזות חלק ג' (5-4 שבועות) נושאים נבחרים ילמדו חלק מהנושאים הבאים.
פרספקטיבה אבל האלגוריתם הינו לב התוכנית הבנת הבעיה קשורה הדוקות להבנת האלגוריתם אבל ב‘מציאות’ הבעיה היא הגדרת הבעיה האלגוריתם הינו משרתם של הנתונים
כיצד לתכנן אלגוריתם? הפרד ומשול לדעת מראש אינדוקציה חצי-חצי (“בערך”) שכלולים אלג’ חמדניים תכנות דינמי לדעת מראש להכיר את הפתרון רדוקציה לשנות אלגוריתם מוכר לגנוב רעיונות
בעיה דוגמה: יש N קבוצות קלט: לכל זוג קבוצות, מי ניצחה במשחק בין שתיהן. (כל הזוגות התחרו; אין תיקו) פלט: סידור של כל הקבוצות, כך שכל קבוצה ניצחה את קודמתה. 1 3 4 2
פתרון פתור את הבעיה עבור (N-1) הקבוצות הראשונות. או
דוגמה: Merge-Sort Sort(A,i,j) Merge(A,i,m,j) A[i]..A[j] ממיין את חלק המערך if i<j then m <-- (i+j)/2 sort(A,i,m) sort(A,m+1,j) merge(A,i,m,j) Merge(A,i,m,j) A[m+1..j], A[i..m] מניח ש ממוינים כבר, וממזג לרשימה A[i..j] אחת ממוינת מערך עזר [A[i..m] A[m+1..j
בעיה A[1..n] קלט: מערך מספרים פלט: שני מספרים במערך שסכומם 10000000 (או שאין כאלו)
פתרון Sort A[1…N] for j=1…N find 1000000-A[j] in A
(f בערך קטנה או שווה ל-g) ניתוח זמן ריצה סימון: עבור אלגוריתם A TA(n) יסמן את מספר הפעולות שמבצע A על הקלט הגרוע ביותר מאורך n (על המחשב שלי בבית) הגדרה: יהיו f, g : N --> N נאמר ש: f = O(g) אם קיים קבוע C כך שלכל n: (f בערך קטנה או שווה ל-g)
דוגמה להוכחה פורמלית הוכחה: יהי C כך שלכל n: f(n) <= Cg(n) יהי D כך שלכל n: h(n) <= Dg(n) נציב E=C+D, ונקבל לכל n: (f+h)(n)=f(n)+h(n) <= <= Cg(n)+Dg(n)=Eg(n) משפט: אם f=O(g) ; h=O(g) אזי f+h=O(g) הגדרה: (f+h)(n) = f(n) + h(n)
פרספקטיבה בעיות ומגבלות: יתרונות: התעלמות מקבועים האם הקלט מספיק גדול? מקרה ממוצע זמן “משוערך" יתרונות: קרוב טוב במציאות (לרוב) ניתוח מתמטי מדויק קל מאוד לעבודה עובד לכל מחשב/שפה עובד לכל קלט
ניתוח זמן ריצה Proc1(A[1..n]) s <-- 0 for i = 1 .. n do for j = (i +1) .. n do if A[i] < A[j] s <-- s + 1
ניתוח זמן ריצה Proc2(A[1..n]) Proc1(A[1..n]) s <-- 0 i <-- 1; j <-- 1; s <-- 0 repeat if A[i] < A[j] s <-- s + 1 if j=n j=i + 1; i <-- i+1 else j <-- j+1 until i+j > 2n Proc1(A[1..n]) s <-- 0 for i = 1 .. n do for j = (i +1) .. n do if A[i] < A[j] s <-- s + 1
Merge-Sort -- זמן ריצה TMerge(n) = O(n) TSort(n) = 2TSort(n/2) + O(n) TSort(1) = O(1) משפט: Tsort(n) = O(n log n)