שאלת מיונים!

GuestOfHonor

New member
שאלת מיונים!

נניח שיש לי n שלמים שערכם הוא בין 0 ל n²-1. איך אני ממיין אותם ב O(n) ?
 

shirbi

New member
איך? זה יקח O של N בריבוע, לא?

כלומר, המעבר על המערך לוקח O של N, אבל אח"כ צריך לעבור על כל ה"דליים" שאומנם רובם ריקים, אבל עדין צריך לעבור עליהם, וזה יקח כמספר ה"דליים" כלומר O של N בריבוע.
 

shirbi

New member
ואללה. עכשיו שנזכרתי מה זה

RADIX SORT, אז זה בהחלט נשמע לי אפשרי.
 

ron369

New member
ההודעה של ויני אינה רמז עבה יותר?

(איך אפשר לעשות רמז עבה מהפתרון עצמו?
)
 

vinney

Well-known member
זה לא ממש הפתרון../images/Emo13.gif

רק מיון דליים לא יספיק פה כמובן, כי אתה לא יודע שום דבר על פיזור הנתונים, אבל כחלק מRADIX זה יעבוד מצוין.
 

ron369

New member
אה...

אז כנראה רק עבור אדם חצי ישן זה הפתרון ממש
[איזה כיף כשיש לך תירוצים...] בכל מקרה, מה אם זה לא n^2? ברור שזה תקף לכל פולינום. אבל מה עם פונקציות על פולינומיאליות של החסם העליון על גודל הקלט? (למשל, את הקלט עם החסם n^lgn אפשר למיין בשיטה זו רק ב nlgn זמן. חישבתי.)
 

ron369

New member
גם נכון, אבל יש בהודעה שלי הגיון

(גם אם לא ברור בעליל) אני מתכוון, בשאלה שלו מופיע n^2 בתור חסם עליון (ממש) על גודל המספרים. ברור שלכל חסם של פולינום, אפשר ליצור אלגוריתם שעושה את זה (את הנדרש בשאלה: מיון ב-O(n). לאיזה פונקציות עוד אפשר לעשות זאת?
 

vinney

Well-known member
לא מבין...

אם החסם שלך הוא 2 בחזקת N, אתה לא יכול לעשות את זה?
 

vinney

Well-known member
לודע, לא חשבתי על זה ../images/Emo13.gif

אבל כנראה שלא, כי הטריק הוא שהייצוג של כל ספרה הוא לינארי בN.
 

GuestOfHonor

New member
הפיתרון, למי שזה מעניין אותו

מסתכלים על כל אחד מהמספרים בקלט כבן 2 ספרות. כל אחת בבסיס n (תגידו שזה לא מופרע... ). כל מספר בגודל 0..n²-1 אפשר באמת ליצג בצורה כזאת של מספר דו-ספרתי. כעת, מפעילים Radix Sort (פרק 8 בקורמן) , וזמן הריצה הוא לינארי. (2(n+n))O=O(n)
 
למעלה