אלגוריתמי מיון רקורסיביים

Slides:



Advertisements
מצגות קשורות
עריכה: אמיל וייסברוט תיכון עירוני ע"ש דוד טוביהו ב"ש
Advertisements

הרצאה 02 סוגי משתנים קרן כליף.
ייצוגים שונים של פונקציה
Computer Programming Fall 2012 תרגול 6 פונקציות
הרצאה 12: מיזוג, מיון ושימושים לפעולות על קבוצות - המשך
מבוא לתכנות ב-JAVA מעבדה 1
טיפים מנצחים: לחפש ולמצוא במהירות ובדיוק
Ford Fulkerson.
תרגול 11: רקורסיה ופיתוח טלסקופי
נערך ע"י אריק הוד, הגימנסיה העברית הרצליה
תרגול 5: לולאות ומערכים.
כף הרגל.
מיונים (SORTS) שמושים ביישומים רבים
ייצוג קבוצות מתוחכם עצי חיפוש בינאריים BINARY SEARCH TREES
מבוא למדעי המחשב מ' - תירגול 9
יצוג קבוצות מתוחכם עצי חיפוש בינאריים BINARY SEARCH TREES
תירגול 10: מבנים (structs) וקבצים
Marina Kogan Sadetsky –
התורשה במהלך הדורות.
רמי כהן, מדעי המחשב, הטכניוןכל הזכויות שמורות ©
Jump tables, review questions
הרצאה 3: משפטים, תנאים ולולאות
רקורסיה ופתרונות רקורסיביים
מבוא למדעי המחשב הרצאה מספר 12: רקורסיה
תכנות בשפת C תרגול 11 רשימות מקושרות מבנים
תרגול Introduction to C - Fall Amir Menczel.
פעולות אריתמטיות קרן כליף.
Computer Programming תרגול 1 Summer 2016
תירגול 11: מיונים וחיפוש בינארי
נערך ע"י אריק הוד הגימנסיה העברית הרצליה
רקורסיה ופתרונות רקורסיביים

תכנות בשפת C תרגול 8 רקורסיה
קשרי מקסוול (מתכון לתמרונים אלגבריים בבעיות תרמודינאמיות)
Engineering Programming A
תירגול 8:מצביעים והקצאה דינאמית
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
מבוא למדעי המחשב הרצאה 9: רקורסיה
תרגול 6: פונקציות, סוגי משתנים, top-down design
S. Even, "Graph Algorithms", Computer Science Press, 1979
תירגול 2: מבוא לתיכנות ב-C
פינוק מסביב לעולם הסבר הזמנה ומימוש.
Carry Save Adder (CSA).
כל הזכויות שמורות לגבריאל אנקרי © 2017
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
הרצאה 10: אלגוריתמי מיון רקורסיביים Merge sort ו-Quick sort
אנליטית זוית בין שני ישרים הוכחה ~> דוגמא ~> סיכום!! ^_^
המשך תכנות מונחה עצמים תרגול מס' 9.
כל הזכויות שמורות לגבריאל אנקרי © 2017
תרגול 13 : חזרה נכתב על-ידי לימור ליבוביץ נערך ע"י ישראל גוטר
Solving Simultaneous Linear Equations Using GPU
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
מבוא לתכנות ב- JAVA מעבדה 4
מבוא למדעי המחשב סמסטר ב' – 2008 מרצה: יעל סיגל מתרגל: ענבל בודובסקי.
Ci,j=Σκ Ai,κxBκ,j מכפלת מטריצות מכפלת מטריצות ב- O(n3)
Introduction to Programming in C
תרגול 12: backtracking.
מצביעים Pointers – המשך...
שרטוט ידני - חלק 1.
Data Structures, CS, TAU, Perfect Hashing
תרגול מס' 7: Memoization Quicksort תרגילים מתקדמים ברקורסיה
עקרונות תכנות מונחה עצמים תרגול 9:C++ - תרגילים
דוגמא להשערה חד-צדדית ימנית
רקורסיה ופתרונות רקורסיביים
שוק העבודה בישראל פרופ' ערן ישיב
Java Programming רשימות מקושרות - המשך
תמליל מצגת:

אלגוריתמי מיון רקורסיביים מבוא למדעי המחשב ושפת C אלגוריתמי מיון רקורסיביים נכתב ע"י יעל ארז. © כל הזכויות שמורות.

תוכן אלגוריתמי מיון רקורסיביים Quick-sort Merge-sort נכתב ע"י יעל ארז. © כל הזכויות שמורות.

