ساختمان داده درختها

59
داده مان ت خ سا ها ت خ در ان ق ه د ن سی خ م ج ی س د ن ه م ی و ن ف کده% س ن دا

Upload: naiara

Post on 22-Jan-2016

266 views

Category:

Documents


1 download

DESCRIPTION

ساختمان داده درخت‌ها. حسین دهقان دانشکده فنی و مهندسی جم. تعاریف. تعریف درخت. تعريف: درخت مجموعه اي متناهي و غير تهي از يک يا چند گره است به طوريکه: داراي گره خاصي به نام ريشه باشد. گره‌های دیگر زیر درختان ریشه مجموعه مجزا T 1 ,…, T n که هر يک از اين مجموعه ها خود يک درخت هستند . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ساختمان داده درختها

ساختمان داده

درخت هاحسین دهقاندانشکده فنی و مهندسی جم

Page 2: ساختمان داده درختها

تعاریف

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

2

Page 3: ساختمان داده درختها

تعریف درختتعريف: درخت مجموعه اي متناهي و غير تهي از •

يک يا چند گره است به طوريکه: باشد.ريشهداراي گره خاصي به نام ریشهزیر درختان گره های دیگر

مجموعه مجزا T1,…,Tn که هر يک از اين مجموعه ها خود يک درخت هستند.

یک گراف غیر جهت دار و بدون دور•

3

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 4: ساختمان داده درختها

ریشه، برگ، گره و یال

4

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

ریشه

برگ

گره

یال

nتعداد = 13

eتعداد = 12

Page 5: ساختمان داده درختها

تعاریفریشه•

(aگره بدون پدر )•برگ•

,b, d, f, g, j, kبدون زیر درخت ) |گره بدون فرزند•l, m)

داخلیگره •(a, c, e, h, iگره غیر برگ )•kو jگره •

hفرزندان •

sibling یا برادر، هم نیا، همزادگره های •5

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 6: ساختمان داده درختها

تعاریف

6

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

درجه•گره: تعداد زیر درختان گره•درخت: ماکزیمم درجه گره های درخت•اجداد گره•

گره های موجود در مسیر طی شده تا ریشه••m ← i, e, a( یک گرهعمق )سطح•

طول مسیر از ریشه به آن گره••a ← 1 و h ← 3

Page 7: ساختمان داده درختها

تعاریف

7

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

