עץ אדום שחור – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
Dvh (שיחה | תרומות)
מ שוחזר מעריכות של בית עקד ספרים (שיחה) לעריכה האחרונה של Lemonnada
שדדשכ (שיחה | תרומות)
אין תקציר עריכה
שורה 1:
[[קובץ:Red-black tree example.svg|שמאל|ממוזער|400px|דוגמה ל'''עץ אדום-שחור''', שהינו עץ מאוזן, אשר בו כל הקודקודים בעומק 0 ו-2 צבועים בשחור, וכל הקודקודים בעומק 1 ו-3 צבועים באדום]]
ב[[מדעי המחשב]], '''עץ אדום-שחור''' (ב[[אנגלית]]: '''Red-Black Tree''') הינו [[מבנה נתונים]] מסוג [[עץ (תורת הגרפים)|עץ]] [[עץ חיפוש|חיפוש]] [[עץ בינארי|בינארי]] [[עץ מאוזן|מאוזן]] בקירוב.
 
'''עץ אדום-שחור''' הוא מבנה נתונים מורכב יחסית, אך בשל היותו [[עץ מאוזן|מאוזן]] הוא שומר על [[סיבוכיות]] [[סיבוכיות זמן|זמן ריצה]] טובה, יעילה ומעשית עבור הפעולות השונות הנתמכות: "הכנסה", "הוצאה" ו"חיפוש" בזמן של <math>\ O(\log n)</math> במקרה הגרוע ביותר (כאשר <math>n</math> הוא מספר האיברים בעץ בעת ביצוע הפעולה).
שורה 24:
==מאפיינים==
עץ אדום שחור הוא עץ בינארי בו לכל צומת קיים שדה המגדיר צבע, שערכו אדום או שחור. בנוסף לדרישות הרגילות של עצי חיפוש בינאריים, עץ אדום שחור מקיים גם את הדרישות הבאות:
:1.# צומת הוא שחור או אדום (אחד מן השניים)
:2.# השורש הוא שחור (כלל זה לעתים מושמט מכיוון שצבע השורש תמיד יכול להשתנות מאדום לשחור אך לא תמיד להפך, אך השפעתו על ניתוח הסיבוכיות קטנה בכל מקרה)
:3.# כל העלים שחורים
:4.# שני ילדיו של צומת אדום הם שחורים
:5.# כל [[מסלול (תורת הגרפים)|מסלול פשוט]] מצומת מסוים לכל אחד מהצאצאים העלים שלו מכיל אותו מספר של צמתים שחורים (מספר זה מכונה "הגובה השחור" של העץ)
 
אילוצים אלו כופים הגדרה משמעותית על עצים אדומים שחורים: אורכו של המסלול הארוך ביותר מהשורש לכל אחד מן העלים הוא לכל היותר פעמיים אורכו של המסלול הקצר ביותר מהשורש לאחד העלים. התוצאה היא שהעץ מספיק מאוזן כדי לשמור על [[סיבוכיות]] טובה של הפעולות השונות, מכיוון שפעולות אלה דורשות במקרה הגרוע ביותר זמן יחסי לגובה העץ, הגבלת גובה העץ מגבילה גם את סיבוכיות הפעולות.
 
בנוסף, שלא כמו בעץ רגיל, כל צומת כולל [[מצביע]] גם להורה (ולא רק לילדיו) כדי לאפשר פעולות של שינוי מבנה העץ.
 
על מנת לראות מדוע מאפיינים אלה מבטיחים הגדרה זו, מספיק להבחין בכך שאף מסלול לא יכול להכיל שני צמתים אדומים ברצף, לפי מאפיין מספר 4. המסלול הקצר ביותר מכיל צמתים שחורים בלבד והמסלול הארוך ביותר מכיל לסירוגין צמתים אדומים ושחורים. בנוסף, כל המסלולים מהשורש לעלים מכילים מספר זהה של צמתים שחורים, לפי מאפיין מספר 5, ולכן אין מסלול הארוך פי שניים מאורכו של מסלול אחר.
שורה 39 ⟵ 41:
* הכנסה (Insert): הכנסת איבר לעץ, בצורה שתשמור על איזונו. ניתן לבצע בזמן של <math>\ O(\log n)</math>.
* הסרה (Remove): הסרת איבר מבוקש מהעץ. ניתן לבצע בזמן של <math>\ O(\log n)</math>.
"תיקון העץ" הוא <math>\ O(\log n)</math> במקרה הגרוע, אך ב[[ניתוח לשיעורין]] הוא לוקח <math>\ O(1)</math> בלבד.
 
מכיוון שפעולות אלו משנות את העץ התוצאה עלולה להפר את התכונות של העץ. כדי לשמור על תכונות העץ עלינו לשנות את צבעיהם של כמה מן הצמתים, ואף את מבנה ההצבעה.
שורה 64 ⟵ 67:
### צביעת הסבא של X באדום.
### כעת X מצביע לסבא של X.
## אחרת (הדוד שחור או לא קיים) בצע:
### אם האבא של X הוא בן שמאלי בצע:
#### אם X הוא בן ימני בצע:
שורה 81 ⟵ 84:
# צביעת השורש בשחור.
|}
 
במחיקת צומת משתמשים באלגוריתם מסובך עוד יותר, אך גם הוא מתבצע ב-<math>\ O(\log n)</math> פעולות.
 
==שימושים ויישומים==