מבוא למדעי המחשב תרגול מספר 11.

Slides:



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

Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
1 מבוא למדעי המחשב הקצאה דינאמית. 2 הקצאת זיכרון דינאמית  כאשר אנו משתמשים במערכים, אנו מקצים אוטומטית את הזיכרון המקסימלי שנצטרך.  בפועל, אנו משתמשים.
Presentation by Dudu Yanay and Elior Malul 1.  מה משותף לכל אלגוריתם המשתמש ב -Bucket Elimination: ◦ נתון מודל הסתברותי ורשת ביסיאנית מתאימה. ◦ נתונה.
מתמטיקה בדידה תרגול 3.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
1 מבוא למדעי המחשב תרגול מספר 11 2 הנושאים להיום סיבוכיות זמן ומקום של אלגוריתמים. למה צריך ללמוד את זה? 100% יופיע במבחן מדד ליעילות של אלגוריתמים.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי backtracking: לא תידרשו לממש אלגוריתם, אך כן להבין או להשלים מימוש נתון. אחת משאלות המבחן מבוססת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
רקורסיות נושאי השיעור מהן רקורסיות פתרון רקורסיות : שיטת ההצבה שיטת איטרציות שיטת המסטר 14 יוני יוני יוני 1514 יוני יוני יוני 1514.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
אוטומט מחסנית הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 11.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
משפט ההרכבה Composition Theorem תהי C מחלקה של פונקציות בוליניות תהי נגדיר סדרת פונקציות שניתנות לחישוב בזמן פולינומיאלי.
בהסתברות לפחות למצא בעיה במודל PAC עבור בהסתברות ε הפונקציה f טועה מודל ONLINE 1. אחרי כל טעות הפונקציה משתפרת 2. מספר הטעיות קטן.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
תכנות תרגול 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 } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
הפקולטה למדעי המחשב אוטומטים ושפות פורמליות (236353)
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א.
עצים בינאריים - תזכורת דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Sscanf example #include int main () { char sentence []="Rudolph is 12 years old"; char str [20]; int i; sscanf (sentence,"%s %*s %d",str,&i); printf ("%s.
- אמיר רובינשטיין מיונים - Sorting משפט : חסם תחתון על מיון ( המבוסס על השוואות בלבד ) של n מפתחות הינו Ω(nlogn) במקרה הגרוע ובממוצע. ניתן לפעמים.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב סיבוכיות.
מבנה נתונים ואלגוריתמים
ניתוח זמן ריצה (על קצה המזלג)
מצביעים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
ניתוח זמן ריצה (על קצה המזלג)
מבני נתונים ADT, O() notation, Recursions תשס"ח סמסטר ב' תרגול 1
ניתוח זמן ריצה (על קצה המזלג)
תרגול 8 תחומי הכרה פונקציות
מערכים של מצביעים הקצאה דינאמית
תוכנה 1 תרגול 13 – סיכום.
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
חזרה חלקית על תרגול 12 גרף G=(V,E)
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Computer Architecture and Assembly Language
Presentation transcript:

מבוא למדעי המחשב תרגול מספר 11

הנושאים להיום סיבוכיות זמן ומקום של אלגוריתמים. למה צריך ללמוד את זה? 100% יופיע במבחן מדד ליעילות של אלגוריתמים

סיבוכיות זמן - מוטיבציה מעוניינים במדד למהירות האלגוריתם פשוט אוניברסאלי הצעה: נקמפל, נריץ על קלט מסוים ונמדוד זמן ריצה תלוי מערכת => יש לנתח ולספור פעולות תלוי "גודל" קלט => יש להתייחס כפונקציה של "גודל קלט" ייתכן קלט "נוח" => יש להתייחס לקלט "הגרוע ביותר" קלטים קטנים לא מעניינם => מספיק התנהגות אסימפטוטית זמן ביצוע פעולות שונה => ניתן להסתפק בקירוב עד כדי קבוע

