trees עצים ועצי חיפוש chapter 5.5– trees (91 – 97) chapter 13– binary search...
Post on 19-Dec-2015
224 views
TRANSCRIPT
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
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נסמן
. n2 קטן בכל גרף מ- mמספר הקשתות
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)צמתים עוקבים בסדרה,
הוא גרף G של גרף מכוון גרף התשתית (.(a,d,e,a) )לדוגמא, v1=vkאם אך ללא כוון. G ואותם קשתות כמו ב- Gכמו ב- לא-מכוון עם אותם צמתים
לדוגמא, הגרף בשקף הקודם הוא גרף התשתית של הגרף הנתון בשקף זה.
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
9trees
מסודריםעצים
הוא עץ מכוון עץ מסודר
שבו הבנים של כל צומת bמסודרים )משמאל לימין(. c
a
h i
d f
j k
ge
b
b c
a
h i
e f
j k
gd
b
למשל עץ זה שונה מהעץ העליון בגלל שסדר הבנים
השתנה.
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
באמצעות מצביעיםמימוש
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
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};
}: יש לשנות תוכנית זו כך שתחשב ערך של ביטוי אריתמטי.Iתרגיל
: יש לכתוב תוכנית זו ללא רקורסיה )תוך שימוש במחסנית(. IIתרגיל
#2 ע"י החלפת שורה :הערה נקבל מימוש של #3עם שורה
.inorderסיור
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
20trees עצים מימושים של מסודרים
:d אם לכל צמת דרגה
נתן לייצג עץ מדרגה כלשהי בצורה הבאה:
child[0] child[d-1]…child[1]
value)s(
first-child next-brother
value(s)
b
e f
a
d
g
ki
c
h j
a
b c d
e f
h i j k
g
cs,Technion
21trees
מסודריםעצים מה הקשר בין גובה העץ המקורי וגובה העץ הבינרי ?
a
b c d
e f
h i j k
g
hnew d horiginal כאשר ,d.הוא מספר הבנים המקסימלי בעץ המקורי
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
ומהו הגובה הממוצע ?
cs,Technion
31trees
גובה ממוצע
יוצר 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חיפוש בינרי הוא
32trees
בינרי חיפוש עץ של צפוי בניה זמןאקראית פרמוטציה מהכנסת המתקבל אקראי עץ בנית זמן את 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
cs,Technion
33trees
ההפרשים משואת פתרון
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
)(2)2)(1())1()1(n
j
jTnnnTn
)1()1(22)( nTnnnnT
cs,Technion
34trees
ההפרשים משואת פתרון)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)(
ngn
ng
)(log2)2(2
1
2)1(
1
2)( 1 nOHng
nnng
nng n
לכן
cs,Technion
35trees
עוד על המספר ההרמוני
nH nn
lnlim
)(ln)1
(...57721.0ln1
1nO
non
iH
n
in
אוילר קבוע
על קבוע אוילר:
...402431042651209008201532860605772156649.0
ספרות במכנה(10242,080 לא ידוע אם הוא רציונלי )אם כן, יש לו יותר מ-
אוילר, שהגדיר את הקבוע, ציין כי הוא "ראוי להתייחסות רצינית"