תור עדיפויות
במדעי המחשב, תור עדיפויות (או, בשם אחר, תור קדימויות, באנגלית: Priority Queue) הוא מבנה נתונים מופשט המיישם לוגיקת תור, אך אינו מבוסס כתור רגיל על סדר הכניסה בלבד (באנגלית: FIFO - First In First Out), אלא הוא מבוסס על קוד עדיפות (באנגלית: priority), המסופח לאובייקט המוכנס לתור וככל שערך קוד העדיפות של האובייקט גבוה יותר (לפי סדר מלא כלשהו על קבוצת הערכים המשמשים לסמן את העדיפות), כך יקודם מקומו בתור (מיד עם כניסתו).
פעולות על מבנה הנתונים
[עריכת קוד מקור | עריכה]תור עדיפויות תומך בפעולות הבאות:
- הכנסה עם עדיפות - ערך יוכנס לתור לפני הערך עם העדיפות הגבוהה ביותר בתור, שעדיין נמוכה מהערך המוכנס, לפי סדר המלא שהוגדר.
- הוצאה - הערך עם העדיפות הגבוהה ביותר לפי יחס הסדר המלא שהוגדר, יוצא מהתור.
- הצצה - הערך שהיה מוצא מהתור אם הייתה מתבצעת פעולת ההוצאה יוחזר, מבלי שיוצא מהתור. כמו במחסנית, גם בתור עדיפויות פעולת ההצצה היא אופציונלית, וניתנת למימוש על ידי שילוב של הוצאה והכנסה.
אפשר להגיד שתור פשוט הוא מקרה פרטי של תור עדיפויות, כשהעדיפות נקבעת לפי סדר ההכנסה לתור. באופן דומה, מחסנית היא מקרה פרטי של תור עדיפויות. עם זאת, בפשטות ההגדרה של העדיפות במקרים של תור ומחסנית מאפשרים מימוש יעיל יותר מזה של תור עדיפויות כללי.
ניתוח סיבוכיות
[עריכת קוד מקור | עריכה]בניגוד לחלק ממבני הנתונים הפשוטים יותר, הסיבוכיות של פעולות בתור עדיפויות היא תלוית מימוש. בחירת המימוש בדרך כלל תלויה בצרכי המערכת. המימושים הנפוצים ביותר הם:
- רשימה מקושרת ממוינת: במימוש כזה, ההכנסה תתבצע בסיבוכיות , ואילו ההוצאה או הצצה - בסיבוכיות .
- רשימה מקושרת לא ממוינת: במימוש כזה, ההכנסה תתבצע בסיבוכיות , ואילו ההוצאה או הצצה - בסיבוכיות .
- ערימת פיבונאצ'י: במימוש כזה, ההכנסה או הצצה תתבצע בסיבוכיות , ואילו ההוצאה בסיבוכיות . זמנים אלו הם amortized. במימוש על ידי Strict Fibonacci heap, הזמנים יהיו במקרה הגרוע.
ישנם אלגוריתמים למימוש תור עדיפויות המאפשרים ביצוע כל הפעולות בסיבוכיות [1], ו[2], אך הם מורכבים יותר, ודרישות הזיכרון שלהם לא מצדיקות לרוב שימוש בהם.
שימושים נפוצים
[עריכת קוד מקור | עריכה]דוגמאות לשימוש במבנה הנתונים:
- מערכות הפעלה רבות משתמשות בתורי עדיפויות, למשל סדרן התוכניות (Scheduler) הקובע את סדר הרצת התוכניות במחשב, ולוקח בחשבון פרמטרים כמו זמן ריצת התוכנית, גודלה ועוד.
- שרתי אינטרנט משתמשים לעיתים בתורי עדיפויות על מנת לתעדף תשובות לבקשות נכנסות.
- נתבי תקשורת משתמשים בתורי עדיפויות לנהל את התקשורת לפי עדיפויות חלוקת רוחב פס. למשל, תעבורת וידאו תזכה לעדיפות גבוהה יותר בדרך כלל, ותעבור בנתבים לפני תעבורת דואר אלקטרוני או שמע הרגישות פחות לעיכובים.
ראו גם
[עריכת קוד מקור | עריכה]לקריאה נוספת
[עריכת קוד מקור | עריכה]- Thomas H. Cormen, Charles E. Leiserson], Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 6.5: Priority queues, pp. 138–142.
הערות שוליים
[עריכת קוד מקור | עריכה]- ^ P. van Emde Boas. Preserving order in a forest in less than logarithmic time. In Proceedings of the 16th Annual Symposium on Foundations of Computer Science, pages 75-84. IEEE Computer Society, 1975.
- ^ Michael L. Fredman and Dan E. Willard. Surpassing the information theoretic bound with fusion trees. Journal of Computer and System Sciences, 48(3):533-551, 1994
מבני נתונים | ||
---|---|---|
מבנים מופשטים | רשימה • מחסנית • קבוצה • מולטי קבוצה • תור • דו-תור • תור עדיפויות • מילון • מחרוזת • איחוד קבוצות זרות | |
מימושים ליניאריים | מערך • מערך משונן • טבלת גיבוב • רשימה מקושרת • רשימת דילוגים • חוצץ | |
גרפים ועצים | ערימה (בינארית • בינומית • פיבונאצ'י) • עץ חיפוש (עץ אדום שחור • עץ 2-3 • עץ 2-3-4) • עץ סיפות • עץ B • עץ +B • עץ AVL • עץ Splay • עץ BSP • עץ kd • עץ R • Trie • X-fast trie • טריי y מהיר• עץ WAVL | |
הסתברותיים | מסנן בלום |