מבוא למדעי המחשב הרצאה 11: תכנות רקורסיבי 4 כולל מיון רקורסיבי 1.

Slides:



Advertisements
Similar presentations
Ford Fulkerson. Ford-Fulkerson (N=(G, c, s, t)) ; G = (V, E) for each edge, while exists a path P from s to t in residual network N f do for each edge.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
MergeSort (Example) - 1. MergeSort (Example) - 2.
גרפים ממשקלים גרף ממשקל הוא גרף עם משקל לכל קשת עץ פורש הוא עץ שצמתיו הם כל הצמתים של הגרף וקשתותיו הן קשתות הגרף.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
מבוא להנדסת חשמל מעגל מסדר שני.
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. מספר הטעיות קטן.
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
15 Sorting1June Sorting CE : Fundamental Programming Techniques.
תוכנית דעת, שנה"ל תשס"ח, מרצה יהודה הופמן1 מערכות מידע ארגוניות מערכות מידע ארגוניות הרצאה מס' 2: מהו מידע ?
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מוסכמות קריאה לשגרה ב- Assembly מיון מערך (merge sort)
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
Tower of Hanoi Complexity of solutions of interesting variants of the known game.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;

מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
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.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
Recursion & Collections API Recursion Revisited Programming Assignments using the Collections API.
תוכנה 1 תרגול מס ' 3 מערכים ומבני בקרה. 2 מערכים Array: A fixed-length data structure for storing multiple values of the same type Example: An array of.
Types in Java 8 Primitive Types –byte, short, int, long –float, double –boolean –Char Also some Object types: e.g. “String” But only single items. What.
1 מבוא למדעי המחשב הרצאה 21: Queue, Iterator & Iterable.
מבוא למדעי המחשב הרצאה 9: תכנות רקורסיבי 2 1. חישוב עצרת: רקורסיית זנב public static int fact (int n){ return factacc(n,1); } public static int factacc.
Arrays and ArrayLists. int numbers[] = new int[10]; numbers Other ways to declare the same array 1) int[] numbers = new.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים פולימורפיזם מתקדם ממשקים בג ' אווה 1.
Contest Algorithms January 2016 Pseudo-code for divide and conquer, and three examples (binary exponentiation, binary search, and mergesort). 5. Divide.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
 MergeSort is a sorting algorithm which is more on the advanced end.  It is very fast, but unfortunately uses up a lot of memory due to the recursions.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
