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

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]) אשר מקבלת שני.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי 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 של הסדרה הוא קירוב.
ערמות ; מבני נתונים 09 מבוסס על מצגות של ליאור שפירא, חיים קפלן, דני פלדמן וחברים.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מודל 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 -
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
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 דוא " ל :
מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. אג'נדה שאלות מבחינות חזרה על מימוש stream אפשרי 2.
עצים בינאריים - תזכורת דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
- אמיר רובינשטיין מיונים - Sorting משפט : חסם תחתון על מיון ( המבוסס על השוואות בלבד ) של n מפתחות הינו Ω(nlogn) במקרה הגרוע ובממוצע. ניתן לפעמים.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
מבוא למדעי המחשב הרצאה 11: תכנות רקורסיבי 4 כולל מיון רקורסיבי 1.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 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: מבני נתונים דינאמיים
תרגול מס' 7: Memoization Quicksort תרגילים מתקדמים ברקורסיה
מבוא למדעי המחשב הרצאה 5: תחומי הכרה של משתנים
ניתוח זמן ריצה (על קצה המזלג)
Marina Kogan Sadetsky –
ניתוח זמן ריצה (על קצה המזלג)
בניית מחסנית סטטית Static Stack Implementation מורים מובילים תשע"ה
תרגול 8 תחומי הכרה פונקציות
שאלות מבחינות קודמות יואב ציבין.
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Presentation transcript:

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

סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; 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]; }

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

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

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

סיבוכיות Complexity דוגמא לסדרי גודל: 3 1000 3000 1,000,000 4 10,000 40,000 5 100,000 500,000 6 6,000,000 10

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

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

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

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

חיפוש בינארי סיבוכיות זמן: O(logn) /* binsearch: find x in arr[low] <= arr[low+1] <= ... <= arr[high-1] */ int binsearch(int arr[], int low, int high, int x) { 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 (x < arr[mid]) /* search in the lower part */ return (binsearch(arr, low, mid-1, x)); else if (x > arr [mid]) /* search in the upper part */ return (binsearch(arr, mid+1, high, x)); else /* n found, return its index */ return mid; סיבוכיות זמן: O(logn)

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

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

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

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

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

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

מיזוג 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 */ while (i2 < size2) { /* copy remainder of list2 */ return TRUE; סיבוכיות זמן: