לדלג לתוכן

תור ישראלי

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


שגיאות פרמטריות בתבנית:מקורות

פרמטרי חובה [ נושא ] חסרים

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

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

היתרון של תור זה בא לידי ביטוי במקרים שהמערכת צריכה משאבים זהים ע״מ לשרת אובייקטים ׳חברים׳, במצב כזה עדיף לשרת את כל ה׳חברים׳ ברצף ולא לשחרר משאבים ולאחר מכן להקצותם מחדש.

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


תור ישראלי
סיבוכיות מקום וזמן
ממוצע במקרה הגרוע
זיכרון:
חיפוש:
הכנסה:
הוצאה:
הצצה:

מימוש לדוגמה[עריכת קוד מקור | עריכה]

# each item has a value and a list of friends

class Israeli_Queue:
    def __init__(self):
        self.queue = []

    def add_item(self, item):
        for i, val in enumerate(self.queue):
            if val.is_friend(item):
                self.queue.insert(item, i + 1)
                return
        self.queue.append(item)
            
    def peek(self):
        return self.queue[0]
    
    def pop(self):
        return self.queue.pop(0)