רקורסיה – אלגוריתמי מיון Merge-sort Quick-sort נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Merge-sort תזכורת 37 48 56 16 25 61 45 22 37 48 56 16 25 61 45 22 37 48 56 16 25 61 45 22 37 48 56 16 25 61 45 22 נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Merge-sort תזכורת 16 22 25 37 45 48 56 61 16 37 48 56 22 25 45 61 37 48 16 56 25 61 22 45 37 48 56 16 25 61 45 22

Merge-sort מימוש רקורסיבי מיון מערך a[] באורך n: 1. תנאי עצירה: מערך באורך 1 ממוין. 2. צעד הרקורסיה: merge-sort לתת מערך שמאלי באורך n/2. merge-sort לתת מערך ימני באורך n-n/2. מיזוג 2 תתי המערכים.

Merge-sort מימוש רקורסיבי void merge_sort(int a[], int n) { int* temp = malloc(sizeof(int)*n); merge_sort_aux(a, n, temp); free(temp); } מערך עזר למיזוג void merge_sort_aux(int a[], int n, int temp[]) { if (n <= 1) return; merge_sort_aux (a, n/2, temp); merge_sort_aux (a+n/2, n-n/2, temp); merge(a, n/2, a+n/2, n-n/2, temp); memcpy(a, temp, n*sizeof(int)); } נותר לממש את merge...

Merge-sort - מימוש המיזוג void merge(int a[], int na, int b[], int nb, int temp[]) { int ia=0, ib=0, ic=0; for (; ia<na && ib<nb; ic++) { if (a[ia] < b[ib]) temp[ic] = a[ia++]; else temp[ic] = b[ib++]; } for (;ia<na; temp[ic++] = a[ia++]); for (;ib<nb; temp[ic++] = b[ib++]);

Quick-sort נתון מערך a[] של מספרים שלמים בגודל n. נסמן p=a[0] איבר הציר – pivot. שלב החלוקה – partition. נארגן את איברי המערך (מלבד ה-pivot) בשני חלקים: נחליף בין ה-pivot לאיבר במקום ה-t: 3 2 5 4 1 6 7 0 1 t t+1 n-1 3 2 1 5 4 6 7 קטנים מה- pivot גדולים/שווים ל-pivot 5 2 3 4 7 6 1 קטנים מה- pivot t גדולים/שווים ל-pivot נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort המצב כעת: כל האיברים משמאל ל pivot קטנים ממנו. נותר לסדר את תת המערך השמאלי ותת המערך הימני. 5 2 3 4 7 6 1 קטנים מה- pivot t גדולים/שווים ל-pivot נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort – מימוש רקורסיבי void quick_sort(int a[], int n) { if (n<=1) return; int t = partition(a, n); // rearrange array quick_sort(a, t); quick_sort(a+t+1, n-t-1); } נותר לממש את partition... נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort – מימוש partition 3 2 5 4 1 6 7 p b t נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort – מימוש partition 3 2 1 4 5 6 7 p b t נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort – מימוש partition 3 2 1 4 5 6 7 p b t נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort – מימוש partition int partition(int a[], int n) { int pivot = a[0]; int b=1, t=n-1; while (b <= t) { while (b <= t && a[b] < pivot) b++; while (t >= b && a[t] >= pivot) t--; if (b < t) { swap(&a[b++], &a[t--]); } swap(&a[0], &a[t]); return t; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort - סיבוכיות ערכי ה-pivot קובעים את זמן הריצה ואת עומק הרקורסיה. המקרה הטוב ביותר: איבר הציר תמיד באמצע המקרה הגרוע ביותר: איבר הציר תמיד הקטן ביותר עומק הרקורסיה: log2 n סיבוכיות ה partition: עומק הרקורסיה: n סיבוכיות ה partition: נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Quick-sort למימוש יעיל ה pivot נבחר באקראי. סיבוכיות זמן למרות זאת נחשב מיון יעיל כי בממוצע איברי הציר "טובים" והסיבוכיות היא סיבוכיות מקום במקרה של איברי ציר "טובים" נובע מעומק הרקורסיה (אין צורך במערך עזר). קיימת פונקצית ספריה qsort המממשת מיון זה. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Bucket-sort #define MIN_VAL 0 #define MAX_VAL 100 void bucket_sort(int arr[], int n) { int hist[MAX_VAL - MIN_VAL + 1] = { 0 }; for (int i = 0; i < n; i++) hist[arr[i] - MIN_VAL]++; int idx = 0; for (int val = MIN_VAL; val <= MAX_VAL; val++) for (int i = 0; i < hist[val - MIN_VAL]; i++) arr[idx++] = val; } נכתב ע"י יעל ארז. © כל הזכויות שמורות.