מיון טופולוגי

מתוך ויקיפדיה, האנציקלופדיה החופשית

מיון טופולוגי הוא סידור של קבוצת איברים שקיימות ביניהם תלויות כך שאף איבר לא יופיע לפני איבר בו הוא תלוי. דוגמאות לבעיות המצריכות מיון טופולוגי:

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

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

אלגוריתם לביצוע מיון טופולוגי[עריכת קוד מקור | עריכה]

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

אלגוריתם נוסף בסיבוכיות זהה:

קטע הקוד הבא הוא פסאודו קוד.

TopSort(G)
    k=0
    while  s.t. s's indegree = 0
        Sorted[k]=s
        k++
        remove s and all its outgoing edges
    if k=n then successful
    else failed


לקריאה נוספת[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]