Trees CLRS: chapter 12
description
Transcript of Trees CLRS: chapter 12
![Page 1: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/1.jpg)
1
TreesCLRS: chapter 12
![Page 2: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/2.jpg)
2
A hierarchical combinatorial structure
הגדרה רקורסיבית:
צומת בודד. זהו גם שורש העץ.. 1
הינם עצים, ניתן לבנות עץ T1….TK הוא צומת ו nאם . 2 הינם “תתי עצים”.T1….TK השורש ו n חדש שבו
T1 TKn
T1 TK
n
. . .
![Page 3: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/3.jpg)
3
r
c1 c2 c3
s1.1 s1.2 s1.3 s2.1 s2.2 s3.1
מושגים:
r - /הורהParent( של )אבאc1, c2, c3
c1, c2 - /ילדיםchildren של r
s2.1 - /צאצאDescendant( של )לא ישירr
r,c1,s1.2 - /מסלולPath( א הורה של הקודם”אם כ)
= מס’ הקשתותאורך המסלול = מס’ הצמתים )פחות אחד(
Leafעלה/צומת ללא ילדים =
r - /אב קדמוןAncestor של s3.1
Terminology
![Page 4: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/4.jpg)
April 21, 2023
(height - אורך המסלול הארוך ביותר מהשורש לעלה )גובה העץ
(depth - אורך המסלול מהצומת לשורש )עומק צומת
Ordered tree
יש משמעות לסדר הילדים. מסדרים משמאל לימין.
a
b C
a
C b
( unordered tree) עץ לא מסודראם הסדר לא חשוב -
![Page 5: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/5.jpg)
April 21, 2023
}ילד ימני, ילד שמאלי{ עץ ריק או לכל צומת יש תת קבוצה של-
דוגמא:
בינאריים עצים
Full : each internal node always has both children
![Page 6: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/6.jpg)
6
The dictionary problem
• Maintain (distinct) items with keys from a totally ordered universe subject to the following operations
• E.g.: 5, 19, 2, 989, 7 • ( < > = order )
![Page 7: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/7.jpg)
7
The ADT
• Insert(x,D)• Delete(x,D)• Find(x,D): Returns a pointer to x if x ∊ D,
and a pointer to the successor or predecessor of x if x is not in D
(worth to add an indicator if found or not)
Order not important
![Page 8: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/8.jpg)
8
The ADT
• successor(x,D)• predecessor(x,D)• Min(D) (2)• Max(D) (989)
Order Operation
s
D= {5, 2, 7, 19, 989}
![Page 9: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/9.jpg)
9
The ADT
• catenate(D1,D2) : Assume all items in D1 are smaller than all items in D2
• split(x,D) : Separate to D1, D2. D1 with all items smaller than x and D2 with all items greater than x
D= {5, 2, 7, 19, 989}
D1= {5, 2, 7}
{19, 989}
![Page 10: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/10.jpg)
10
Reminder from “mavo”
• We have seen solutions using unordered lists and ordered lists.
• Worst case running time O(n)
• We also defined Binary Search Trees (BST)
![Page 11: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/11.jpg)
11
Binary search trees
• A representation of a set with keys from a totally ordered universe
• We put each element in a node of a binary tree subject to:
![Page 12: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/12.jpg)
12
BST2
7
3
5 8
4
2 8
7
5 101
If y is in the left subtree of x then y.key < x.key
If y is in the right subtree of x then y.key > x.key
![Page 13: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/13.jpg)
13
BST2
7
3
5 8
4
2 8
7
5 101
x.rightx.key
x.left
x x.parent
![Page 14: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/14.jpg)
14
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(x,T)
2 8
7
5 101
Return pointer to where element should
be (this is why we have y
![Page 15: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/15.jpg)
15
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(5,T)
2 8
7
5 101
z
Return pointer to where element
should be
![Page 16: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/16.jpg)
16
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(5,T)
2 8
7
5 101
zy
Return pointer to where element
should be
![Page 17: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/17.jpg)
17
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(5,T)
2 8
7
5 101
z
y
Return pointer to where element
should be
![Page 18: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/18.jpg)
18
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(5,T)
2 8
7
5 101
zy
Return pointer to where element
should be
![Page 19: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/19.jpg)
19
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(5,T)
2 8
7
5 101z
y
Return pointer to where element
should be
![Page 20: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/20.jpg)
20
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(5,T)
2 8
7
5 101z
y
Return pointer to where element
should be
![Page 21: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/21.jpg)
21
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(6,T)
2 8
7
5 101z
y
Return pointer to where element should
be(this case predecessor
of 6)
![Page 22: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/22.jpg)
22
Y ← nullz ← T.rootWhile z ≠ null do y ← z if x = z.key return z if x < z.key then z ← z.left else z ← z.rightreturn y
Find(6,T)
2 8
7
5 101y
z=null
Return pointer to where element
should be (this case predecessor of 6)
![Page 23: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/23.jpg)
23
2 8
7
5 101
Min(T)
6
Min(T.root)
min(z):While (z.left ≠ null) do z ← z.leftreturn (z)
1.5
![Page 24: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/24.jpg)
24
n ← new noden.key←xn.left ← n.right ← nully ← find(x,T)n.parent ← yif x < y.key then y.left ← n else y.right ← n
2 8
7
5 101
Insert(x,T)
![Page 25: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/25.jpg)
25
2 8
7
5 101
Insert(6,T)
n ← new noden.key←xn.left ← n.right ← nully ← find(x,T)n.parent ← yif x < y.key then y.left ← n else if x > y.key y.right ← n
else (x= y.key) do nothing
To avoid duplicates: must check if
element is there
![Page 26: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/26.jpg)
26
2 8
7
5 101
Insert(6,T)
6
y
n ← new noden.key←xn.left ← n.right ← nully ← find(x,T)n.parent ← yif x < y.key then y.left ← n else y.right ← n
![Page 27: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/27.jpg)
27
2 8
7
5 101
Delete(6,T)
6
If node has < 2 children: take father(node) and make it point to child(node) (Node is leaf or has one child)
![Page 28: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/28.jpg)
28
2 8
7
5 101
Delete(6,T)
If node has < 2 children: take father(node) and make point to child(node)
![Page 29: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/29.jpg)
29
2 8
7
5 101
Delete(8,T)
If node has < 2 children: take father(node) and make point to child(node)
![Page 30: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/30.jpg)
30
2 8
7
5 101
Delete(8,T)
If node has < 2 children: take father(node) and make point to child(node)
![Page 31: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/31.jpg)
31
2 8
7
5 101
Delete(2,T)
6
Switch 5 and 2 and delete the node containing now 2
If node has < 2 children: take father(node) and make point to child(node)
![Page 32: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/32.jpg)
32
5 8
7
101
Delete(2,T)
6
Switch 5 and 2 and delete the node containing 5
![Page 33: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/33.jpg)
33
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.key
q
Find z that does not have 2 children!
Z is physical deletion point
Why minimum?
Minimum never has 2 children
![Page 34: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/34.jpg)
34
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.key
qz
Find z that does not have 2 children!
Z is physical deletion point
![Page 35: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/35.jpg)
35
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.key
q
Find z that does not have 2 children!
Z is physical deletion point
![Page 36: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/36.jpg)
36
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.key
q
z
Find z that does not have 2 children!
Z is physical deletion point
Z has at most one child now!
![Page 37: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/37.jpg)
37
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.keyIf z.left ≠ null then y ← z.left else y ← z.right
z
Z is physical deletion point
![Page 38: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/38.jpg)
38
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.keyIf z.left ≠ null then y ← z.left else y ← z.right
z
y
![Page 39: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/39.jpg)
39
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.keyIf z.left ≠ null then y ← z.left else y ← z.rightIf y ≠ null then y.parent ← z.parent
z
y
![Page 40: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/40.jpg)
40
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.keyIf z.left ≠ null then y ← z.left else y ← z.rightIf y ≠ null then y.parent ← z.parent p = z.parentIf z = p.left then p.left = y else p.right = y
z
y
p
![Page 41: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/41.jpg)
41
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.keyIf z.left ≠ null then y ← z.left else y ← z.rightIf y ≠ null then y.parent ← z.parent p = z.parentIf z = p.left then p.left = y else p.right = y
z
y
p
![Page 42: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/42.jpg)
42
delete(x,T)
q ← find(x,T)
If q.left = null or q.right = nullthen z ← q else z ← min(q.right) q.key ← z.keyIf z.left ≠ null then y ← z.left else y ← z.rightIf y ≠ null then y.parent ← z.parent p = z.parentIf z = p.left then p.left = y else p.right = y
![Page 43: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/43.jpg)
43
Variation: Items only at the leaves
• Keep elements only at the leaves• Each internal node contains a
number to direct the search
5 9
8
7 102
1 2 5 7
8
9 11
Implementation is simpler (e.g. delete)
Costs space
![Page 44: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/44.jpg)
44
Analysis
• Each operation takes O(h) time, where h is the height of the tree
• In general h may be as large as n
• Want to keep the tree with small h
![Page 45: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/45.jpg)
45
Balance
h = O(log n)How do we keep the tree balanced through insertions and deletions ?
![Page 46: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/46.jpg)
46
1 )O)n( : Worst Case
איברים n )תוחלת( להכניסבממוצעכמה זמן לוקח ( 2?אקראיים
:עץ מושלם
:עץ קווי
log n כל איבר לוקח לכל היותר
n
i
nni1
2)1(
O)n( לצומת
צריך להניח הנחות:ממוצע
INSERT רק -
אלמנטים( n )סדרים בין כל הסדרים שווי הסתברות-
Data Structures, CS, TAU - 5.6
בינארי חיפוש עץ של זמן אנליזת
![Page 47: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/47.jpg)
47
- רוצים לחשב אורך מסלול ממוצע:(a את האיבר הראשון )קח
n איברים קטנים ממנו היא iההסתברות ש1
a
i N-i-1
n של צומת שרירותי בעץ בגודל אורך ממוצע של מסלול )L)n יהי)אורך מסלול כאן = מס’ צמתים במסלול(
:, האורך הממוצע הואaאיברים קטנים מ- i , אםאזי
ninLnin
iLni
inL1
)1)1()(1
()1)(()|(
שמאל ימין מרכז
)()(1 jLnj
iLni
(j=n-i-1)
Data Structures, CS, TAU - 5.7
![Page 48: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/48.jpg)
48
:iנוריד את ההתניה על )|(
1
01)( inL
n
i nnL
1
0)(
1
0 21)(2
11
n
iiiL
n
i niiL
nהצב:
1
0)(2
21
n
iiiL
n
nnLנראה באינדוקציה: log41)(
הוכחה:
1
0)log4(2
21)(
n
iiii
nnL
1
01log2
81n
iii
n
Data Structures, CS, TAU - 5.8
![Page 49: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/49.jpg)
49
12/
0
1
2/]log)2/log([2
82n
i
n
ninini
n
)2log(82 nn )log(8
23 nn
)1(log82
nn
nlog41
Data Structures, CS, TAU - 5.9
1
01log2
81n
iii
n
![Page 50: Trees CLRS: chapter 12](https://reader035.fdocument.pub/reader035/viewer/2022062423/568147bf550346895db4ff11/html5/thumbnails/50.jpg)
50
Balance
h = O(log n)How do we keep the tree balanced through
insertions and deletions ?
- Next chapter!