50
1 Trees CLRS: chapter 12

Trees CLRS: chapter 12

  • Upload
    arnold

  • View
    25

  • Download
    0

Embed Size (px)

DESCRIPTION

Trees CLRS: chapter 12. A hierarchical combinatorial structure. הגדרה רקורסיבית:. 1. צומת בודד. זהו גם שורש העץ. 2. אם n הוא צומת ו T 1 ….T K הינם עצים, ניתן לבנות עץ חדש שבו n השורש ו T 1 ….T K הינם “תתי עצים”. n. n. T 1. T K. T 1. T K. Terminology. r. c 1. c 2. c 3. - PowerPoint PPT Presentation

Citation preview

Page 1: Trees CLRS: chapter 12

1

TreesCLRS: chapter 12

Page 2: Trees CLRS: chapter 12

2

A hierarchical combinatorial structure

הגדרה רקורסיבית:

צומת בודד. זהו גם שורש העץ.. 1

הינם עצים, ניתן לבנות עץ T1….TK הוא צומת ו nאם . 2 הינם “תתי עצים”.T1….TK השורש ו n חדש שבו

T1 TKn

T1 TK

n

. . .

Page 3: Trees CLRS: chapter 12

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

April 21, 2023

(height - אורך המסלול הארוך ביותר מהשורש לעלה )גובה העץ

(depth - אורך המסלול מהצומת לשורש )עומק צומת

Ordered tree

יש משמעות לסדר הילדים. מסדרים משמאל לימין.

a

b C

a

C b

( unordered tree) עץ לא מסודראם הסדר לא חשוב -

Page 5: Trees CLRS: chapter 12

April 21, 2023

}ילד ימני, ילד שמאלי{ עץ ריק או לכל צומת יש תת קבוצה של-

דוגמא:

בינאריים עצים

Full : each internal node always has both children

Page 6: Trees CLRS: chapter 12

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

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

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

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

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

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

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

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

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

Cs
Z runs one below y . at end IFWE DO NOT FIND THE VALUE z points to null and y to the node before
Page 15: Trees CLRS: chapter 12

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

45

Balance

h = O(log n)How do we keep the tree balanced through insertions and deletions ?

Page 46: Trees CLRS: chapter 12

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

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

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

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

50

Balance

h = O(log n)How do we keep the tree balanced through

insertions and deletions ?

- Next chapter!