1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)

Slides:



Advertisements
Similar presentations
מבוא למדעי המחשב לתעשייה וניהול
Advertisements

מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
מערכים ומטריצות קרן כליף.
מבוא למדעי המחשב מערכים.
גרף מכוון Directed Graph a b c f g ed h צמתים חוג עצמי קשתות.
מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה
קורס אלגוריתמים ספר הקורס: מרצה: נעם ניסן מתרגלים:
שאלות ממבחנים. 14 תרגולמבוא למדעי המחשב. כל הזכויות שמורות ©2 תרגיל 1: מטריצות כתבו פונקציהvoid Rotation(int in [N][N], int out [N][N]) אשר מקבלת שני.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי backtracking: לא תידרשו לממש אלגוריתם, אך כן להבין או להשלים מימוש נתון. אחת משאלות המבחן מבוססת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
רקורסיות נושאי השיעור מהן רקורסיות פתרון רקורסיות : שיטת ההצבה שיטת איטרציות שיטת המסטר 14 יוני יוני יוני 1514 יוני יוני יוני 1514.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
בהסתברות לפחות למצא בעיה במודל PAC עבור בהסתברות ε הפונקציה f טועה מודל ONLINE 1. אחרי כל טעות הפונקציה משתפרת 2. מספר הטעיות קטן.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
רקורסיות 18 יוני יוני יוני 1518 יוני יוני יוני 1518 יוני יוני יוני 151.
מסדי נתונים תשס " ג 1 תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF מסדי נתונים.
Data Structures and Algorithms Introduction to Complexity Gal A. Kaminka Computer Science Department.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
ערמות ; מבני נתונים 09 מבוסס על מצגות של ליאור שפירא, חיים קפלן, דני פלדמן וחברים.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות – שיעור 7. חזרה -מערכים נגדיר בעזרתו קבוצת משתנים כאשר יהיה לנו מספר רב של משתנים זהים נגדיר בעזרתו קבוצת משתנים כאשר יהיה לנו מספר רב של משתנים.
מודל ONLINE לומדמורה 1. כל ניתן לחישוב בזמן פולינומיאלי 2. אחרי מספר פולינומיאלי של טעיות ( ) הלומד לא טועה ז"א שווה ל- Littlestone 1988.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
Sorting II: הפרד ומשול. Last week: in-place sorting Bubble Sort – O(n 2 ) comparisons –O(n) best case comparisons, O(n 2 ) exchanges Selection Sort -
מבוא למדעי המחשב תרגול מספר 11.
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
יחס סדר חלקי.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. אג'נדה שאלות מבחינות חזרה על מימוש stream אפשרי 2.
עצים בינאריים - תזכורת דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
- אמיר רובינשטיין מיונים - Sorting משפט : חסם תחתון על מיון ( המבוסס על השוואות בלבד ) של n מפתחות הינו Ω(nlogn) במקרה הגרוע ובממוצע. ניתן לפעמים.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
מבוא למדעי המחשב הרצאה 11: תכנות רקורסיבי 4 כולל מיון רקורסיבי 1.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
Dynamic Allocation. Malloc - Reminder void* malloc(unsigned int nBytes); Used to dynamically allocate nBytes in memory Returns a pointer to the allocated.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
אלגוריתמי חיפוש. Brute Force Module Module1 Function BruteForce(ByRef x() As Integer, ByRef item As Integer) As Integer Dim i As Integer For i = 0 To.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
Tirgul 12 Trees 1.
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
מיונים וחיפושים קרן כליף.
ניתוח זמן ריצה (על קצה המזלג)
תירגול 14: מבני נתונים דינאמיים
מבוא למדעי המחשב הרצאה 5: תחומי הכרה של משתנים
ניתוח זמן ריצה (על קצה המזלג)
Marina Kogan Sadetsky –
ניתוח זמן ריצה (על קצה המזלג)
תרגול 8 תחומי הכרה פונקציות
שאלות מבחינות קודמות יואב ציבין.
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Presentation transcript:

1 מבוא למדעי המחשב סיבוכיות

2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1) + fibonacci(n-2)); } long fibonacci (int n) { long tmp[LEN]={1,1}, i; for (i=2; i<n; i++) tmp[i]=tmp[i-1]+tmp[i-2]; return tmp[n-1]; }

