trees
חיפוש ועצי עצים
Chapter 5.5– Trees (91 – 97)
Chapter 13– Binary Search Trees (244 – 262)
זה לשיעור קריאה חומר
Lecture3 of Geiger & Itai’s slide brochure
www.cs.technion.ac.il/~dang/courseDS
Geiger & Itai, 2001
trees
cs,Technion
2
עצים
דוגמאות
ן. 1 יל� ין א� ס� �ח �י
אברהם
יצחקישמאל
עשויעקב
יוסף
מנשהאפריים
בנים 12
ובת 11עוד בנים
trees
cs,Technion
3
. ביטויים אריתמטיים2
20 10
/
8 6
-
+
*
5 3
+
(5+3(( * )20/10( + )8-6))
עצים
(5+3 ) ((20/10( + )8-6))
(20/10 ) (8-6)
trees
cs,Technion
4
עצים
. עץ מנצחים )גביע(3
צה"לחיל הים
חיל האווירחיל היבשה
שריוןתותחנים
...חי"ר
חטיבת צנחניםחטיבת הנח"ל
856גדוד ...
934גדוד 1 מחלקה 2 מחלקה
1 כיתה 2 כיתה
אלון אבוטבול
. מבנה היררכי4
הפועל חיפהמכבי חיפה
מכבי חיפה
מכבי חיפה מכבי ת"א
trees 5
מכוונים (Directed Graphs)גרפים V צמתים( המורכב מקבוצת V,E) הוא זוג גרף מכוון
E V X VV = 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נסמן
a b
d e
c
trees
cs,Technion
6
- מכוונים לא (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נסמן
. n2 קטן בכל גרף מ- mמספר הקשתות
a b
d e
c
trees 7
מכוונים לגרפים (Directed Graphs)הגדרות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)
( כך שלכל זוג v1,v2,..,vk( הוא סדרת צמתים )V,E)בגרף )מכוון( )מכוון( מסלול. E( היא קשת ב-vi,vi+1צמתים עוקבים בסדרה, )
((. a,d,e,a )לדוגמא, )v1=vk )מכוון( אם מעגלהמסלול נקרא
G הוא גרף לא-מכוון עם אותם צמתים כמו ב-Gשל גרף מכוון גרף התשתית אך ללא כוון. לדוגמא:Gואותם קשתות כמו ב-
a b
d e
c
a b
d e
c
trees
cs,Technion
8
מכוונים עצים
הגדרות
v של בן u אם קיימת קשת מצומת u לצומת v .
u של אב v אם v בן של u .
דוגמאות
f בן של b
b אב של e
הוא גרף מכוון ללא מעגלים )בגרף התשתית שלו( ואשר לו מקור עץ מכוון.שורשאחד בלבד הנקרא
b c
a
h i
d f
j k
ge
הוא צומת שאף קשת אינה מצביעה אליו.מקור
trees
cs,Technion
9
מכוונים עציםהגדרות
v א צ" א$ . v ל- u אם קיים מסלול מכוון מצומת u של צ%
u מון ד' .u צאצא של v אם vשל אב ק(
v הוא עץ מכוון שצמתיו הם v ששורשו Gתת-עץ של יםעצמו וכל א� צ� Hא Iצ Kשל ה v והקשתות שלו הן הקשתות ,
.Gהמחברות צמתים אלו ב-
.v היא מספר הבנים של vדרגת צומת
הוא צמת ללא בנים.עלה
דוגמאות
g צאצא של a
b אב-קדמון של h
gתת העץ ששורשו צמתים ושתי 3מכיל
קשתות.
.2 היא aדרגת
h.הוא עלה
הוא צומת צומת פנימישאינו עלה.
b c
a
h i
d f
j k
ge
trees
cs,Technion
10
מכוונים עצים
הוא מספר 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
trees
cs,Technion
11
מסודריםעצים
הוא עץ מכוון עץ מסודר
שבו הבנים של כל צומת bמסודרים )משמאל לימין(. c
a
h i
d f
j k
ge
b
b c
a
h i
e f
j k
gd
b
למשל עץ זה שונה מהעץ העליון בגלל שסדר הבנים
השתנה.
trees
cs,Technion
12
בינריים עצים: עץ שבו לכל צומת שאינו עלה יש עץ בינרי
בן שמאלי ו/או בן ימני.
הוא מבנהעץ בינרי הגדרה רקורסיבית:
. ריק )ללא צמתים(, או 1
. מורכב משלושה חלקים: צומת הנקרא 2שורש, עץ בינרי הנקרא תת-עץ שמאלי, ועץ
בינרי הנקרא תת-עץ ימני.
trees
cs,Technion
בינריים 13 מלאים ושלמיםעצים
: עץ שבו לכל צומת (full)עץ בינרי מלא בנים.2פנימי
: עץ בינרי מלא שבו (complete)עץ בינרי שלםכל העלים באותו עומק.
: עץ בינרי שלם עץ בינרי כמעט שלםשהוצאו ממנו עלים )"מצד ימין"(.
trees
cs,Technion
14
שלמים בינריים עצים תכונות
: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
trees
cs,Technion
מימוש "מערכי" לעץ שלם15בינרי
iבן שמאלי של צומת 2iנמצא ב-
iבן ימני של צומת i +1 2נמצא ב-
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
יעיל רק עבור עצים שלמים או כמעת שלמים !
trees
cs,Technion
16
באמצעות מצביעיםמימוש
typedef struct node{ DATA_Type value ;
struct node *left, *right; } NODE;
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
trees
cs,Technion
17
בעצים ים �ר� �ו בינרייםס�יpreorder
ר Tק Kשורש בב
ר Tי Kשמאלי בתת העץ הס
ר Tי Kימני בתת העץ הס
a b d e c f h g i
postorder
ר Tי Kשמאלי בתת העץ הס
ר Tי Kימני בתת העץ הס
ר Tק Kחשוב ביטויים שורש בב( אריתמטיים(
d e b h f i g c a
inorder
ר Tי Kשמאלי בתת העץ הס
ר Tק Kשורש בב
ר Tי Kימני בתת העץ הס
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
trees
cs,Technion
18
ה של ביטויים אריתמטיים ר" מ" ה( חישוב ו'
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!יש לכל היותר פרוק יחיד
trees
cs,Technion
19
באמצעות מחסנית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
trees
cs,Technion
20
פרוצדורת postorderמימוש
void postorder (NODE *T)
{
if (T = = NULL) return;
else{
postorder( T left); /* 1/*
postorder( T right); /* 2/*
“ visit”; /* 3/*
return};
}
: יש לשנות תוכנית זו כך שתחשב ערך של ביטוי אריתמטי.Iתרגיל
: יש לכתוב תוכנית זו ללא רקורסיה )תוך שימוש במחסנית(. IIתרגיל
#2 ע"י החלפת שורה :הערה נקבל מימוש של #3עם שורה
.inorderסיור
valueleft right
מבנה צומת:
נשתמש במימוש "מצביעי"
trees 21
דוגמא לשימוש חביב
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:)
trees
cs,Technion
מימושים של עצים 22מסודרים
:d אם לכל צמת דרגה
child[0] child[d-1]…child[1]
value)s(
b
e f
a
d
g
ki
c
h j
trees
cs,Technion
מימושים של עצים 23מסודרים
נתן לייצג עץ מדרגה כלשהי ע"י עץ בינרי:
first-child next-brother
value(s)
a
b c d
e f
h i j k
g
trees
cs,Technion
24
מסודריםעצים מה הקשר בין גובה העץ המקורי וגובה העץ הבינרי ?
a
b c d
e f
h i j k
g
hnew d horiginal כאשר ,d.הוא מספר הבנים המקסימלי בעץ המקורי
trees
cs,Technion
25
(Dictionary)מילון
פעולות: )create)D יצירת מילון ריק. אתחול:• )NULL. find)D,x או x שמפתחהD החזר מצביע לרשומה ב- חיפוש:• )x.insert)D,x,info רשומה שמפתחה D הוסף ל- הוספה:• )x.delete)D,x רשומה שמפתחה D סלק מ- הוצאה:•
שומותמילון מאחסן אוסף של kמהטיפוס )מפתח, אינפורמציה(. ר
המפתח שונה )בד"כ( מרשומה לרשומה.
. לדוגמא: מספרים שלמים.Uאוסף המפתחות האפשריים מסומן ב-
כללים:• x שייך לקבוצת המפתחות U. מופיע לכל היותר פעם אחת במילון )בדר"כ(.x כל •
trees
cs,Technion
מילון, מבנה חיפוש ועצי 26חיפוש
)למשל כאשר מפתח הוא Uפעולות נוספות כאשר מוגדר סדר על מספר(:
. D החזר את המפתח המינימלי ב-מינימום:
בעל המפתח הקטןD החזר מצביע לאיבר במילון עוקב:
. x ביותר שגדול מ-
)במקרה הגרוע ביותר( )O)log n: לבצע את כל הפעולות בזמן מטרה.בזמן ביצוע הפעולה הוא מספר המפתחות הנמצאים במילון nכאשר
. היא משפחה של מימושים למבנה חיפושעצי חיפוש:
next)D,x(
min)D(
מבנה חיפושמילון + מינימום + עוקב נקרא =
trees
cs,Technion
27
חיפוש כעץ בינרי עץ
x
zy
zxy
נשתמש בעץ בינרי מכוון.
לאינפורמציה מצביעבכל צומת נאחסן רשומה אחת מתוך המילון )או מפתח ושל הרשומה(.
, כל המפתחות בתת x: עבור צומת כלשהו בעל מפתח נשמור על הכלל הבא. x וכל המפתחות בתת העץ הימני גדולים מ- xהעץ השמאלי קטנים מ-
trees
cs,Technion
28
456220
420145
156
122
120
20
1007035
8837
6330
60
find)70,T(
T
find)80,T(insert)80,T(
80findסיבוכיות
O)h(
insertסיבוכיות O)h(
trees
cs,Technion
29
456220
420145
156
122
120
20
1007035
8837
6330
60
T
80
insert)121,T(
121
max)T(
maxסיבוכיות O)h(
אם שומרים מצביע לאבר maxסיבוכיות המכסימלי
O(1)
trees
cs,Technion
30
456220
420145
156
122
120
20
1007035
8837
6330
60
80
121
T
delete)100,T(
1deleteמקרא
trees
cs,Technion
32
456220
420145
156
122
120
20 70
35
37
6330
60
80
121
T
delete)122,T(
3מקרא
deleteסיבוכיות O)h(
trees
cs,Technion
33
חיפוש כעץ בינרי עץ
לא בעץ.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אלגוריתם החיפוש
trees
cs,Technion
34
חיפוש בעץ הכנסה
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
trees חיפוש 35 מעץ – המקרים הוצאההקלים צומת בעץ המיועד להוצאה.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
trees
cs,Technion
36
חיפוש מעץ הוצאה צומת בעץ המיועד להוצאה.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נותר להוציא את
trees
cs,Technion
37
נוספתדוגמא
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”
trees
cs,Technion
38
סיבוכיות הפעולות:
סיבוכיות function פעולה
O(1) create)D( אתחול
O(h) find)D,x( חיפוש
O(h) insert)D,x,info( הוספה
O(h) delete)D,x( הוצאה
O(h) → O(1) min)D( מינימום
O(h) → O(1) next)D,x( עוקב
trees
cs,Technion
39
זמנים נתוח
זמן חיפוש/הכנסה/הוצאה הוא לינארי בגובה העץ.
מהו גובה העץ?
h= log n עץ שלם. מקרה טוב.
- h = n עץ הנראה כרשימה ליניארית. מקרה גרוע.1
ומהו הגובה הממוצע ?
trees 40
cs,Technion
גובה ממוצע
יוצר 1,2,3 ברור שצורת העץ נקבעת על פי סדר ההכנסה )למשל הסדרשיוצר עץ מאוזן(.2,1,3שרשרת לעומת
!.n צמתים לעץ הוא nמספר אפשרויות )הסדרים( להכניס
.i את גובה העץ הנוצר בסדר ה-)h)iנסמן ב-
הגובה הממוצע מוגדר כדלקמן:
!
1
)(!
1 n
i
ihn
h
)O)log nניתן להראות שהגובה הממוצע הוא
.)O)log nכלומר בממוצע כל הפעולות מתבצעות בזמן
בספר הלימוד( מושמטת. 254-258ההוכחה )עמודים
נבחן טענה דומה אך קלה יותר להוכחה:
.)O)n log nזמן בניה ממוצע של עץ חיפוש בינרי הוא
trees 41
בינרי חיפוש עץ של צפוי בניה זמןאקראית פרמוטציה מהכנסת המתקבל אקראי עץ בנית זמן את an …a1נחשב
. ריק לעץ
הוא האיברים שסדר bn …b1נניח
צמתים. nאת מספר ההשוואות הממוצע הדרוש לבניית עץ בן T(n)נסמן ב-
צמתיםj-1 הוא מספר ההשוואות הממוצע הדרוש לבניית עץ בן T(j-1)לפיכך
צמתים.n-j הוא מספר ההשוואות הממוצע הדרוש לבניית עץ בן )T)n-jו-
משוואת ההפרשים המתאימה:
)0)0(()()1()1(1
)(1
TjnTjTnn
nTn
j
bj-1 …b1 bn …bj+1
bja1
trees
cs,Technion
42
ההפרשים משואת פתרון
1
11
)(2
)1()()1()1(1
)(n
j
n
j
jTn
njnTjTnn
nT
1
1
)(2)1()(n
j
jTnnnnT
)1(2)1(2)1()1()( nTnnTnnnT
2
1
( 1) ( 1) ( 1)( 2) 2 ( )n
j
n T n n n T j
)1()1(22)( nTnnnnT
)0)0(()()1()1(1
)(1
TjnTjTnn
nTn
j
trees
cs,Technion
43
ההפרשים משואת פתרון)1()1(22)( nTnnnnT
n
nT
nnnn
nT )1(
)1(
2
1
2
1
)(
n
nT
n
)1(
1
2
)log()()(log1
)(nnOnTnO
n
nT
נגדיר1
)()(
n
nTng
)1(1
2)(
ng
nng
)(log2)2(2
1
2)1(
1
2)( 1 nOHng
nnng
nng n
לכן