רשת מיון

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

הגדרה

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

עומק ויעילות

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

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

לכל מספר נתון של קלטים ניתן לבנות רשת מיון עם מספר מתאים של חוטים באופן רקורסיבי על ידי הוספת חוט לרשת קטנה יותר. נניח שנתונה רשת מיון עם  חוטים (כלומר המצליחה למיין כל קלט של  מספרים). ניתן להרחיב את הרשת (בהשראת מיון הכנסה) על ידי הוספת חוט נוסף ובצוע סדרה של השוואות על החוטים שמוינו על ידי הרשת הנתונה (ראו איור 4). ניתן גם להשיג את המטרה (בהשראת מיון בועות) על ידי "השקעה" מוקדמת של הערך המינימלי ואחר כך מיון שאר הערכים בעזרת הרשת הנתונה (ראו איור 5). 
המבנה של שתי הרשתות המתקבלות הוא דומה. למעשה אם מסדרים את ההשוואות הניתנות לבצוע מקבילי זו מעל זו אזי ניתן לראות ששתי הרשתות למעשה זהות. ראו איורים 8-6. 
לרשתות האלה יש עומק של . זהו שיפור על הסיבוכיות של לפחות  פעולות השוואה הדרושות למיון טורי במקרה הגרוע. למעשה ניתן לבנות רשתות מיון עם סיבוכיות טובה אף יותר ובעלות עומק של  כפי שיתואר להלן.

בניית רשת מיון יעילה

ישנם מספר אלגוריתמים לבניית רשתות מיון פשוטות ויעילות בעלות עומק של  (ולכן גם גודל של ) כמו מיון ביטוני, מיון מיזוג זוגי-אי-זוגי של בטשר, מיון של, ורשת מיון בזוגות. ברשתות אלה נעשה שימוש מעשי. 
אפשר גם תאורטית לבנות רשתות מיון עם עומק מעריכי (לוגריתמי) לכל מספר של קלטים, בעזרת מבנה המכונה רשת AKS, על שם מגליו Ajtai, Komlós, Szemerédi. זאת הייתה תגלית חשובה אך ללא חשיבות מעשית בשל הקבועים החבויים בנוסחת הסיבוכיות שהם בגודל של "הרבה הרבה אלפים". זאת, בין השאר, בשל השימוש בגרף מרחיב. גרסה פשוטה יותר של רשת AKS הוצגה על ידי פטרסון אך גם כאן הקבועים מונעים כל שימוש מעשי. גודריך הציע בניה של רשת מיון בעלת עומק . הקבועים הפעם קטנים בהרבה מאשר ברשתות AKS, אך עומק של  לא נותן יתרון לבצוע מקבילי.