44
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

עצים ועצי חיפוש

Embed Size (px)

DESCRIPTION

Lecture3 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS. עצים ועצי חיפוש. חומר קריאה לשיעור זה. Chapter 5.5– Trees (91 – 97) Chapter 13– Binary Search Trees (244 – 262).  Geiger & Itai, 2001. אברהם. יצחק. ישמאל. עשו. יעקב. 12 בנים. עוד 11בנים ובת. יוסף. מנשה. - PowerPoint PPT Presentation

Citation preview

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

31

456220

420145

156

122

120

20

7035

8837

6330

60

80

121

T

delete)88,T(

2מקרא

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

לכן

trees

cs,Technion

44

עוד על המספר ההרמוני

nH nn

lnlim

)(ln)1

(...57721.0ln1

1nO

non

iH

n

in

אוילר קבוע

על קבוע אוילר:

...402431042651209008201532860605772156649.0

ספרות במכנה(10242,080 לא ידוע אם הוא רציונלי )אם כן, יש לו יותר מ-

אוילר, שהגדיר את הקבוע, ציין כי הוא "ראוי להתייחסות רצינית"