Upload
anson
View
51
Download
7
Embed Size (px)
DESCRIPTION
עצים ועצי חיפוש. חומר קריאה לשיעור זה. Chapter 5.5– Trees (91 – 97) Chapter 13– Binary Search Trees (244 – 262). Geiger & Itai, 2001. אברהם. יצחק. ישמאל. עשו. יעקב. 12 בנים. עוד 11בנים ובת. יוסף. מנשה. אפריים. *. +. +. 5. 3. -. /. 8. 6. 20. 10. עצים. דוגמאות - PowerPoint PPT Presentation
Citation preview
trees
חיפוש ועצי עצים
Chapter 5.5– Trees (91 – 97)
Chapter 13– Binary Search Trees (244 – 262)
זה לשיעור קריאה חומר
Geiger & Itai, 2001
cs,Technion
2trees
עצים
דוגמאות
. אילן יוחסין1
. ביטויים אריתמטיים2
אברהם
יצחקישמאל
עשויעקב
יוסף
מנשהאפריים
בנים 12
ובת 11עוד בנים
20 10
/
8 6
-
+
*
5 3
+
(5+3((*)20/10( + )8-6))
cs,Technion
3trees
עצים
. עץ מנצחים )גביע(3
צה"לחיל הים
חיל האווירחיל היבשה
שריוןתותחנים
...חי"ר
חטיבת צנחניםחטיבת הנח"ל
856גדוד ...
934גדוד 1 מחלקה 2 מחלקה
1 כיתה 2 כיתה
אלון אבוטבול
. מבנה היררכי4
הפועל חיפהמכבי חיפה
מכבי חיפה
מכבי חיפה מכבי ת"א
cs,Technion
4trees
- מכוונים לא (Undirected Graphs)גרפים
וקבוצת V המורכב מקבוצת צמתים ( V,E)גרף לא-מכוון הוא זוג . קשת V היא קבוצה בת שני איברים מתוך Eקשת ב- . Eקשתות
(.{i,j} )במקום הסימון המדויק יותר (i,j)מסומנת ע"י
V = a,b,c,d,e
E = (a,b), (a,d), (a,d) ,(b,c),(b,e),(c,c),(d,c),(d,e),(e,c)
קשת עצמית
., n = 5 m = 9. בדוגמא: | m = |E וכן|n = |Vנסמן
a b
d e
c
5trees
מכוונים (Directed Graphs)גרפים וקבוצת V המורכב מקבוצת צמתים ( V,E) הוא זוג גרף מכוון
E V X V.קשתות
V = a,b,c,d,e
E = (a,b),(a,d),(b,c),(b,e),(c,c),(d,c),(d,e),(e,a),(e,c)
., n = 5 m = 9. בדוגמא: | m = |E וכן|n = |Vנסמן
כך שלכל זוג (v1,v2,..,vk) הוא סדרת צמתים (V,E)בגרף )מכוון( )מכוון( מסלול )מכוון( מעגל. המסלול נקרא E היא קשת ב-(vi,vi+1)צמתים עוקבים בסדרה,
(.(a,d,e,a) )לדוגמא, v1=vkאם
a b
d e
c
cs,Technion
6trees
מכוונים עצים
הגדרות
v של בן u אם קיימת קשת מצומת u לצומת v .
u של אב v אם v בן של u .
דוגמאות
f בן של b
bשל אבe
הוא גרף מכוון ללא מעגלים )בגרף התשתית שלו( ואשר לו מקור עץ מכוון.שורשאחד בלבד הנקרא
b c
a
h i
d f
j k
ge
הוא צומת שאף קשת אינה מצביעה אליו.מקור
cs,Technion
7trees
מכוונים עציםהגדרות
v של צאצא u אם קיים מסלול מכוון מצומת uל - v .
u של אב-קדמון v אם v צאצא של u.
v הוא עץ מכוון שצמתיו הם v ששורשו Gתת-עץ של , והקשתות שלו הן הקשתות vעצמו וכל הצאצאים של
.Gהמחברות צמתים אלו ב-
.v היא מספר הבנים של vדרגת צומת
הוא צמת ללא בנים.עלה
דוגמאות
g צאצא של a
b אב-קדמון של h
gתת העץ ששורשו צמתים ושתי 3מכיל
קשתות.
.2 היא aדרגת
h .הוא עלה
הוא צומת צומת פנימישאינו עלה.
b c
a
h i
d f
j k
ge
cs,Technion
8trees
מכוונים עצים
הוא מספר vעומק של צומת vהקשתות משורש העץ אל
)המרחק מהשורש(.
הוא מספר vגובה של צומת לצאצא הרחוק ביותר vהקשתות מ-
)עלה(. vשל
הוא הגובה של שורשו.גובה העץ
2עומק
2גובה
b c
a
h i
d f
j k
ge
לעיתים נשמיט את הערה: החצים מתוך הבנה שכוון
הקשתות כלפי מטה. כמו כן לרוב נאמר עץ במקום עץ
מכוון.
b c
a
h i
d f
j k
ge
cs,Technion
10trees
בינריים עצים: עץ שבו לכל צומת שאינו עלה יש עץ בינרי
בן שמאלי ו/או בן ימני.
הוא מבנהעץ בינרי הגדרה רקורסיבית:
. ריק )ללא צמתים(, או 1
. מורכב משלושה חלקים: צומת הנקרא 2שורש, עץ בינרי הנקרא תת-עץ שמאלי, ועץ
בינרי הנקרא תת-עץ ימני.
cs,Technion
11trees בינריים מלאים ושלמיםעצים
: עץ שבו לכל צומת (full)עץ בינרי מלא בנים.2פנימי
: עץ בינרי מלא שבו (complete)עץ בינרי שלםכל העלים באותו עומק.
: עץ בינרי שלם עץ בינרי כמעט שלםשהוצאו ממנו עלים )"מצד ימין"(.
cs,Technion
12trees
שלמים בינריים עצים תכונות
:h עלים, וגובה L צמתים, nבעץ בינרי שלם בעל
i:ni = 2iמספר הצמתים בעומק 1.
L= nh= 2h מספר העלים:2.
122 :מספר הצמתים3. 1
00
hh
i
ih
i inn
:h = log2)n+1( - 1. הגובה4
:n - L = 2h - 1 = L - 1. מספר הצמתים הפנימיים5
0
1
2
3
cs,Technion
13trees לעצים מימוש "מערכי"בינריים
iבן שמאלי של צומת 2iנמצא ב-
iבן ימני של צומת 2i+1נמצא ב-
iאבא של של צומת i/2 נמצא ב-
a
1
b
2
c
3
d
4
e
5
f
6
g
7
h
8
i
9
j
10
k
11
l
12
m n o
0 1413 15
158 109 11 12 13 14
b c
a
h i j k
d e
l m n o
f g4 5 6 7
3
1
2
יעיל רק עבור עצים שלמים !
cs,Technion
14trees
באמצעות מצביעיםמימוש
class node{ DATA_Type value ;
struct node *left, *right;;}
valueleft right
מבנה צומת:
b
h i k
d e
b
e
k
d
ih
b
1
d
2
e
3
h
4
i
5
f
6
k
70
cs,Technion
15trees
בינרייםבעצים יםסיורpreorder
בקר בשורש
סייר בתת העץ השמאלי
סייר בתת העץ הימני
a b d e c f h g i
postorder
סייר בתת העץ השמאלי
סייר בתת העץ הימני
)חשוב ביטויים בקר בשורשאריתמטיים(
d e b h f i g c a
inorder
סייר בתת העץ השמאלי
בקר בשורש
סייר בתת העץ הימני
d b e a f h c i g
b c
a
d e
h i
f g
b c
a
d e
h i
f g
b c
a
d e
h i
f g
b c
a
d e
h i
f g
b c
a
d e
h i
f g
b c
a
d e
h i
f g
cs,Technion
16trees
חישוב והמרה של ביטויים אריתמטיים
postorder
סייר בתת העץ השמאלי
סייר בתת העץ הימני
)חשב את ערך הביטוי או הדפס(. בקר בשורש
5 3 + 20 10 / 8 6* + - postfix
inorder
סייר בתת העץ השמאלי
בקר בשורש )הדפס(
סייר בתת העץ הימני
(5+3((*)20/10(+)8-6))
+ +
*
5 3
10 8
/ -
620
infixכתיב פולנינקראים postfixביטויי
Łukasievicz ע"ש שם הלוגיקאי הפולני
אין צורך בסוגריים: לכל ביטויpostfixבביטוי
postfix!יש לכל היותר פרוק יחיד
cs,Technion
17trees
ביטוי ח באמצעות מחסניתpostfixישוב
5 5
3
8 8
2
8
20
postfixאלגוריתם לחישוב ביטוי
התחל עם מחסנית ריקה.1.
עבור על כל ביטוי משמאל לימין:2.
אם האיבר הבא הוא אופרנד- הכנס אותו למחסנית.3.
אם הוא פעולה – הפעל את הפעולה על שני האיברים4.
שבראש המחסנית והכנס את התוצאה למחסנית.
5 3 + 20 10 / 8 6 * + - :postfix8
2
8
6
8
2
2
8
4
328
20
10
8
2
8
cs,Technion
18trees
פרוצדורת postorderמימוש
void postorder (NODE *T)
{
if (T = = NULL) return;
else{
postorder( T left); /* 1/*
postorder( T right); /* 2/*
“ visit”; /* 3/*
return};
}
valueleft right
מבנה צומת:
נשתמש במימוש "מצביעי"
19trees
דוגמא לשימוש חביב
int height (NODE *T) {int L,R;
if (T = = NULL) return –1 else{
L = height(T left); R = height(T right); return 1 + max(L,R) ;
} }
פונקציה רקורסיבית לחישוב גובה העץ )דוגמא לסיור
postorder:)
cs,Technion
22trees
(Dictionary)מילון
פעולות:
)create)D יצירת מילון ריק. אתחול:•
)NULL. find)D,x או x שמפתחהD ב- החזר מצביע לרשומהחיפוש:•
)x.insert)D,x,info רשומה שמפתחה D הוסף ל- הוספה:•
)x.delete)D,x רשומה שמפתחה D סלק מ- הוצאה:•
מילון מאחסן אוסף של רשומות מהטיפוס )מפתח, אינפורמציה(. המפתח
.Uשונה )בד"כ( מרשומה לרשומה. אוסף המפתחות האפשריים מסומן ב-
מפתחות אפשריים לדוגמא: מספרים שלמים.
כללים:
• x שייך לקבוצת המפתחות U.
מופיע לכל היותר פעם אחת במילון )בדר"כ(.x כל •
cs,Technion
23trees מילון, מבנה חיפוש ועצי חיפוש
)למשל כאשר מפתח הוא Uפעולות נוספות כאשר מוגדר סדר על מספר(:
. D החזר את המפתח המינימלי ב-מינימום:
בעל המפתח הקטןDהחזר מצביע לאיבר במילון עוקב:
. x ביותר שגדול מ-
)במקרה הגרוע ביותר( )O)log n: לבצע את כל הפעולות בזמן מטרה.בזמן ביצוע הפעולה הוא מספר המפתחות הנמצאים במילון nכאשר
. היא משפחה של מימושים למבנה חיפושעצי חיפוש:
next)D,x(
min)D(
מילון + מינימום + עוקב נקרא מבנה חיפוש
cs,Technion
24trees
חיפוש כעץ בינרי עץ
x
zy
zxy
נשתמש בעץ בינרי מכוון.
בכל צומת נאחסן רשומה אחת מתוך המילון )או מפתח לאינפורמציה של הרשומה(.מצביעו
, כל xנשמור על הכלל הבא: עבור צומת כלשהו בעל מפתח וכל המפתחות בתת xהמפתחות בתת העץ השמאלי קטנים מ-
. xהעץ הימני גדולים מ-
cs,Technion
25trees
חיפוש כעץ בינרי עץ
לא בעץ.x ריק, דווח ש-Tאם 1.
הערך שבשורש.yיהי 2.
.x, החזר מצביע לצומת המחזיק את y=x אם 3.
.T, המשך את החיפוש בתת העץ השמאלי של y > xאם 4.
.T (, המשך את החיפוש בתת העץ הימני של y < x אחרת )כאשר 5.
3 20
8
1 7 11
רק: הערה מופיעים בציור. במלואן הרשומות ולא המפתחות
:)find)T,xאלגוריתם החיפוש
cs,Technion
26trees
חיפוש בעץ הכנסה
insert(T,4)
3 20
8
1 7 11
4
:)insert)T,xאלגוריתם הכנסה
.T בעץ החיפוש x חפש את1.
, עצור ודווח.T נמצא ב-xאם 2.
.v המפתח שנמצא ב-y ויהי x הצומת האחרון במסלול החיפוש של vיהי 3.
v
w
.v כבן שמאלי של x עם מפתח w הוסף צומת y>,x. אם 4
.v כבן ימני שלx עם מפתח w הוסף צומת , ( y < xכאשר . אחרת )5
27trees חיפוש מעץ – המקרים הוצאההקלים צומת בעץ המיועד להוצאה.v יהי :אלגוריתם הוצאה
עלה, סלק אותו.vאם 1.
להצביע על הבן.v בן יחיד, תן לאבא של vאם ל-2.
2
1 4
5
8
7 9
63
2
4
5
8
7 9
63
delete 1
2
4
5
8
7 9
63
2
3
5
8
7 9
6
delete 4
cs,Technion
28trees
חיפוש מעץ הוצאה צומת בעץ המיועד להוצאה.v. יהי אלגוריתם הוצאה
עלה, סלק אותו.vאם 1.
להצביע על הבן.v בן יחיד, תן לאבא של vאם ל-2.
)זהו הצומת המכיל את הערך הבא . inorder בסדר v הצומת העוקב ל-wאחרת: יהי 3. כלומר הצומת המתקבל ע"י פניה אחת ימינה ואח"כ כל הדרך שמאלה. vאחרי הערך שב-
בן אחד לכל היותר(.wשימו לב שלצומת
.w וצומת v. החלף בין צומת 4
כנדרש. 2 או 1 לכל היותר בן אחד. המשך בצעד v. כעת יש ל-5
2
3
5
8
7 9
6
2
3
6
8
7 9
delete 5v
w
w
v(.5 )צעד vנותר להוציא את
cs,Technion
29trees
נוספתדוגמא
2
3
5
8
7 9
7.5
2
3
7
8
9
delete 5v
w
w
7.5
v
2
3
7
8
9
w
7.5
vdelete “v”
cs,Technion
30trees
זמנים נתוח
זמן חיפוש/הכנסה/הוצאה הוא לינארי בגובה העץ.
מהו גובה העץ?
h= log n עץ שלם. מקרה טוב.
- h = n עץ הנראה כרשימה ליניארית. מקרה גרוע.1
ומהו הגובה הממוצע ?