Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

5 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 6 סיבוכיות Complexity דוגמא לסדרי גודל: 3100030001,000,000 410,00040,000 5100,000500,000 61,000,0006,000,000 10

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

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

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

11 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 12 סיבוכיות - דוגמא מערך בגודל n נקרא מושלם אם הוא מכיל אך ורק את המספרים 1,2, …,n כך שכל מספר מופיע בדיוק פעם אחת. דוגמא : 32410 מערך מושלם מערך שאינו מושלם 22415 32415

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

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

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

18 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; } סיבוכיות זמן :


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

Similar presentations


Ads by Google