1 Insertion sort [ ] i=1 j=1 i=2 j=2 insert i=3 at j=1 [ ] i=3 j=1 insert i=4 at j=0 [
Insertion Sort while some elements unsorted: Using linear search, find the location in the sorted portion where the 1 st element of the unsorted portion.
Algorithm Analysis Lakshmish Ramaswamy. Insertion Sort Conceptual Logic Create a duplicate array Insert elements from original array into duplicate array.
Algorithm Analysis Lakshmish Ramaswamy. Formal Definitions Big-Oh: T(N) is O(F(N)) if there exists positive constants N 0 and c such that T(N) N 0 Big-Omega:
1 Advanced Programming Examples Output. Show the exact output produced by the following code segment. char[,] pic = new char[6,6]; for (int i = 0; i
1 Programming for Engineers in Python Autumn Lecture 9: Sorting, Searching and Time Complexity Analysis.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
תרגול חזרה לבוחן נמרוד מילוא.
מוסכמות קריאה לשגרה ב- Assembly מיון מערך (merge sort)
האוניברסיטה העברית בירושלים
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
FAA FAA (int s, int val) { temp = s; s = s + val; return temp; }
מבוא למדעי המחשב לתעשייה וניהול
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Alg2_1c Extra Material for Alg2_1
AP Search and Sort Review
מבוא למדעי המחשב סיבוכיות.
מיונים וחיפושים קרן כליף.
תירגול 14: מבני נתונים דינאמיים
יסודות מדעי המחשב – תרגול 4
תרגול Introduction to C - Fall Amir Menczel.
מבוא למדעי המחשב הרצאה 6: מיונים.
מיונים וחיפושים קרן כליף.
Arrays.
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Example. Sort {5, 1, 12, -5, 16, 2, 12, 14} using selection sort. Complexity analysis.
Algorithms Lakshmish Ramaswamy.
Recursion Problems.
Object Oriented Programming
Algorithms Lakshmish Ramaswamy.
Application: Efficiency of Algorithms II
Application: Efficiency of Algorithms II
Running Time Exercises
אם גודל המערך arr גדול מ-1 בצע: מיון-מיזוג(left) מיון-מיזוג(right)
Presentation transcript:

מבוא למדעי המחשב הרצאה 11: תכנות רקורסיבי 4 כולל מיון רקורסיבי 1

החזרת כל הפרמוטציות 2 public static String[] permString(String s) { String [] ans; if (s.length()==0) { ans = new String[1]; ans[0] = ""; } else { String[] tmp = permString(s.substring(1)); ans = new String[s.length()*tmp.length]; for (int i=0; i<tmp.length; i=i+1) for (int j=0; j<s.length(); j=j+1) ans[i*s.length()+j] = tmp[i].substring(0,j) + s.charAt(0) + tmp[i].substring(j); } return ans; }

מיון רקורסיבי 3

מיון מיזוג - דוגמא 21,5,8,1, # 10,3,-1,30, 21,5, # 8,1, 21, # 5, sorted: 5,21, 8, # 1, sorted: 1,8, sorted: 1,5,8,21, sorted: -1,1,3,5,8,10,21,30, 10,3, # -1,30, 10, # 3, sorted: 3,10, -1, # 30, sorted: -1,30, sorted: -1,3,10,30, 4

מיון מיזוג - תכנון אילו שיטות צריך כדי לכתוב את מיון המיזוג? פיצול: חתימה, תנאי קצה, אלגוריתם. מיזוג: חתימה, תנאי קצה, אלגוריתם. תוכנית ראשית:... 5

Merge sort public static int[] sort(int[] arr){ if (arr==null || arr.length<2) return arr; else return merge(sort(splitLeft(arr)),sort(splitRight(arr))); } 6

פיצול (מיון מיזוג) public static int[] splitLeft(int[] arr){ int[] ans = new int[arr.length/2]; for (int i=0; i<arr.length/2; i=i+1) ans[i]=arr[i]; return ans; } public static int[] splitRight(int[] arr){ int[] ans = new int[arr.length-arr.length/2]; for (int i=arr.length/2; i<arr.length; i=i+1) ans[i-arr.length/2]=arr[i]; return ans; } 7

מיזוג (מיון מיזוג) public static int[] merge(int[] arr1, int[] arr2) { int ind = 0, i1=0, i2=0; int len1 = arr1.length, len2=arr2.length; int[] ans = new int[len1+len2]; while(i1<len1 & i2 < len2) { if(arr1[i1] <arr2[i2]) { ans[ind] = arr1[i1]; i1=i1+1; } else { ans[ind] = arr2[i2]; i2=i2+1; } ind=ind+1; } 8

מיזוג - המשך for(int i=i1;i<len1;i=i+1) { ans[ind] = arr1[i]; ind=ind+1; } for(int i=i2;i<len2;i=i+1) { ans[ind] = arr2[i]; ind=ind+1; } return ans; } 9

ניתוח זמן ריצה : פיצול

ניתוח זמן ריצה : איחוד N N N N O(N log N) 11

ניצול אולם מקסימלי בהנתן אולם הרצאות ואוסף של שיעורים עם זמן התחלה וזמן סיום. מצא את הניצול המקסימאלי של האולם מבחינת הזמן שהשיעורים התקימו בו. שים לב ששני שיעורים שנחתכים בזמנים לא יכולים להתקיים בו זמנית באולם (לכן לכל היותר אחד משני השיעורים יחשב בניצול האולם). 12

13 public static int maxUse(int[][] segArr){ segArr= sortByEndPoints(segArr); return maxUse(segArr, segArr.length-1); { sortByEndPoints(int[][] segArr); ?? Just like mergesort !! (but on segments)

14 public static int maxUse(int[][] segArr, int i){ int res = 0; if (i >= 0){ int len = segArr[i][1] - segArr[i][0]; int nextI = findNextSeg(segArr, i); int with = maxUse(segArr,nextI)+len; int without = maxUse(segArr,i-1); res = Math.max(with,without); } return result; }

15 public static int findNextSeg(int[][] segments, int i){ int endPoint = segments[i][0]; while ((i >= 0) && (endPoint < segments[i][1]) ) i = i -1; return i; {

ניצול אולם מקסימלי - memoization 16 public static int maxUse(int[][] segArr){ int[] memo = new int[segArr.length + 1]; segArr= sortByEndPoints(segArr); return maxUse(segArr,segArr.length-1,memo); {

17 public static int maxUse(int[][] segArr, int i, int[] memo){ int res = 0; if (i >= 0){ if (memo[i])==0){ int len=segArr[i][1]-segArr[i][0]; int nextI=findNextSeg(segArr, i); int with=maxUse(segArr,nextI,memo)+len; int without=maxUse(segArr,i-1,memo); res=Math.max(with,without); memo[i] = res; } else result=memo[i]; return result; }