3 חיפוש Search  נתון מערך של שלמים ומספר שלם.  יש לקבוע האם המספר נמצא במערך: יש להגדיר פונקציה המקבלת מערך של שלמים ואת אורכו וכן מספר שלם x, ומחזירה את האינדקס של התא במערך שבו נמצא x או-1 אם x לא נמצא במערך. int search (int n, int arr[], int size) { int i; for ( i=0 ; i < size ; i++ ) { if ( n == arr[i] ) { return i; } return -1; }

4 סיבוכיות Complexity  נתון אלגוריתם הפועל על קלט.  נביט על סדרה של קלטים ההולכים וגדלים (למשל, באלגוריתם החיפוש – גודל המערך הולך וגדל).  נרצה לתאר כיצד יתנהג האלגוריתם (זמן ריצה+מקום) כאשר הקלט הולך וגדל (כאשר n ← ).  סיבוכיות זמן: מספר הפעולות שמבצע האלגוריתם ביחס ל- n.  סיבוכיות מקום: גודל המקום בו משתמש האלגוריתם ביחס ל- n.  אנו מודדים סיבוכיות של אלגוריתמים במקרה הגרוע: Worst-case complexity

5 סיבוכיות Complexity  אנו רוצים לדעת מהו סדר הגודל של סיבוכיות התכנית.  לכן – הסיבוכיות נמדדת בהשוואה לפונקציות תוך הזנחת קבועים.  הגדרה: הפונקציה g(n) היא בעלת סיבוכיות f(n) אם קיימים קבועים c ו- n 0 כך שלכל n>n 0 g(n)≤c·f(n). אם הפונקציה g(n) היא בעלת סיבוכיות f(n), נסמן g(n)=O(f(n)).

6 סיבוכיות Complexity דוגמא לסדרי גודל: ,000, ,00040, ,000500,000 61,000,0006,000,000 10

7 חיפוש Search int search (int n, int arr[], int size) { int i; for ( i=0 ; i < size ; i++ ) { if ( n == arr[i] ) { return i; } return -1; } סיבוכיות זמן :O(n)

8 חיפוש בינארי  נתון מערך ממוין של שלמים ומספר שלם.  יש לקבוע האם המספר נמצא במערך : יש להגדיר פונקציה המקבלת מערך של שלמים ואת אורכו וכן מספר שלם x, ומחזירה את האינדקס של התא במערך שבו נמצא x או - 1 אם x לא נמצא במערך.

9 חיפוש בינארי  נתון מערך ממוין של שלמים ומספר שלם.  יש לקבוע האם המספר x נמצא במערך.  הרעיון : לנצל את העובדה שהמערך ממוין. לבדוק את היחס בין ערך האיבר האמצעי במערך לבין x: אם x שווה לו ← סיימנו ! אם x קטן ממנו ← נחפש בחלק השמאלי. אם x גדול ממנו ← נחפש בחלק הימני.

10 חיפוש בינארי מימוש :  משתני עזר : low – נקודת התחלת החיפוש במערך high – נקודת סיום החיפוש במערך.  נבנה פונקציה הבודקת האם  עבור low=0 ו - high=arr_len נקבל את הפתרון.

11 חיפוש בינארי /* binsearch: find n in arr[low] <= arr[low+1] <=... <= arr[high-1] */ int binsearch(int n, int arr[], int low, int high) { int mid; if (low > high) { /* arr is exhausted, n not found */ return -1; } mid = (low+high) / 2; /* middle of the relevant part of arr */ if (n < arr[mid]) /* search in the lower part */ return (binsearch(n, arr, low, mid-1)); else if (n > arr [mid]) /* search in the upper part */ return (binsearch(n, arr, mid+1, high)); else /* n found, return its index */ return mid; } סיבוכיות זמן :

12 סיבוכיות - דוגמא מערך בגודל n נקרא מושלם אם הוא מכיל אך ורק את המספרים 1,2, …,n כך שכל מספר מופיע בדיוק פעם אחת. דוגמא : מערך מושלם מערך שאינו מושלם

13 סיבוכיות - דוגמא מערך בגודל n נקרא מושלם אם הוא מכיל אך ורק את המספרים 1,2, …,n כך שכל מספר מופיע בדיוק פעם אחת. הגדירו פונקציה המקבלת מערך ואת גודלו ומחזירה 1 אם המערך מושלם ו - 0 אחרת.

14 סיבוכיות - דוגמא int IsPerfect (int arr[], int len) { int i,j; for (i=0; i<len; i++){ if (arr[i] len) return FALSE; for (j=i+1; j<len; j++){ if (arr[i]==arr[j]) return FALSE; } return TRUE; } סיבוכיות זמן : סיבוכיות מקום :

15 סיבוכיות - דוגמא מערך בגודל n נקרא מושלם אם הוא מכיל אך ורק את המספרים 1,2, …,n כך שכל מספר מופיע בדיוק פעם אחת. הגדירו פונקציה המקבלת מערך ואת גודלו ומחזירה 1 אם המערך מושלם ו - 0 אחרת. דרישות סיבוכיות : סיבוכיות זמן : O(n) סיבוכיות מקום : O(n)

16 סיבוכיות - דוגמא int IsPerfect (int arr[], int len) { int i, help[SIZE]={0}; for (i=0; i<len; i++){ if (arr[i] len) return FALSE; else help[arr[i]]++; } for (i=1; i<=len; i++){ if (help[i]!=1) return FALSE; } return TRUE; }

17 מיזוג merge  נתונים שני מערכים ממוינים של שלמים.  יש למזג את שני המערכים למערך ממוין אחד.  הרעיון : עבור a,b – מערכי הקלט ( ממוינים ), c – מערך הפלט, נבצע : כל עוד יש איברים בשני המערכים : אם האיבר הנוכחי ב - a < האיבר הנוכחי ב -b העתק לפלט את האיבר הנוכחי ב - a קדם את מצביעי a ו - c אחרת העתק לפלט את האיבר הנוכחי ב - b קדם את מצביעי b ו - c העתק את שארית המערך a ל - c העתק את שארית המערך b ל - c

18 מיזוג merge int merge (int list1[], int size1, int list2[], int size2, int list3[]) { int i1, i2, i3; if (size1+size2 > SIZE) { return FALSE; } i1 = 0; i2 = 0; i3 = 0; while (i1 < size1 && i2 < size2) { /* while both lists are non-empty */ if (list1[i1] < list2[i2]) { list3[i3++] = list1[i1++]; } else { list3[i3++] = list2[i2++]; } while (i1 < size1) { /* copy remainder of list1 */ list3[i3++] = list1[i1++]; } while (i2 < size2) { /* copy remainder of list2 */ list3[i3++] = list2[i2++]; } return TRUE; } סיבוכיות זמן :