סוג של מיון

carlos22

New member
סוג של מיון

המטרה למיין n מספרים בטווח 0 עד n^2-1 בסיבוכיות תטא של n . יש סיבה ש counting sort לא יעבוד ? יש פתרון אחר שמשתמש במיון radix לפי בסיס n בהצגת המספרים ומשתמש פעמיים בcounting sort. למה לא להשתמש פשוט פעם אחת במיון counting sort ?
 

danby

New member
הסברים

1) בשביל מיון מספרים בתחום 0 עד ל 2 בחזקת N אתה חייב 2 בחזקת N מונים. 2) הצעד הראשון במיון הזה הוא איפוס כל המונים. זהו צעד שלכאורה מתבצע בזמן לינארי, אבל זמן לינארי יחסית למס' המונים שלך. 3) מס' המונים בבעיה הוא אקפוננציאלי יחסית ל N. 4) לכן מיון ספירה (BUCKET SORT או COUNTING SORT) לא בא בחשבון במקרה הזה. לכן - כדי למיין בזמן לינארי ב N אתה חייב למיין באמצעות RADIX SORT. מקווה שעזרתי.
 

kand100

New member
לא ממש הבנתי.

הוא רוצה למיין מספרים בתחום 0 עד n^2-1 ולא עד 2 בחזקת n.
 

carlos22

New member
עדיין

בcounting sort אתה צריך לאפס מערך עזר באורך טווח המספרים שלך. אם טווח המספרים הוא בסדר גודל n^2 בזמן שאתה עובר על כל התאים במערך בשביל לאפס אותם אתה בעצם רץ זמן ריצה ריבועי. זה הכל ביחס למה אתה מסתכל, זמן הריצה הוא לינארי יחסית לגודל המערך עזר אבל הוא ריבועי יחסית לn עבורו אתחלנו את המערך.
 

danby

New member
הסברים

1) בשביל מיון מספרים בתחום 0 עד ל 2 בחזקת N אתה חייב 2 בחזקת N מונים. 2) הצעד הראשון במיון הזה הוא איפוס כל המונים. זהו צעד שלכאורה מתבצע בזמן לינארי, אבל זמן לינארי יחסית למס' המונים שלך. 3) מס' המונים בבעיה הוא אקפוננציאלי יחסית ל N. 4) לכן מיון ספירה (BUCKET SORT או COUNTING SORT) לא בא בחשבון במקרה הזה. לכן - כדי למיין בזמן לינארי ב N אתה חייב למיין באמצעות RADIX SORT. מקווה שעזרתי.
 

kand100

New member
לדעתי,

הסיבוכיות של counting sort היא תטא של n+k כאשר n הוא מספר איברי המערך ו- 0..k-1 זה התחום שבו נמצאים כל האיברים. במקרה שלנו : k=n^2 ולכן הסיבוכיות תהיה תטא של n^2. לעומת זאת ב-radix sort הסיבוכיות היא תטא של d*(n+k (אם משתמשים ב-counting sort) כאשר n מוגדר כמו קודם. k- התחום שבו נמצאות הספרות (לפי בסיס n , התחום הוא 0 עד n-1 ולכן k=n) d- שווה ל-2 במקרה שלנו (מספר הספרות המקסימלי של איבר) ולכן הסיבוכיות היא תטא של n במקרה של radix sort. אני לא מומחה גדול בנושא של מבני נתונים - אבל נראה לי שאני צודק....
 

W12X

New member
אם מדובר על DAST של העברית

תמיין עם RADIXSORT רק שבמקום למיין לפי ספרות תמיין לפי MODN וDIVN וככה אתה מגיע לתטא(N)
 
למעלה