מיון בסיס – הבדלי גרסאות

מתוך ויקיפדיה, האנציקלופדיה החופשית
תוכן שנמחק תוכן שנוסף
Itzik990 (שיחה | תרומות)
בדוגמת הרצה שניתנה, לא נכון לציין "הסיבית" מאחר ולא מדובר על סיבית אלא על ספרה [שמיוצגת כמובן על ידי סיביות רבות].
←‏דוגמת הרצה: הסרת י' מיותרים
שורה 18: שורה 18:
:{{משמאל לימין|170, 45, 75, 90, 802, 2, 24, 66}}
:{{משמאל לימין|170, 45, 75, 90, 802, 2, 24, 66}}


נמיין את הרשימה לפי הסיפרה הכי פחות משמעותית, סיפרת האחדות:
נמיין את הרשימה לפי הספרה הכי פחות משמעותית, ספרת האחדות:


:{{משמאל לימין|17'''0''', 9'''0''', 80'''2''', '''2''', 2'''4''', 4'''5''', 7'''5''', 6'''6'''}}
:{{משמאל לימין|17'''0''', 9'''0''', 80'''2''', '''2''', 2'''4''', 4'''5''', 7'''5''', 6'''6'''}}
שורה 24: שורה 24:
:<small>כדאי לשים לב ש-802 בא לפני 2, מכיוון ש-802 הופיע לפני 2 ברשימה המקורית. אותו דבר קורה גם עבור הזוגות 170, 90 ו-45, 75.</small>
:<small>כדאי לשים לב ש-802 בא לפני 2, מכיוון ש-802 הופיע לפני 2 ברשימה המקורית. אותו דבר קורה גם עבור הזוגות 170, 90 ו-45, 75.</small>


נמיין את הרשימה לפי הסיפרה הבאה, סיפרת העשרות:
נמיין את הרשימה לפי הספרה הבאה, ספרת העשרות:


:{{משמאל לימין|8'''0'''2, 2, '''2'''4, '''4'''5, '''6'''6, 1'''7'''0, '''7'''5, '''9'''0}}
:{{משמאל לימין|8'''0'''2, 2, '''2'''4, '''4'''5, '''6'''6, 1'''7'''0, '''7'''5, '''9'''0}}
שורה 30: שורה 30:
:<small>שימו לב ששוב 802 בא לפני 2 מכיוון ש-802 בא לפני 2 ברשימה הקודמת.</small>
:<small>שימו לב ששוב 802 בא לפני 2 מכיוון ש-802 בא לפני 2 ברשימה הקודמת.</small>


לבסוף, נמיין את הרשימה לפי הסיפרה המשמעותית ביותר:
לבסוף, נמיין את הרשימה לפי הספרה המשמעותית ביותר:


:{{משמאל לימין|2, 24, 45, 66, 75, 90, '''1'''70, '''8'''02}}
:{{משמאל לימין|2, 24, 45, 66, 75, 90, '''1'''70, '''8'''02}}

גרסה מ־21:40, 29 בדצמבר 2021

מיון בסיס של 3 עמודות ו-10 אפשרויות לכל ספרה.

מיון בסיס (Radix sort) הוא אלגוריתם מיון של מספרים המסתמך על כך שמספר הספרות בייצוג המספרים חסום על ידי קבוע. (למשל: מספר הספרות בייצוג המספר 1234567 הוא 7).

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

מיון הבסיס מתבצע בדרך כלל בזמן ריצה של , כאשר n הוא גודל הקלט ו-k הוא מספר הספרות המקסימלי בכל מספר.

מהלך האלגוריתם

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

  1. מיון כל המספרים בקבוצה ל־10 קבוצות, על פי ספרת האחדות שלהם.
  2. מיון יציב (מספרים בעלי אותו ערך יישארו באותו סדר גם לאחר המיון) של כל המספרים מהקבוצות שהתקבלו שוב, ל־10 קבוצות, על פי ספרת העשרות של כל מספר, תוך כדי שמירה על סדר המספרים בתוך כל קבוצה, לפי המיון של השלב הקודם.
  3. המשך מיון המספרים על פי הספרה החשובה יותר (מאות, ואז אלפים, ואז עשרות אלפים וכן הלאה), תוך שמירת סדר המספרים בכל קבוצה לפי המיון של השלב הקודם לשלב הנוכחי.

דוגמת הרצה

נביט ברשימה הלא ממוינת הבאה:

170, 45, 75, 90, 802, 2, 24, 66

נמיין את הרשימה לפי הספרה הכי פחות משמעותית, ספרת האחדות:

170, 90, 802, 2, 24, 45, 75, 66
כדאי לשים לב ש-802 בא לפני 2, מכיוון ש-802 הופיע לפני 2 ברשימה המקורית. אותו דבר קורה גם עבור הזוגות 170, 90 ו-45, 75.

נמיין את הרשימה לפי הספרה הבאה, ספרת העשרות:

802, 2, 24, 45, 66, 170, 75, 90
שימו לב ששוב 802 בא לפני 2 מכיוון ש-802 בא לפני 2 ברשימה הקודמת.

לבסוף, נמיין את הרשימה לפי הספרה המשמעותית ביותר:

2, 24, 45, 66, 75, 90, 170, 802

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

זמן ריצה

עקרונית, זמן הריצה של האלגוריתם הוא , כאשר n הוא כמות המספרים בקלט, k הוא מספר הספרות המקסימלי בכל מספר ו-d הוא הבסיס בו המספרים נתונים. עם זאת, לרוב המספרים נתונים בבסיס ידוע, כך שלכל בסיס שהוא מתקיים ולכן זמן הריצה יהיה .

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

חשוב לשים לב שלא בכל המקרים , והדבר תלוי ביחס שבין גודל הקלט למספר הספרות בכל מספר (לדוגמה, שני מספרים בעלי 10 ספרות עשרוניות ימוינו מהר יותר במיון מיזוג מאשר במיון בסיס).

ראו גם

קישורים חיצוניים