סיבוכיות זמן – הגדרת t(n) נסמן ב- t(n) את מספר הפעולות המקסימאלי שמבצע אלגוריתם, כתלות ב- n – "גודל הקלט". "פעולה" – פעולה אלמנטארית, מתבצעת בזמן קבוע קטן למה סופרים פעולות ולא זמן ריצה? n – "גודל הקלט", תלוי בעיה (כמות מספרים, אורך מחרוזת וכו') מספר פעולות מקסימאלי – לקלט הכי גרוע בגודל n למה מקסימאלי? כעת בהינתן האלגוריתם, נחשב את t(n)

סיבוכיות זמן – פישוט t(n) t(n) מסובכת, למשל t(n)=3n2-10n+nlog3n-2log2n נחפש קירוב פשוט f(n) אשר "מתנהגת בערך כמו t(n)" f’(n)=3n2 מתנהגת כמו t(n) אסימפטוטית f’(n)/t(n) שואף ל-1 כאשר n שופת לאינסוף f(n)=n2 מתנהגת כמו t(n) אסימפטוטית עד כדי קבוע f(n)/t(n) שואף ל-3 כאשר n שופת לאינסוף f(n)=n2 נקראת סיבוכיות זמן של האלגוריתם

סיבוכיות זמן – הגדרה סיבוכיות (זמן): קירוב אסימפטוטי (עד כדי קבוע) לכמות הפעולות שהאלגוריתם מבצע לקלט הכי גרוע בגודל נתון ישנם בשלושה מדדים (קירובים) לסיבוכיות: חסם עליון - O ("או") חסם תחתון - Ω ("אומגה") חסם הדוק - θ ("תטה")

הגדרות (תזכורת) סימון קיים c>0 וקיים N שלם כך שלכל n>N: משמעות t(n) = O(f(n)) t(n) ≤ c·f(n) חסם אסימפטוטי עליון t(n) = Ω(f(n)) t(n) ≥ c·f(n) חסם אסימפטוטי תחתון t(n) = Θ(f(n)) t(n)=O(f(n)) t(n)=Ω(f(n)) וגם חסם אסימפטוטי הדוק

אינטואיציה להגדרות t(n) = Ω(f(n)) t(n) = O(f(n)) t(n) = Θ(f(n)) c1*f(n) t(n) t(n) = O(f(n)) N2 c2*f(n) t(n) t(n) = Ω(f(n)) N1 c1*f(n) t(n) t(n) = Θ(f(n)) N2 c2*f(n)

דוגמא נתון אלגוריתם ש"זמן הריצה" (כמות הפעולות) שלו כתלות בקלט n מתואר ע"י פונקציית הסיבוכיות הבאה: f(n) = 4n3 מה מהבאים נכון? f(n) = 4n3 + 2n2 t(n) = 4n3 + 2n2 + 7 O Ω Θ O(1) Ω(1) Θ(1) O(logn) Ω(logn) Θ(logn) O(n2) Ω(n2) Θ(n2) O(n3) Ω(n3) Θ(n3) O(n3logn) Ω(n3logn) Θ(n3logn) O(n4) Ω(n4) Θ(n4) O(2n) Ω(2n) Θ(2n)

"כלל אצבע" בסיסי כאשר מחברים כמה איברים, מי שמשפיע הוא זה ששואף לאינסוף הכי מהר (בסיבוכיות הכי גרועה) נסו להוכיח פורמאלית: עבור פולינום מדרגה k: t(n) = aknk + ak-1nk-1 +. . . + a1n + a0 = Θ(nk) באופן דומה : t(n) = an2n + an-12n-1 +. . . + a0 = Θ(2n) ומה לגבי ביטויים מעורבים? t(n) = n + log(n) = Θ(n) t(n) = 2n + n3 = Θ(2n)

היררכיה של מחלקות סיבוכיות

"כללי אצבע" לקביעת סיבוכיות זמן של אלגוריתם "כללי אצבע" לקביעת סיבוכיות זמן של אלגוריתם מהי סיבוכיות הזמן של קטעי הקוד הבאים כתלות ב- n? int i=0; while(i<n) i+=1; int i=1; while(i<n) i*=2; int i=2; while(i<n) i=i*i; Θ(n) Θ(log (n)) Θ(log log (n)) 2 2 2 log2n=log2c*logcn סיבוכיות ליניארית סיבוכיות לוגריתמית

"כללי אצבע" לקביעת סיבוכיות זמן של אלגוריתם "כללי אצבע" לקביעת סיבוכיות זמן של אלגוריתם מה קורה כשיש יותר מלולאה אחת? int i=0,j; while(i<n) i+=1; for(j=0 ; j<n ; j++) x=8; int i=0,j; while(i<n) { i+=1; for(j=0 ; j<n ; j++) x=8; } לולאות "בטור" Θ(n)+ Θ(n)= Θ(n) לולאות מקוננות Θ(n)* Θ(n)= Θ(n2) שימו לב שהלולאות בדוגמאות הנ"ל הן בלתי תלויות! נראה בהמשך דוגמאות שהלולאות כן תלויות.

"כללי אצבע" לקביעת סיבוכיות זמן של אלגוריתם "כללי אצבע" לקביעת סיבוכיות זמן של אלגוריתם עוד דוגמא לקינון לולאות דרך פונקציות: באופן כללי, כאשר מחשבים סיבוכיות של פונקציה, יש להתחשב בסיבוכיות כל הפונקציות הנקראות ממנה! void f1(int x) { int i; for(i=0; i<x; i++) printf("…"); } void f2(int n) { while(n--) { f1(n); O(n2)

לכל הפונקציות הבאות אותה סיבוכיות - Θ(n) אבחנות נוספות (1) לכל הפונקציות הבאות אותה סיבוכיות - Θ(n) for(i=0 ; i<n ; i++) printf("…"); for(i=0 ; i<2n ; i++) printf("…"); for(i=0 ; i<4000n ; i++) printf("…");

אבחנות נוספות (2) מה הסיבוכיות כתלות ב- N? Θ(N) #define N 100 for(i=0 ; i<N ; i++) printf("…"); scanf("%d", &n); for(i=0 ; i<n ; i++) printf("…"); מה הסיבוכיות כתלות ב- N? Θ(N) הסבר: נכון ש- N הוא קבוע, אבל אנחנו שואלים: "איך משתנה זמן הריצה כתלות ב- N?" ערכו האמיתי של N כלל לא משנה. מה הסיבוכיות כתלות ב- n? Θ(n)

תרגיל 1 Θ(n2) Θ(n2) מה סיבוכיות הזמן של הפונקציה הבאה כתלות ב- n? int f1(int a[], int b[], int n) { int i, j;   for(i=0; i < n; i++) for(j = 0; j < n; j++) if(a[i] == b[j]) return i; return –1; } int f1(int a[], int b[], int n) { int i, j;   for(i=0; i < n; i++) for(j = 0; j < i ; j++) if(a[i] == b[j]) return i; return –1; } אותה שאלה, כאשר מחליפים את n ב- i ? Θ(n2) Θ(n2)

שימו לב כי לא משנה מהו הבסיס! תרגיל 2 מה סיבוכיות הזמן של הפונקציה הבאה כתלות ב- n? void f2(int n) { while( n > 1) if(n % 2) n /= 2; else n += 1; } Θ(logn) שימו לב כי לא משנה מהו הבסיס!

תרגיל 3 Θ(nlogn) מה סיבוכיות הזמן של הפונקציה הבאה כתלות ב- n? void f3 (int n) { int i, m=1;   for(i = 0; i < n; i++) m *= n; while( m > 6) m /= 3; } Θ(nlogn)

תרגיל 4 Θ(n2) מה סיבוכיות הזמן של הפונקציה הבאה כתלות ב- n? void f4 (int n) { int i, j, k, count;   k = 1; for(i = 0; i < n; i++) { k *= 3; for(j = k; j; j /= 2) count++; } Θ(n2)

סיבוכיות כתלות ביותר מפרמטר אחד הכול אותו הדבר, רק אם לא ניתן לפשט – אז לא מפשטים! לדוגמה: t(n) = n+3n = O(n) אך: t(m,n) = m+3n = O(m+n) מה סיבוכיות הזמן של הפונקציה הבאה כתלות ב- n ו-M? #define M 100 void f5 (int n) { while(n--) for(i=0; i<pow(M,n); i*=2) printf("..."); } Θ(n2logM)

סיבוכיות זיכרון (מקום) מספר תאי הזכרון (למשל בתים) המקסימלי שאלגוריתם צורך בו זמנית מתחילת ריצתו ועד סופו. void f1(int n) { int x,y,z; . . . } void f2(int n) { int A[N]; . . . } Θ(1) Θ(N) Θ(n) void f3(int n) { int *p=(int*)malloc(n*sizeof(int)); . . . }

סיבוכיות זיכרון (2) אותו העיקרון, אם הבדל אחד: זיכרון (שלא כמו זמן) ניתן לשחרר! (למשל, משתנים לוקאליים) לכן, מחפשים את הצריכה המקסימאלית בו-זמנית על פני הריצה כלומר: סיבוכיות מקום היא קירוב אסימפטוטי (עד כדי קבוע) לכמות המקסימאלית של תאי הזיכרון האלמנטאריים שהאלגוריתם צורך בו-זמנית לקלט הכי גרוע בגודל נתון

סיבוכיות זיכרון (3) כמה זכרון דורשת התוכנית הבאה כתלות ב- N? זיכרו שבסוף בלוק כל הזכרון שהוקצה בבלוק משוחרר. הקצאת הזכרון נראית כך: void f1(void) { int A[N] . . . } int main() { int i; for(i=0 ; i<N ; i++) f1(); return 0; N התקדמות התוכנית כמות זכרון Θ(N)