Media/sort O() זמן. Lecture 0 of Geiger & Itai s slide brochure www.cs.techio.ac.il/~dag/courseds מציאת האי בר ה- i בגו ד לו (ל לא מיו ן) למציאת איבר מינימלי (מקסימלי) במערך נדרשת איטרציה אחת של BubbleSort הלוקחת האם ניתן למצוא את האיבר השני, השלישי, או האיבר בעל דרגה i בזמן O()? ניתן כמובן למיין, אבל כל אלגוריתם מיון למספרים כלליים דורש ( Ω( log זמן (כפי שנוכיח בקרוב). נראה ראשית פתרון בזמן O() בממוצע. pivot הפתרון משתמש ברעיון דומה ל-.QuickSort למציאת האיבר ה- i בגודלו נבצע רקורסיבית את הפעולות הבאות: 7 9 8 בחר באקראי איבר ציר. pivot חלק את המערך לשני חלקים. האברים הקטנים מ- pivot יאוחסנו בחלק השמאלי של המערך, והגדולים או שווים ל- pivot בחלק הימני של המערך. אחד צ עד q 7 9 (נניח ש- q הוא מספר האיברים בחלק השמאלי של המערך) 8 אם q i אז מצא רקורסיבית את האיבר ה- i בחלק השמאלי של המערך. אחרת, מצא רקורסיבית את האיבר ה- i-q בחלק הימני של המערך. Geiger & Itai, 00
Media/sort ד וגמ א מלאה תו צאת ההגרלה pivot= 7 q 9 8 מ צא את המספר הרבי ע י ב ג ודלו ב מ ע רך הבא: 7 9 8 pivot= 7 * * 7 9 8 מצא את המספר השני בגודלו במערך הבא: q * * 7 9 8 pivot= * * q * * * מ צא את המספר הש נ י ב ג ודלו במ ע ר ך הבא: * * * * * cs,techio מצא את המספר הראשון בגודלו במערך הבא: * * * * * *
Media/sort ניתו ח ז מנים הציר. באיבר תלוי הריצה זמן T ( ) = c T ( / ) = c( / / 4... ) = c מקרה אופטימלי. חציון. הוא הציר איבר T ( ) = Θ( ) QuickSort אחד של מופע מכילה זו נסיגה משוואת ( T(/ בניגוד לניתוח האופטימלי של ולכן פתרונה ליניארי ולא (.Θ( log מקרה גרוע. בכל שלב המערך קטן באחד בלבד. T ( ) = c T ( ) = c( ( )...) = Θ( ) cs,techio
Media/sort ניתו ח ז מנים במק ר ה הממוצע 4 T ( ) T ( ) k = T k = / ( max{ k, k } ) d T ( k ) d מקרה ממוצע: איבר הציר הוא אקראי. ניתן ל"תקן" את partitio כך שנחלק -: גם אם יבחר אבר ציר בעל rak= = 6 המחשה: k = 4 6 k-= 0 4 -k = 6 4 Max = 6 4 4 = המחשה: k = 4 K-= 0 4 k = 4 Max = 4 4 cs,techio
Media/sort פתרו ן משו וא ת הנסי ג ה T ( ) T ( ) k = / T ( k ) d לאחר התיקון:.T() נוכיח ב אינדוקציה שמתקיים T() c עבור קבוע c מתאים המקיים c על הל וח! cs,techio
Media/sort מק ר ה פרטי: מציאת חצ י ו ן 6 למציאת חציון נפעיל את האל גוריתם שפתחנו למציאת האיבר ה- /() בגודלו..O() זמן הריצה, כפי שראינו הוא cs,techio
Media/sort מציאת האי בר ה- i בגו ד לו (אל ג ו ר יתם דטרמינ יס טי) 7 הזמן הדרוש לאלגוריתם שתיארנו תלוי בגודל המערך בכל קריאה רקורסיבית. אם נבטיח שבכל קריאה רקורסיבית גודל המערך קטן "בצורה משמעותית", אזי זמן הריצה במקרה הגרוע ביותר יהיה.O() הבעיה נוצרת כאשר החלוקה לשתי קבוצות אינה מאוזנת ומשאירה קבוצה אחת שבגודלה קרובה מדי לגודל הקבוצה המקורית. נרצה שב כ ל שלב, האלגוריתם יב צ ע ח לוקה לשתי קבוצות כך שהגדולה עדיין קטנה משמעו תית מהק בוצ ה המקורית. ארב עת השל בים הראשונים של האלגוריתם הב א מוצ אים ח לוקה כז ו. cs,techio
Media/sort האלגוריתם i) Select(A, first, last, חלק את מערך הקלט A לחמישיות. מצא חציון של כל חמישייה. הכנס את החציונים למערך B (שגודלו בערך חמישית המערך A). הפעל את Select רקורסיבית על המערך B למציאת חציון של החציונים (נקרא לו x).. (x לפי A המערך (חלוקת s =Partitio(A,first,last,x) אם Select(A, first, s -, i), s first i Select(A, s, last, i - (s-first) ) אחרת,....4..6 8 האיברים בפינה הש מאלית גדולים א ו ש ו וים ל- x x האיברים בפינה הימ נ ית קט נים א ו שו ו ים ל- x
cs,techio 9 Media/sort ו רצ ונש תו צו בקה לד ו ג ח ותינ,םינויצ חה ןוי צ ח אוה x-ש ןויכ םנשיו תוחפלש םייקתמ,םינויצ ח / םינטק / /.x-ל םיווש וא.םינוש םירביאה לכש חיננ חותינה תוטשפ םשל ילוא טרפ) x -מ םינטקה םירביא השולש םנשי x-ל הווש וא ןטקה ןויצ ח לש הצו בק ל כ ב הב ה צ ובקלו םירביא השימח ןיא הב תחאה הצוב קל.(א צמנ x :תוחפל אוה x-מ םילודגה םירביאה רפסמ,המוד הרוצ ב 6 0,ןא כמ לש תיביסרוקר האירק לכב רתויה לכל אוה טלקה לדוג select. 6 0 7 6 0 :תוחפל אוה x-מ םינטקה םירביאה רפסמ ךכיפל
Media/sort ניתו ח ז מן הר יצ ה 7 T ( ) T T 6 O( נוסחת הנסיגה עבור זמן הריצה מקיימת: ( 0 טענה: O().T() = ההוכחה באי נדוקציה. 0 יהי d הק בוע הנח בא ב סימון O בנוסח ת הנסיגה 80 מתקיים יהי יהי נגדיר ) T ( (ברור שקיים!) c c = c = 80d c קבוע כך שעבור max{ c, c }. בסיס האינדוקציה: 80 T()c : הנחת האינדוקציה (80<) : לכל k< מתקיים T(k)c cs,techio
Media/sort T ( ) cs,techio נוסחת הנסיגה: ניתו ח ז מן הר יצ ה 7 T ( ) T T 6 O( ) 0 = c c c c c T()c : T(k)c מתקיים k< לכ ל : (>80) ( ) 7 c 6 0 c c( 7 6) 9 0 9 0 (7c 7c 7c 0 c d c 80 7 80 ) = d 7 80 c d c 7c בסיס האינדוק ציה: 80 d הנ חת האינדוק ציה צע ד ה אינדוק ציה: = c / 80 c / 80
Media/sort חסם תחתון למי ו ן ע"י השו וא ות מערך A לקבל ברצוננו נניח האיברים את ולסדר שונים איברים בן ממוינים פלט. במערך לדוגמא : פרמוטציה π מגדירה שונים מספרים בת סדרה כל על האינדקסים של הקלט. מערך 8 47 4 7 8 6 π()=6, π()=, π()=, π(4)=, π()=,π(6)=4 :σ=π - פרמוטציה וכן הופכית 8 47 7 8 σ()=, σ()=, σ()=, σ(4)=6, σ()=4, σ(6)= 4 6 מערך A פרמוטציה σ כקלט מקבל מיון אלגוריתם כפלט ומוציא כך שיתקיים [σ()] A[σ()] < A[σ()] < < A כל פרמוטציה אפשרית כפלט גודלו היחסי בסדרת הקלט. כיון שהאיבר ה-[ A[i יכול קיימות! פרמוטציות. לפי הפלט במערך מקום לכל להגיע cs,techio אפשרית? כמה שאלות צריכות כן/ לא שנותרת עד להישאל פרמוטציה אחת
Media/sort חסם תחתון למי ו ן ע"י השו וא ות (המשך ( נקבעת משפט : כל אלגוריתם מיון הפועל באמצעות השוואות בלבד דורש לפחות O() log - השוואות. הדגשה : האלגוריתם אינו מבצע, לדוגמא, פעולות אריתמטיות על סדרת הקלט. הוכחה : יהי Alg אלגוריתם מיון ע"י השוואות. לכל קלט האלגוריתם מבצע סדרה של השוואות אשר בסופן הפרמוטציה המתאימה למיון הקלט. נראה שקיימת סדרת קלט עבורה ידרשו ( Ω( log השוואות. π π = = { π π ( i) { π π ( i) < π ( > π ( j)} j)} לאחר השוואה אחת :A[i] A[j] הפרמוטציות לשתי קבוצות. קבוצת את נחלק π = { π π ( i) < π ( j), π ( l) < π ( k)} π π = { π π ( i) = { π π ( i) > π ( < π ( j), π ( l) j), π ( l) < π ( k)} > π ( k)} A[k] לאחר השוואה נוספת A[l] : הפרמוטציות לארבע קבוצות. קבוצת את נחלק π = { π π ( i) > π ( j), π ( l) > π ( k)} cs,techio k לאחר k השוואות יווצרו k קבוצות. נבחר קלט שקונסיסטנטי עם קבוצה זו מכילה לפחות /! k פרמוטציות. כאשר הקבוצה הגדולה הקבוצה הגדולה מבין הקבוצות. ביותר תהיה בגודל, התהליך הושלם.
Media/sort חסם תחתון למי ו ן ע"י השו וא ות (המשך ( 4! = π! > cs,techio e e log (!)!/ k קבוצה נוסחת ולכן: המכילה סטרלינג לפחות לעצרת: פרמוטציות לאחר בגודל תהיה השוואות. ( Θ(/ ) ) log(!) > log log log (!) > log e 9 log log log log 9 > > > נימוק מפורט לשורה הא ח רונ ה: מ.ש.ל מ.ש.ל log log log e e e log > e log
Media/sort נימו ק א לטר נטיבי ל ח סם בינרי. החלטות עץ ע"י לתיאור ניתן השוואות על המבוסס מיון אלגוריתם a :a > a :a a :a > > (,,) a :a (,,) a :a > > (,,) (,,) (,,) (,,) מצוינת פנימי צומת בכל מצוינת עלה בכל השוואה. פרמוטציה הקלט. את הממיינת.! השוואות). מתעלם זה מפעולות שאינן הוא העלים מספר ) ייצוג h > log (!) > log c h מספר ההשוואות העץ גובה הוא המקסימלי ומתקיים: cs,techio
Media/sort מיו ן BucketSort 6...k למיין בתחום שונים מספרים המשימה :.k נשתמש בוליאני A במערך באורך השיטה :. אפס את A.. בקלט לכל x בצע: = A[x]. המערך על עבור ואסוף: { i) for (i = ; i < k ; if (A[i] = = ) output i ; } הוא.,,, הוא = 6. k נניח דוגמא: = 4 וטווח המספרים שהקלט נניח 4 6 4 6.Θ(k).Θ(k),Θ(),Θ() המערך איפוס זמן: הקלט על מעבר איסוף סכ"ה cs,techio.θ() k = Θ() מקיים הטווח גודל אם נקבל אזי ליניארי מיון אלגוריתם
Media/sort היכ ן הק סם? 7 מדוע ההוכחה שנדרשים לפחות מהו בדיוק תנאי המשפט שמופר ( Ω( log השוואות אינה "תופסת". במיון.BucketSort log k השוואות בהוכחת המשפט כל השוואה נותנת תשובה בינרית: גדול או קטן. לעומת זאת, במיון BucketSort תוצאות "השוואה" אחת שוות ל- בינריות. כאשר גודל הטווח מקיים Θ() k = אזי אמנם נקבל אלגוריתם מיון ליניארי Θ() ואולם כל צעד מקביל ל- ( Θ(log השוואות בינריות. cs,techio
Media/sort הרחבת מיון BucketSort המשימה : למיין מספרים שאינם בהכרח שונים מהתחום k... השיטה : נשתמש במערך של k תורים. בזמן האיסוף נשרשר את התורים. 8.,,,,,, הוא = 6. k נניח דוגמא: = 7 וטווח המספרים הוא שהקלט נניח 4 6 הפלט שומר על סדר ההכנסה כאשר המפתחות שווים:,,,,,, הגדרה: שיטת מיון תקרא יציבה (Stable) כאשר מתקיים התנאי הבא: אם בקלט A[j] A[i] = וכן i, < j אזי A[i] יקדים את A[j] בפלט. BucketSort היא שיטת מיון יציבה. cs,techio
מיון RadixSort Media/sort אבחנה : שיטת BucketSort אינה יעילה כאשר המספרים לקוחים מתחום "רחב מדי" k.., כלומר ידרוש מערך גדול ובו 0 מקומות בעוד = כאשר. >> k לדוגמא מיון המספרים,,00 99999. (בדומה לבעיה שבגללה הצגנו את פונקציות הערבול). פתרון : נניח שכל מפתח מורכב מ- d ספרות עשרוניות. נמיין כל ספרה בנפרד תוך שימוש בשיטת מיון יציבה ) לדוגמא.(BucketSort ממוינות ראשונות (בניגוד אולי ספרות פחות משמעותיות (Least Sigificat Digits) LSD לאינטואיציה ראשונית). ממוין ממוין ממוין 9 9 47 67 89 46 70 70 46 47 67 9 89 70 9 46 89 47 67 9 46 47 67 70 89 cs,techio
Media/sort.(MSD) פר וצד ו ר ת RadixSort נס מ ן ב- את הספרה הפחות מ ש מ ע ותית (LSD) וב- d את הספרה המ שמ ע ות ית בי ותר 0 Radix-Sort(A,d) for i to d do use BucketSort to sort array A o digit i תרגיל: הוכחת נכונות באינדוקציה על d. היכן אתם משתמשים בעובדה ששיטת המיון בתוך הלולאה יציבה? היכן נכשלת ההוכחה כאשר ממיינים קודם את הספרות המשמעותיות ואח"כ את הספרות הפחות משמעותיות. דוגמא לכישלון המיון כאשר המיון נעשה בסדר שכזה: 9 47 67 89 46 70 9 47 46 67 70 89 9 70 46 89 47 67 70 46 47 67 9 89 cs,techio
Media/sort מכונת המיון של Hollerith cs,techio
Media/sort ניתו ח ז מן הר יצ ה.Θ() לכל ספרה עשרונית נבצע BucketSort בזמן.Θ(0) עבור d ספרות הזמן הכולל הוא Θ(d(0)). כלומר למספרים בבסיס 0 עם מספר ספרות d קבוע, המיון מתבצע בזמן עבור מספרים המיוצגים בבסיס, r לכל ספרה נבצע BucketSort בזמן.Θ(r) עבור d ספרות, הזמן הכולל הוא.Θ(d(r)) כאשר האיבר המקסימלי הוא, k מספר הספרות בבסיס r הוא log r k ואז הזמן הנדרש הוא k (r)). Θ(log r כלומר עבור k > ובסיס- r קבוע, הזמן הנדרש הוא ( Ω( log כפי שדרוש במיונים עם השוואות בלבד. cs,techio