( درختعمق)ارتفاع •بیشترین سطح گره ها••4سوال•است.؟ برابر f سطح•است.؟ درخت برابر عمق )ارتفاع(•است.؟ برابر c نود درجه•است.؟ درخت برابر درجه•است. ?برابر c اجداد•است.? برابر h نسل هاي•

Page 8: ساختمان داده درختها

نمایش درخت عمومی

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

8

Page 9: ساختمان داده درختها

پرانتزگذاریابتدا ریشه•اطالعات فرزندان ریشه در پرانتز•اطالعات فرزندان از چپ به راست•

9

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

(a(b), (c(f, g, h(j, k))), (d), (e(i(l, m))))

Page 10: ساختمان داده درختها

آرایه

10

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

ذخیره•(elementمقدار هر گره )•شماره درایه پدر هر عنصر•

Page 11: ساختمان داده درختها

لیست پیوندیدرخت روبرو را مي توان در •

قالب ليست به صورت زير نشان داد

11

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

(A(B(E(K ،L)،F)،C(G)،D(H(M)،I،J)))ج

Page 12: ساختمان داده درختها

فرزند چپ، همزاد راستهر گره حداکثر درای •

فرزند چپ1• همزاد راست1•

تبدیل درخت عمومی به •دودویی درخت

12

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 13: ساختمان داده درختها

درخت دودویی

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

13

Page 14: ساختمان داده درختها

تعریف تاییkدرخت •

kدرختی که بیشینه تعداد فرزندان یک گره •باشد.

درخت دودویی•2حداکثر تعداد فرزندان هر گره = •تفاوت با درخت عادی•

می تواند دارای صفر گره باشد !•ترتیب فرزندان اهمیت دارد.•

14

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 15: ساختمان داده درختها

تبدیل درخت عمومی به دودوییهر درختي را مي توان به فرم درخت دودويي در •

آورد.

با بازنمايي بچه چپ-همزاد راست•

در درختهاي دودويي بين •

زير درخت چپ و راست

تمايز قائل مي شويم.

15

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 16: ساختمان داده درختها

انواع درختپر• فرزند دارند.2همه گره ها بجز سطح آخر •

← iتعداد گره سطح •← تعداد کل گره ها • ←تعداد کل برگ ها •← تعداد گره های داخلی •

16

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

h=⌊ log𝑛 ⌋+1=log(𝑛+1)

Page 17: ساختمان داده درختها

انواع درختکامل• پرh-1تا ارتفاع •از چپ به راست پر hبرگها در ارتفاع •

می شوند.

تعداد گره ها•

17

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

h=⌊ log𝑛 ⌋+1=⌈ log(𝑛+1)⌉

2h− 1≤𝑛≤2h−1

Page 18: ساختمان داده درختها

انواع درختاریب•1درجه رئوس بجز آخری برابر •

تعداد گره تک فرزندی••n-1

تعداد برگ ها••1

ارتفاع••h = n

18

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 19: ساختمان داده درختها

انواع درختمتوازن•1 یا 0اختالف سطح برگها •h-1یا hبرگها در سطح •

کامال متوازن•تمام برگها در یک سطح•

19

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 20: ساختمان داده درختها

خصوصیاتدرخت دودویی

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

20

Page 21: ساختمان داده درختها

تعداد یالها

یا تعداد برگها0 : تعداد گره های درجه •1 : تعداد گره های درجه •2 : تعداد گره های درجه •

21

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 22: ساختمان داده درختها

تعداد برگ ها

← در درخت کامل و پر •

22

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

درخت پر

Page 23: ساختمان داده درختها

عمق، تعداد گره

تعداد گره ها•

23

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

درخت پر

درخت اریب

درخت پر یا کامل

درخت پر

درخت اریب

Page 24: ساختمان داده درختها

تعداد درخت دودویی مختلفگره می توان nتعداد درخت های مختلف که با •

ساخت:

تعداد درخت های دودویی کامل = تعداد برگهای •= hارتفاع

گره = nتعداد درخت های متفاوت با •

24

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 25: ساختمان داده درختها

نمایشدرخت دودویی

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

25

Page 26: ساختمان داده درختها

آریهشماره گذاری گره ها به صورت زیر•

قراردادن عناصر در آرایه براساس مکانشان•

26

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

𝑖

2 𝑖 2 𝑖+1

𝑎

𝑏 𝑐

𝑑

Page 27: ساختمان داده درختها

آرایه

تعداد خانه های مورد نیاز برای درخت•← پر •اریب•

← چپ •← راست •

27

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

2

4

1

8

3

7

1

15

Page 28: ساختمان داده درختها

آرایه

هدر رفتن حافظه•اریب•

← چپ •← راست •

28

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 29: ساختمان داده درختها

لیست پیوندی

29

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

𝑑𝑎𝑡𝑎

𝑙𝑒𝑓𝑡𝑐 h 𝑖𝑙𝑑𝑟𝑖𝑔h 𝑡𝑐 h 𝑖𝑙𝑑

left_child data right_child

Page 30: ساختمان داده درختها

لیست پیوندی

30

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 31: ساختمان داده درختها

پیمایشدرخت دودویی

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

31

Page 32: ساختمان داده درختها

تعریف پیمایش درختمی خواهیم با حرکت روی یالهای یک درخت، همه •

گره های آن را یک بار مالقات کنیم.

پیمایش سطحی•پیمایش عمقی•

Preorderپیش ترتیب، •

Inorderمیان ترتیب، •

Prostorderپس ترتیب، •

32

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 33: ساختمان داده درختها

پيمايش درخت دودوييطي كردن هر گره درخت يك و فقط يك بار• تركيب مختلف كنار هم قرار دادن 6•

r(root),L(Left),R(Right):•(rLR,rRL,LrR,LRr,RrL,RLr)

اگر زير درخت چپ قبل از زيردرخت راست •پيمايش شود،

حالت مختلف ايجاد مي شود:3•

33

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

L R

r

L R

r

L R

r

rLRpreorder

1

2 3 1

2

3 1 2

3

LrRinorder

LRrpostorder

Page 34: ساختمان داده درختها

پیمایش سطحیحرکت از باال به پایین•حرکت از چپ به راست•

پیاده سازی به کمک صف•

34

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

−𝒂×𝒃𝒄

Page 35: ساختمان داده درختها

پیمایش سطحی

35

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

void level_order(tree_pointer ptr){ int front = rear = 0; tree_pointer queue[MAX_QUEUE_SIZE]; if (!ptr) return; /* empty tree */ addq(front, &rear, ptr); for (;;) { ptr = deleteq(&front, rear); if (ptr) { printf(ptr.data); if (ptr.left_child) addq(front, &rear, ptr.left_child); if (ptr.right_child) addq(front, &rear, ptr.right_child); } else break; }}

Page 36: ساختمان داده درختها

Preorderپیمایش

ریشهمالقات • چپ← پیمایش اگر زیر درخت چپ داشتیم •

Preorderبروش راست← پیمایش اگر زیر درخت راست داشتیم •

Preorderبروش

36

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

𝟏𝟐𝟑𝟒𝟓𝒐𝒓 <𝒂𝒃<𝒄 𝒅

راست ترین برگریشه

Page 37: ساختمان داده درختها

Preorderپیمایش

الگوریتم•بازگشتی•غیر بازگشتی به کمک پشته•

•Push به تعداد فرزندان راست•Pop به تعداد فرزندان راست

37

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 38: ساختمان داده درختها

Inorderپیمایش

چپ← پیمایش اگر زیر درخت چپ داشتیم •Inorderبروش

ریشهمالقات • راست← پیمایش اگر زیر درخت راست داشتیم •

Inorderبروش

38

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

𝟏𝟒𝟑𝟓𝟐𝒂<𝒃𝒐𝒓 𝒄<𝒅

راست ترین گره در امتداد ریشه

چپ ترین گره در امتداد ریشه

Page 39: ساختمان داده درختها

Postorderپیمایش

چپ← پیمایش اگر زیر درخت چپ داشتیم •Postorderبروش

راست← پیمایش اگر زیر درخت راست داشتیم •Postorderبروش

ریشهمالقات •

39

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

𝟒𝟓𝟑𝟐𝟏𝒂𝒃<𝒄𝒅<𝒐𝒓

چپ ترین برگریشه

Page 40: ساختمان داده درختها

نکتهترتیب مالقات برگ ها•

پیمایش یکسان3در هر •همواره از چپ به راست•

40

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

𝒐𝒓 <𝒂𝒃<𝒄 𝒅𝒂<𝒃𝒐𝒓 𝒄<𝒅𝒂𝒃<𝒄𝒅<𝒐𝒓

PreorderInorderPostorder

Page 41: ساختمان داده درختها

توابع پيمايش درخت

41

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

void inorder (tree_pointer ptr){ if (ptr) { inorder(ptr.left_child); printf(ptr.data); inorder(ptr.right_child); }}

void preorder (tree_pointer ptr){ if (ptr) { printf(ptr.data); preorder(ptr.left_child); preorder(ptr.right_child); }}

Page 42: ساختمان داده درختها

inorderپيمايش غير بازگشتي

42

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

void iter_inorder(tree_pointer node){ int top = -1; /* initialize stack */ tree_pointer stack[MAX_STACK_SIZE]; for (;;) { for (; node; node = node.left_child) add(&top, node); // add to stack node = delete(&top); // delete from stack if (!node) break; // empty stack */ printf(node.data); node = node.right_child; }}

Page 43: ساختمان داده درختها

ساخت درخت دودویی به کمک پیمایش های آن

مثال•

• Preorder a b c d e f g h• Inorder b c a e d g f h

43

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 44: ساختمان داده درختها

درخت عبارت

44

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

+

*

A

*

/

E

D

C

B

inorder traversalA / B * C * D + Einfix expression

preorder traversal+ * * / A B C D Eprefix expression

postorder traversalA B / C * D * E +postfix expression

Page 45: ساختمان داده درختها

سوالبنويسuيد کuه يuک درخت swaptreeالگuوريتمي بuه نuام •

و هuاي چپ بچuه جuاي و کنuد دريuافت را دودويي راست هر گره را عوض کند.

الگuوريتمي بuراي شuمارش تعuداد گuره هuاي بuرگ | •گuره هuاي غuير بuرگ | کuل گuره هuا در يuک درخت

دودويي بنويسيد.

الگuوريتمي بuراي حuذف تمuام گuره هuا در يuک درخت •دودويي بنويسيد. 45

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 46: ساختمان داده درختها

عملیاتدرخت دودویی

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

46

Page 47: ساختمان داده درختها

کپی درخت دودوییدرخت پيمايش پس ترتيب مي توانيم الگوريتم •

دودويي را اندکي تغيير دهيم تا براي کپي درخت به کار رود.

برابرای دو درخت•ترتیب و ساختار گره ها یکسان•داده های گره ها یکسان•

47

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 48: ساختمان داده درختها

محاسبه عبارات گزاره اي x1 (x2 ¬x3)

• x1 and x3 =false, x2 = true

• false (true ¬false) = false true = true

پيمايش پس ترتيب:•براي ارزيابي هر گره بايد قبال آرگومان هاي آ ن را •

محاسبه کرده باشيم.

48

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 49: ساختمان داده درختها

محاسبه عبارات گزاره اي

49

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

(x1 ¬x2) (¬ x1 x3) ¬x3

X3X1

X2 X1

X3

data

value

Page 50: ساختمان داده درختها

درخت نخی دودویی

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

50

Page 51: ساختمان داده درختها

درخت نخینخ کشي کردن•

عيب درختهاي دودويي باال: تعداد زيادي از •است NULLاشاره گرها

nتعداد گره

n-1تعداد اشاره گر غير صفر

2nتعداد کل اشاره گر ها

n+1تعداد اشاره گر صفر

راهکار: از اشاره گرهاي تهی براي اشاره به •گره هاي ديگر درخت استفاده کنيم. به چنين

گويند. نخاشاره گرهايي 51

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 52: ساختمان داده درختها

درخت دودويي نخ كشي شده(Threaded)از اشاره گرهاي خالي براي اشاره به عنصر قبل •

استفاده مي شود. inorderو عنصر بعد در ترتيب

52

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

A

B C

GE

I

D

H

F

root

inorder traversal:H, D, I, B, E, A, F, C, G

dangling

dangling

Page 53: ساختمان داده درختها

ساختمان داده براي گره هاي درخت نخ كشي شده

53

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

TRUE FALSE

left_thread left_child data right_child right_thread

FALSE: childTRUE: thread

Page 54: ساختمان داده درختها

درخت نخ كشي شده: مثال

54

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

f f--

f fA

f fCf fB

t tE t tF t tGf fD

t tIt tH

root

Page 55: ساختمان داده درختها

پيمايش ميان ترتيببا استفاده از نخ کشيها مي توان پيمايش ميان •

ترتيب را بدون استفاده از پشته انجام داد.باشد آنگاه عضو بعد ptr.right_thread = TRUE- اگر 1

ptr . right_childدر روش ميان ترتيب ptrازاست.

در روش ptr- در غير اينصورت عضو بعد از 2مسيري از اشاره ميان ترتيب با دنبال کردن

به دست ptrگرهاي بچه چپ از بچه راست برسيم. left_thread = TRUEمي ايد تا به گره اي با

55

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

Page 56: ساختمان داده درختها

(Successorپيدا کردن عضو بعدي )

56

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

threaded_pointer insucc(threaded_pointer tree){threaded_pointer temp;temp = tree.right_child;if (!tree.right_thread)

while (!temp.left_thread) temp = temp.left_child;

return temp;}

tree

temp

Page 57: ساختمان داده درختها

پيمايش ميان ترتيب

57

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

void tinorder(threaded_pointer tree){threaded_pointer temp = tree;for (;;) {

temp = insucc(temp);if (temp==tree)

break;printf(temp.data);

}}

Page 58: ساختمان داده درختها

اضافه کردن گره

يک راستبچه اضافه کردن يک گره به عنوان •والد گره

58

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

X

A

B

root

child

parent A

B childparent

D

E Fحالت اول:

Bزير درخت راست خالي باشد حالت دوم:

زير درخت راست Bخالي نباشد

X

Page 59: ساختمان داده درختها

اضافه کردن گره

59

نقا

ه د

نسی

حی

سدهن

مو

ی فن

ه دکش

اند

م

ج

void insert_right(parent, child){threaded_pointer temp;child.right_child = parent.right_child;child.right_thread = parent.right_thread;child.left_child = parent;child.left_thread = TRUE;parent.right_child = child;parent.right_thread = FALSE;If(!child.right_thread){

temp = insucc(child);temp.left_child = child;

}}

X

A

B

root

child

parent

A

B childparent

D

E Fsuccessor

temp

حالت دومحالت اول

X