فصل پنجم : درخت

100
ت خ ا در ب ي ي ا ن ش آ ي ي دودو هاي ت خ در ان ت خ در ش ي ما پ رم ه ل گ ن خ ت خ م : در ن. پ ل ص ف آهدآف1

Upload: donna-russo

Post on 31-Dec-2015

85 views

Category:

Documents


1 download

DESCRIPTION

فصل پنجم : درخت. آشنايي با درخت درخت هاي دودويي پيمايش درختان هرم جنگل. اهداف. فصل پنجم : درختان. درخت. ساختار درختي يعني مجموعه داده هاي سازماندهي شده اي که عناصر اطلاعاتي شان به وسيله انشعاباتي با هم رابطه داشته باشند. مفهوم درخت. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: فصل پنجم : درخت

آشنايي با درختدرخت هاي دودوييپيمايش درختانهرمجنگل

فصل پنجم : درخت

اهداف

1

Page 2: فصل پنجم : درخت

فصل پنجم : درختان

ه��اي داده مجموع��ه يع��ني درخ��تي ساختار س�ازماندهي ش�ده اي ک�ه عناص�ر اطالع�اتي ش�ان ب�ه وس�يله انش�عاباتي ب�ا هم رابط�ه داش�ته باش�ند.

درخت

2

Page 3: فصل پنجم : درخت

مفهوم درخت

ب�ه ي�ا چن�د گ�ره از ي�ک درخت مجموع�ه مح�دودي صورت زير مي باشد :

داراي گره خاصي به نام ريشه باشد.بقیه عناصر درخت به ریشه متصل هستند.

مجموع�ه مج�زا n ≥ 0 بقي�ه گ�ره ه�ا ب�ه تقس�يم ش�ده ک�ه ه�ر ي�ک از اين مجموع�ه ه�ا

هس�تند. درخت ي�ک درخت�ان خ�ود زي�ر ريشه ناميده مي شوند.

nTT ,....1

nTT ,....1

3

Page 4: فصل پنجم : درخت

،گرهبه عنصر حاوي اطالعات و انشعابات به ديگر عناصر اطالق مي شود.

،آن ناميده ميشوددرجهتعداد زير درختهاي يك گره ،ناميده گره پاياني يا برگگره اي كه درجه آن صفر باشد

ناميده گره هاي غيرپايانيميشود و در مقابل بقيه گره ها ميشوند.

و به گره هاي گره پدر)والد(گره ريشه را در هر زير درخت ميگويندگره فرزندمتصل شده به آن

ناميده برادر )يا همزاد(فرزنداني كه پدر يكسان دارند ميشوند

تعريف

4

Page 5: فصل پنجم : درخت

مثالي از يک درخت

A وال�د B ، C، D . اس�ت B ، C، D همزادند.

A

C

G

DB

E H I J

M

F

ريشه درخت

LK

همزاد

A = 3درجه 5-1شکل

5

Page 6: فصل پنجم : درخت

اجداد يک گره ، گره هايي هستند که در مسير طي اجداد گره : شده از ريشه تا آن گره وجود دارند.

سطح يک گره بدين صورت تعريف مي شود که سطح گره : ريشه در سطح يک قرار مي گيرد. براي تمامي گره هاي بعدي

، سطح گره برابر است با سطح والد به اضافه يک .

ارتفاع يا عمق يک درخت به بيشترين سطح ارتفاع درخت : گره هاي آن درخت گفته مي شود.

اصطالحات درخت ها

6

Page 7: فصل پنجم : درخت

نمايش ليست

ليس�ت از اس�تفاده ، درخت نم�ايش راه يک است .

را مي ت�وان ب�ه ص�ورت زي�ر نش�ان داد : 5-1شکل

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

C

G

DB

E H I J

M

F

LK

7

Page 8: فصل پنجم : درخت

اگر بخواهيم براي نگهداري يك درخت ساختمان داده اي مانندنمايش معمول )هر گره آدرس گره هاي فرزند خود را داشته

باشد( تعريف كنيم مشكل زير بوجود مي آيد: درجه تمام درختها يكي نميباشد لذا مجبور خواهيم شد براي هر

گره تعداد متغيري از اشاره گرها داشته باشيم. با اين وجود، نوشتن الگوريتم براي گره هايي كه طول متغير دارند دشوار

خواهد شد.براي حل مشكل بايد از گره هايي با طول ثابت استفاده كنيم

8

Page 9: فصل پنجم : درخت

Link k … link 2 link 1 data

استفاده از گره با طول ثابت

اگر بيشترين درجه درختk باشد بنابراين هر گره اشاره گر را داشته باشد و kبايد توانايي نگهداري

ساختمان داده اي به شكل زير بايد تعريف كنيم.

9

Page 10: فصل پنجم : درخت

اگرT درختي از درجه k با n گره باشد و هر گره آن مانند شكل قبل

فيلد بچه آن )اشاره nk از n)k-1(+1طول ثابتي داشته باشد آنگاه

( است.NULL )0گرهاي به فرزند( برابر

:اثبات

از آنجا كه هر فيلد بچه غير صفر به يك گره اشاره ميكند و براي هر گره

غير از ريشه يك اشاره گر وجود دارد از اينرو تعداد فيلدهاي بچه

است. تعداد كل فيلدهاي n-1 گره دقيقا̀ برابر nغيرصفر براي درختي با

ميباشد. لذا:nk برابر k گره از درجه nبچه براي درختي با

تعداد اشاره گرهاي بچهNULL : nk-)n-1(=n)k-1(+1

قضيه

10

Page 11: فصل پنجم : درخت

براي درختان دو نمايش خاص كه از گره هايي با طول ثابتاستفاده ميكند ارائه ميكنيم.

الف( نمايش درخت بصورت بچه چپ-همزاد راست 2ب( نمايش درخت بصورت يك درخت درجه.

11

Page 12: فصل پنجم : درخت

براي نمايش درختان دودويي ، دقيقا نياز به دو اتصال يا اشاره گربه ازاي هر گره است.

نمايش دودويي يک درخت

Data

right sibling left child

Page 13: فصل پنجم : درخت

بصورت بچه چپ-همزاد راستA

C

G

DB

E H I J

M

F

LK A0

B C D0

E F0 0

K0

L0 0

G0 0

H I0

J0 0

M0 0

13

Page 14: فصل پنجم : درخت

2بصورت درخت درجه A

C

G

DB

E H I J

M

F

LK

A0

B

C

D0

E

F0 0

K0

L0 0

G0 0

H

I0

J0 0

M0 0

14

Page 15: فصل پنجم : درخت

15

درخت هاي دودويي2-5

مشخص�ه اص�لي ي�ک درخت دودويي ب�دين ش�کل دارد انش�عاب دو ح�داکثر آن گ�ره ه�ر ک�ه اس�ت دو از بيش�تر اي درج�ه ک�ه ه�ايي گ�ره يع�ني

نداشته باشند. س�مت درخت زي�ر دودويي ه�اي درخت ب�راي

چپ و راست با يکديگر متمايز است.

يک درخت دودويي ي�ا تهي اس�ت ي�ا ح�اوي مجموع�ه اي مح�دود از گ�ره ه�ا ش�امل ي�ک ريش�ه و دو زي�ر درخت زي�ر ه�ا درخت اين اس�ت. دودويي درخت

هاي چپ و راست ناميده مي شوند.

تعريف :

Page 16: فصل پنجم : درخت

ساختار درخت دودويي2-5

structure Binary_tree )abbreviated BinTree ( is objects : a finite set of nodes either empty or consisting of

a root node ، left Binary_tree ، and right Binary_tree. functions :

for all bt ، bt1 ، bt2 BinTree ، item elementBinTree Create)(Boolean IsEmpty )bt(BinTree MakeBT)bt1 ، item ، bt 2(BinTree Lchild)bt(element Data)bt(BinTree Rchild)bt(

16

Page 17: فصل پنجم : درخت

در هيچ درخت عادي صفر گره وجود ندارد ، اما درخت دودويي تهي وجود دارد.

در يک درخت دودويي ترتيب فرزندان داراي اهميت بوده در حالي که در درخت عادي به اين صورت

نيست.

تفاوت درخت عادي با درخت 2-5دودويي

17

Page 18: فصل پنجم : درخت

خواص درختان دودويي2-5

در س�طح ه�ا گ�ره تع�داد ي�ک درخت i ح�داکثر ام است.2i-1دودويي

ب�ه ي�ک درخت دودويي در تع�داد گ�ره ه�ا ح�داکثر است.k ، 2k-1عمق

حداکثر تعداد گره ها

18

Page 19: فصل پنجم : درخت

خواص درختان دودويي2-5

، اگ�رTبراي ه�ر درخت دودويي غ�ير تهي مانن�د تع�دادگره ه�اي پاي�اني و تع�داد گ�ره ه�اي درج�ه

باشد ، آنگاه خواهيم داشت :2

0n

2n

120 nn

2رابطه بين تعداد گره هاي برگ و گره هاي درجه

19

Page 20: فصل پنجم : درخت

خواص درختان دودويي2-5

درخت دودويي پر ، يک kيک درخت دودويي پر به عمق گره داشته باشد.2k-1است مشروط به اينكه

است ، اگر و کامل k گره و عمق nيک درخت دودويي با تنها اگر گره هايش مطابق با گره هاي شماره گذاري شده

باشد.kدر يک درخت دودويي پر به عمق گره برابر nارتفاع يك درخت دودويي كامل با

است

)1(log2 n

Page 21: فصل پنجم : درخت

نمايش درخت دودويي2-5

درخت نم���ايش دو ب��ه دودويي

صورت است :

نمايش آرايه

ليس�ت نم�ايش پيوندي

21

Page 22: فصل پنجم : درخت

، شيوه شماره گذاري ارايه شده در شکل زيراولين نمايش يک درخت دودويي در حافظه را

مطرح و پيشنهاد مي کند . از آنجايي که گره ها از شماره گذاري شده اند ، يک آرايه يک بعدي n تا 1

مي تواند براي ذخيره سازي گره ها استفاده شود .

نمايش آرايه2-5

Page 23: فصل پنجم : درخت

نمايش آرايه2-5

A

CB

D F GE

IH

- 0

A 1

B 2

C 3

D 4

E 5

F 6

G 7

H 8

نمايش آرايه اي درخت دودويي

23

Page 24: فصل پنجم : درخت

نمايش آرايه2-5

گره ) يعنيnاگر يک درخت دودويي کامل با عمق ( به ترتيب باال تعريف شده باشد ، آنگاه براي هر گره

داريم:≥ ، n i 1 و ≥ i با انديس i=1 ، i[ است . اگر i/2 در ]i ، آنگاه پدر i≠1( اگر 1)◦

ريشه است و پدري نخواهد داشت. است. اگر 2i در i ، آنگاه فرزند چپ 2i≤n( اگر2)◦

2i>n آنگاه ، i.فرزند چپ ندارد 2i+1 در i ، آنگاه فرزند راست 2i+1≤n( اگر 3)◦

فرزند راست نداردi ، آنگاه 2i+1>nاست. اگر

1][log2 n

Page 25: فصل پنجم : درخت

، به kدر بدترين حالت ، يک درخت مورب به عمق kمحل و موقعيت نياز دارد که از اين مقدار، فقط

محل اشغال مي شود.

نمايش آرايه2-5

12 k

25

Page 26: فصل پنجم : درخت

ب�راي درخت�ان دودويي اگرچ�ه نم�ايش ترتي�بي )آراي�ه اي( از کام�ل بس�ياري ب�راي م�ا ، نظ�ر مي رس�د ب�ه مناس�ب

درخت�ان ديگ�ر ب�اعث اتالف حافظ�ه ميش�ود ب�ه عالوه ، اين ن�يز ترتي�بي نم�ايش در موج�ود ه�اي نارس�ايي از روش ، درخت ي�ک ه�اي گ�ره ح�ذف ي�ا درج اس�ت. برخ�وردار تغي�ير ب�اعث خ�ود ک�ه هاس�ت گ�ره ج�ايي جاب�ه مس�تلزم ش�ماره س�طح گ�ره ه�ا مي ش�ود. اين مس�ايل مي توان�د ب�ا

به کارگيري نمايش پيوندي به آساني حل شود.

نمايش ليست پيوندي5- 2

26

Page 27: فصل پنجم : درخت

نمايش ليست پيوندي2-5با اين روش هر گره سه فيلد خواهد داشت :

left_child ، data ، right_child ب�ه ش�رح زي�ر تعري�ف مي ش�وند :Cکه در زب�ان

typedef struct node *tree_pointer ;typedef struct node {int data ;tree_pointer left_child ، right_child ;};

27

Page 28: فصل پنجم : درخت

Expressionاعضاي كالس class Tree;

class TreeNode

{

friend class Tree;

private:

char data;

TreeNode *LeftChild;

TreeNode *RightChild;

};

class Tree

{

public:

Tree();

Tree(const Tree& t);

private:

TreeNode *root;

};28

Page 29: فصل پنجم : درخت

نمايش ليست پيوندي2-5

right_child data left_child

left_child

data

right_child

نم�ايش ي�ک گ�ره درخت دودويي

Page 30: فصل پنجم : درخت

پيمايش درخت دودويي3-5

ب�ا ه�ر ، ي�ک درخت دودويي پيم�ايش به هنگ�ام رفت�ار مش�ابهي ط�رز ب�ه زيردرخت�انش و گ�ره

ب�ه ت�رتيب ح�رکت ب�ه چپ ، R ، V ، Lک�نيم. اگ�ر مالق�ات ک�ردن ي�ک گ�ره ( ب�راي مث�ال ، چ�اپ فيل�د داده آن گ�ره) و ح�رکت ب�ه راس�ت باش�د، آنگ�اه درخت ي�ک پيم�ايش ب�راي ممکن ت�رکيب ش�ش

خواهيم داشت :

RLV ، RVL ، VRL ، VLR ، LRV ، LVR

30

Page 31: فصل پنجم : درخت

پيمايش درخت دودويي3-5

ب�ه ابت�دا ک�ه ک�نيم انتخ�اب را تنه�ا ح�التي اگ�ر س�مت چپ و بع�د ب�ه س�مت راس�ت ب�رود ، تنه�ا

خ�واهيم داش�ت. VLR ، LRV ، LVRس�ه ت�رکيب نس�بت Vاين س�ه ح�الت را ب�ا توج�ه ب�ه م�وقعيت

و Lب�ه R ت�رتيب ب�ه preordcr ، postorder ، inorder.مي ناميم

مثال

31

Page 32: فصل پنجم : درخت

پيمايش درخت دودويي3-5

پيم�ايش م�وقعي postorderدر گ�ره ي�ک ، مالق�ات و چ�اپ مي ش�ود ک�ه زيردرخت�ان چپ و

راست آن قبال مالقات شده باشند.

، ي�ک گ�ره قب�ل از پيم�ايش preorderدر پيم�ايش زيردرختان چپ و راست ، مالقات مي گردد.

32

Page 33: فصل پنجم : درخت

پيمايش درخت دودويي3-5

درخت زي�ر ح�اوي ي�ک عب�ارت رياض�ي اس�ت : A/B*C*D*+E+

E*

* D

C/

A B

1

2

3

4

5

6 7 9 10

8

11

14

17

1918

1615

1312

عب�ارت ي�ک ب�راي دودويي درخت محاسباتي

33

Page 34: فصل پنجم : درخت

Inorder پيمايش 3-5

هنگ�امي ک�ه اين پيم�ايش انتخ�اب مي ش�ود ، ح�رکت ب�ه س�مت پ�ايين ب�ه ط�رف چپ انج�ام مي ش�ود و اين عم�ل ت�ا آخ�رين گ�ره ص�ورت مي گ�يرد س�پس مي ت�وان گ�ره را بازي�ابي ک�رد و بع�د ب�ه س�مت راس�ت رفت�ه و ب�ه همين

ترتيب کار ادامه پيدا مي کند.ش�کل ب�ا متن�اظر ي�ک infixاين

عبارت است.

34

Page 35: فصل پنجم : درخت

void inorder )tree_pointer ptr (

/* inorder tree traversal */

{

if )ptr( {

inorder ) ptr -> left_child (;

printf )“ % d” ، ptr -> data (;

inorder )ptr -> right_child(;

}

}

يک درخت Inorder پيمايش 3-5دودويي

35

Page 36: فصل پنجم : درخت

Preorder پيمايش 3-5

ح�اوي دس�تورات الزم ب�راي ش�کل preorderتابع دوم پيمايش است.

بر اس�اس اين پيم�ايش ، گ�ره را ابت�دا بازي�ابي را چپ انش�عابات و س�پس نم�وده مالق�ات و دنب�ال و تم�ام گ�ره ه�ا را بازي�ابي مي ک�نيم. اين فرآين�د ادام�ه پي�دا مي کن�د ت�ا ب�ه ي�ک گ�ره تهي برس�يم. در اين نقط�ه ، ب�ه نزديک�ترين ج�دي ک�ه داراي ي�ک فرزن�د راس�ت باش�د مراجع�ه و ب�ا اين

گره شروع خواهيم نمود.

36

Page 37: فصل پنجم : درخت

Preorder پيمايش 3-5

+

E*

* D

C/

A B

1

2

3

4

5

6 7 9 10

8

11

14

17

1918

1615

1312

پيم��ايش زي��ر preorderبا درخت ه��اي گ��ره خروجي به شکل زير خواهند داشت :

خروجي + * * / A B C D E

عب�ارت ي�ک ش�کل ب�ه اين prefix.است

37

Page 38: فصل پنجم : درخت

Vide preorder )tree_pointer ptr (/* preorder tree traversal */{

if )ptr( {printf )“ % d” ، ptr -> data (;preorder ) ptr -> left_child (;preorder )ptr -> right_child(;

}}

يک درخت Preorder پيمايش 3-5دودويي

38

Page 39: فصل پنجم : درخت

postorder پيمايش 3-5

از قب�ل را گ�ره ي�ک فرزن�د دو پيم�ايش اين بازي�ابي آن گ�ره مالق�ات و چ�اپ مي کن�د. اين ب�دين مفه�وم اس�ت ک�ه فرزن�دان ي�ک مس�اله

گره قبل از خود آن گره بازيابي مي گردد.

39

Page 40: فصل پنجم : درخت

postorder پيمايش 3-5 ش�کل زي�ر postorderخروجي حاص�ل از پيم�ايش

به صورت زير است :+

E*

* D

C/

A B

1

2

3

4

5

6 7 9 10

8

11

14

17

1918

1615

1312

خروجي A B/ C* D* E +

عب�ارت ي�ک مانن�د خ�روجي اين postfix.است

40

Page 41: فصل پنجم : درخت

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

Void iter_pointer (tree_pointer node ){

int top = -1 ; /* initialize stack */tree_pointer stack [MAX_STACK_SIZE] ;for ( ; ; ) {

for (; node ; node = ->left_child)add ( &top ، node ); /* add to stack */

node = delete (&top); /*delete from stack */if (! Node) break ; /* empty stack*/printf (“ % d” ، node-> data ) ;node = node -> right_child;

}}

41

Page 42: فصل پنجم : درخت

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

: ف�رض کني�د تع�داد گ�ره ه�اي inorder2تحلي�ل را در iter_inorder باش�د ، اگ�ر عم�ل nدرخت

نظ�ر بگ�يريم ، مش�اهده مي ش�ود ک�ه ه�ر گ�ره درخت فق�ط ي�ک ب�ار در پش�ته ق�رار گرفت�ه و ي�ا از آن خ�ارج مي ش�ود. بن�ابراين اگ�ر تع�داد

درخت ه�اي زم�ان nگ�ره پيچي�دگي ، باش�د مي باش�د. حافظ�ه م�ورد O(n)ت�ابع براب�ر ب�ا

ني�از براب�ر ب�ا عم�ق درخت اس�ت ک�ه مس�اوي مي باشد.O(n)با

42

Page 43: فصل پنجم : درخت

پيمايش ترتيب سطحي3-5

چ�ه inorder ، preorder ، postorderپيم�ايش ه�اي ب�ه ص�ورت بازگش�ت پ�ذيري نوش�ته ي�ا ب�ه ص�ورت مي پش��ته نيازمن��د همگي ، غيربازگش��تي

باشند.

اين پيم�ايش ، ت�رتيب س�طحي ، ابت�دا ريش�ه را بازي�ابي ، س�پس فرزن�د چپ ريش�ه و ب�ه دنب�ال آن فرزن�د راس�ت ريش�ه بازي�ابي مي گ�ردد. اين ش�يوه ب�ا بازي�ابي از گ�ره منتهي الي�ه س�مت چپ مي تک�رار جدي�د ه�ر س�طح راس�ت س�مت ب�ه

گردد. اين پيمايش از صف استفاده مي کند.

43

Page 44: فصل پنجم : درخت

پيمايش ترتيب سطحي3-5

ب�ه زي�ر درخت س�طحي ت�رتيب پيم�ايش صورت زير است :

+

E*

* D

C/

A B

1

2

3

4

5

6 7 9 10

8

11

14

17

1918

1615

1312

+ *E *D / C A B

44

Page 45: فصل پنجم : درخت

اعمال مفيد بر روي درختان 4-5دودويي

کپي کردن درختان دودويي -1کپي کردن درختان دودويي -1

- تعيين برابري و تساوي دو درخت2- تعيين برابري و تساوي دو درخت2

Satisfiability- مساله 3 Satisfiability- مساله 3

45

Page 46: فصل پنجم : درخت

درختان نخي دودويي5-5

دودويي درخت ي�ک در تهي اتص�االت تع�داد بيشتر از تعداد اشاره گرهاي غيرتهي است.

تع�داد ي�ک درخت دودويي از n + 1در اتص�ال تهي اس�ت. ي�ک راه 2nک�ل اتص�االت آن يع�ني ،

پ�رلين ب�راي ب�ه ک�ارگيري اين اتص�االت توس�ط پيش�نهاد ش�د. راه ح�ل اين ب�ود ک�ه از و ت�ورنتن

اتص�االت تهي ب�راي ارتب�اط ب�ا ديگ�ر گ�ره ه�اي اين ص�ورت در ک�ه اس�تفاده ش�ود ي�ک درخت

مي نامند.درخت نخي درخت را

46

Page 47: فصل پنجم : درخت

درختان نخي دودويي5-5زي��ر ق��وانين از نخي اتص��االت ايج��اد براي

استفاده مي شود :

تهي باش�د ، آن را ط�وري ptr-> left_child اگ�ر 1)تغي�ير مي دهيم ک�ه ب�ه گ�ره اي ک�ه در پيم�ايش

inorder قبل از ptr.قرار دارد ، اشاره کند

اگ�ر 2) ptr-> right_child را آن ، باش�د تهي ط�وري تغي�ير مي دهيم ک�ه ب�ه گ�ره اي ک�ه در

ق�رار دارد ، اش�اره ptr بع�د از inorderپيم�ايش کند.

47

Page 48: فصل پنجم : درخت

درختان نخي دودويي5-5

هنگ�امي ک�ه درخ�تي را در حافظ�ه نم�ايش مي دهيم ، بايس�تي بت�وانيم بين اتص�االت نخي و ب�ا را ک�ار اين قاي�ل ش�ويم. تف�اوتي واقعي انج�ام ب�ه ه�ر گ�ره اف�زودن دو فيل�د اض�افي

right_thread ، left_threadمي دهيم ک�ه آنه�ا را مي ناميم.

48

Page 49: فصل پنجم : درخت

درختان نخي دودويي5-5A

CB

D F GE

IH

درخت نخي متناظر

A

CB

D F GE

IH

اتصاالت نخي

49

Page 50: فصل پنجم : درخت

يک درخت inorder پيمايش 5-5نخي دودويي

مانن�د گ�ره ه�ر درخت ptrبراي ي�ک در ، ptr->right_thread = TRUEدودويي ، چنانچ�ه

بع�دي گ�ره تعري�ف طب�ق ، در ptrباش�د مي باش�د inorder ، ptr->right_childپيم�ايش

، ب�ا پ�ايين ptr. در غ�ير اين ص�ورت گ�ره بع�دي چپ فرزن��دان مس��ير روي از ptrرفتن

ت�ا وق�تي ک�ه ptrط�رف فرزن�د س�مت راس�ت وض�عيت ب�ا اي گ�ره left_thread = TRUEب�ه

برسيم ، تعيين مي شود .

50

Page 51: فصل پنجم : درخت

گ�ره insuccتابع ، پش�ته از اس�تفاده ب�دون پيم�ايش در درخت inorderبع�دي ي�ک در را

نخي دودويي پيدا مي کند.

پيم��ايش ب��ا inorderبراي ت��وانيم مي مک�رر را insuccفراخ�واني ه�ا گ�ره تم�ام

بازيابي کنيم .

يک درخت inorder پيمايش 5-5نخي دودويي

51

Page 52: فصل پنجم : درخت

يک درخت inorder پيمايش 5-5نخي دودويي

threaded_pointer insucc (threaded_pointer tree){/* find the inorder sucassor of tree in a threaded binary tree */

threaded_pointer temp ;temp = tree -> right_child ;if (! Tree -> right_thread)

while (! temp -> left_thread)temp = temp -> left_child ;

return temp ;}

:insuccتابع

در خ�اص گ�ره ي�ک ، بع�د گ�ره نم�ودن پي�دا inorderپيمايش

52

Page 53: فصل پنجم : درخت

يک درخت inorder پيمايش 5-5نخي دودويي

Void tinorder (threaded_pointer tree){/* traverse the threaded binary tree inorder */

threaded_pointer temp = tree ;for ( ; ; ) {

temp = insucc (temp) ;if (temp = tree ) break ;printf (“ % 3c” ، temp -> data ) ;

}}

53

Page 54: فصل پنجم : درخت

نحوه اضافه كردن يك گره جديد به درخت نخ كشي شده رابررسي نماييد.

براي ارائه روش از نرم افزارpower point براي انيميشن دادن به كار استفاده نماييد.

بايد الگوريتم كار با دقت آورده شده و ميتوانيد از شبه كدنيز استفاده كنيد.

تمرين

54

Page 55: فصل پنجم : درخت

هرمADT ( نوع داده مجرد (6-5

max tree درخ�تي اس�ت ک�ه مق�دار کلي�د ه�ر گ�رهآن کمتر از مقادير کليدهاي فرزندانش نباشد.

max heap ي�ک درخت دودويي کام�ل اس�ت ک�ه نيز مي باشد.max treeيک

min tree درخ�تي اس�ت ک�ه مق�دار کلي�د ه�ر گ�ره فرزن��دانش کلي��دهاي مق��ادير از بيش��تر آن

نباشد.

min heap ک�ه ي�ک درخت دودويي کام�ل اس�ت مي باشد.min treeدر واقع يک

55

Page 56: فصل پنجم : درخت

min و max heap مثال از 6-5heap

14

712

10 8

[1]

[2]

[4] [ 5]

[3]

6

[6]

2

47

10

8

[1]

[2]

[4] [5]

[3]

6

[6]

9

36

5

[1]

[2]

[4]

[3]

10

8320

50

[1]

[2]

[4]

[3]

max heapمثال از

min heapمثال از

56

Page 57: فصل پنجم : درخت

( تهيheap)ايجاد يک هرم

( heapجايگذاري عنصر جديد به هرم )

( heapحذف بزرگترين عنصر از هرم )

heap اعمال اساسي بر روي 6-5

57

Page 58: فصل پنجم : درخت

صف اولويت6-5

ص�ف اول�ويت غالب�ا ه�رم ه�ا ب�راي پي�اده س�ازي استفاده مي شوند. ها

در ص�ف اول�ويت ه�ا عنص�ري ک�ه داراي ب�االترين ، ح�ذف مي اول�ويت هس�ت ( ت�رين پ�ايين ي�ا )

شود.

ص�ف • ي�ک ب�راي نم�ايش ت�رين س�اده آراي�ه اولويت مي باشد.

58

Page 59: فصل پنجم : درخت

نمايش هاي صف اولويت6-5

)(log 2 nO)(log 2 nO

Deletion Insertion Representation

Θ(n) Θ(1) Unordered array

Θ(n Θ(1) Unordered linked list

Θ(1) O(n) Stored array

Θ(1) O(n) Stored linked list

Max heap

59

Page 60: فصل پنجم : درخت

Max درج عناصر به داخل يک 6-5Heap

20

215

14

[1]

[2]

[4]

[3]

10[5]

قب�ل از heapال�ف - درخت درج

گ�ره اولي�ه مح�ل - ب جديد

عنص��ر درج جديد

م��وقعيت ه��ر در جدي��د گ��ره ک��ردن اض��افه ،تعري�ف زي�را heapديگ�ري کن�د مي نقض را

نتيجه يک درخت دودويي کامل نخواهد بود.

20

215

14

[1]

[2]

[4]

[3]

10[5]

60

Page 61: فصل پنجم : درخت

Max heap درج عنصر به يک 6-5

61

Page 62: فصل پنجم : درخت

از آنجا کهheap يک درخت کامل با n عنصر مي مي باشد. اين بدين )log2)nباشد ، داراي ارتفاع

)log2)n به ميزان whileمعني مي باشد که حلقه تکرار شود. بنابراين پيچيدگي تابع درج برابر

log2)n(.مي باشد

تحليل تابع 6-5insert_max_heap

62

Page 63: فصل پنجم : درخت

Max Heap حذف عنصري از 6-5

20

215

14

[1]

[2]

[4]

[3]

10

[5]

ح�ذف مي max heapهنگ�امي ک�ه عنص�ري از درخت ريش�ه از را آن ، مي heapش�ود

گيريم.

215

14

[1]

[2]

[4]

[3]

[5]

20 removed

max heapحذف يک عنصر از

63

Page 64: فصل پنجم : درخت

Max Heap حذف عنصري از 6-5

64

Page 65: فصل پنجم : درخت

مي باشد.پيچيدگي حذف برابر

زمان حذف يک عنصر دلخواه از درختheap با n مي باشد. )O)nعنصر ، برابر

تحليل تابع 6-5delete_max_heap

)(log 2 nO

65

Page 66: فصل پنجم : درخت

درختان جستجوي دودويي7-5ي�ک درخت دودويي اس�ت يک درخت جس�تجوي تهي درخت اگ�ر باش�د. تهي اس�ت ممکن ک�ه

نباشد خصوصيات زير را برآورده مي کند :

ه�ر عنص�ر داراي ي�ک کلي�د اس�ت و دو عنص�ر واق�ع در ، باش�ند يکس�ان کلي�د داراي نباي�د

کليدها منحصر به فردند.

کلي�دهاي واق�ع در زي�ردرخت غ�يرتهي چپ باي�د کم�تر از مق�دار کلي�د واق�ع در ريش�ه زي�ردرخت

راست باشد.

کلي�دهاي واق�ع در زي�ردرخت غ�يرتهي راس�ت ريش�ه در واق�ع کلي�د مق�دار از بزرگ�تر باي�د

زيردرخت چپ باشد.

درخت�ان خ�ود ن�يز راس�ت و چپ زيردرخت�ان جستجوي دودويي ميباشند.

66

Page 67: فصل پنجم : درخت

درختان جستجوي دودويي7-5

30

405

2

مثال

67

Page 68: فصل پنجم : درخت

class BSTNode{

friend class BST;private:

BSTNode *left;int key;BSTNode *right;

public:int GetKey();

};

class BST{public:

BST();bool Insert(int key);BSTNode* Search(int key);void DeleteNode(BSTNode* pNode,bool bRight);

private:BSTNode *root;

};

ش�ده نوش�ته كالس در ف�رض ش�ده ك�ه ه�ر گ�ره كلي�د مق�دار ي�ك تنه�ا ط�راحي در ولي دارد پيش�رفته ت�ر ميت�وان از

قالبها استفاده نمود.

68

Page 69: فصل پنجم : درخت

جستجوي يک درخت دودويي7-5

ب�ا عنص�ري دنب�ال باش�يم خواس�ته کني�د فرض ابت�دا از ريش�ه (keyکلي�د ) ش�روع root بگ�رديم.

درخت ، باش�د تهي ريش�ه اگ�ر ، ک�نيم مي جس�تجو و ب�وده عنص�ري ه�ر فاق�د جس�تجو

را ب�ا keyن�اموفق خواه�د ب�ود. در غ�ير اين ص�ورت با مقدار کليد ريشه مقايسه کرده :

اگ�ر key ، باش�د از مق�دار کلي�د ريش�ه کم�تر هيچ عنص�ري در زي�ردرخت راس�ت وج�ود ن�دارد

براب�ر کلي�دي داراي بن�ابراين keyک�ه ، باش�د زيردرخت چپ ريشه را جستجو مي کنيم.

بزرگ�تر از مق�دار کلي�د ريش�ه باش�د ، key اگ�ر زيردرخت راست را جستجو مي کنيم. 69

Page 70: فصل پنجم : درخت

search تحليل 7-5

ارتف�اع ي�ا عم�ق ي�ک درخت جس�تجوي hاگ�ر در م�دت را ، عم�ل جس�تجو باش�د دودويي

O(h).انجام مي شود

70

Page 71: فصل پنجم : درخت

BSTNode* BST::Search(int key){

return Search(root , key);}BSTNode* BST::Search(BSTNode* p, int key){

if (!p)return 0;

if(key ==p→key)return p;

if(key <p→key)return Search(p→left , key);

elsereturn Search(p→right , key);

}

بصورت BSTالگوريتم جستجو در بازگشتي

71

Page 72: فصل پنجم : درخت

BSTNode* BST::Search(int key){

BSTNode *p=root;while(p!=NULL){

if(key < p→key)p = p→left;

else if(key > p→key)p = p→right;

else return p;

}return 0;}

بصورت BSTالگوريتم جستجو در غير بازگشتي

72

Page 73: فصل پنجم : درخت

درج عنصري به داخل درخت 7-5جستجوي دودويي

، ابت�دا باي�د keyبراي درج عنص�ر جدي�دي ب�ه ن�ام موج�ود عناص�ر ب�ا کلي�د آي�ا ک�ه نم�ود مش�خص متف�اوت اس�ت ي�ا خ�ير. ب�راي انج�ام اين ک�ار باي�د ن�اموفق اگرجس�تجو ک�رد، جس�تجو را درخت را در محلي ک�ه جس�تجو خاتم�ه ، عنص�ر باش�د

پيدا نموده است ، درج مي کنيم.

73

Page 74: فصل پنجم : درخت

درج عنصري به داخل درخت جتجوي دودويي7-5

30

40

5

2

30

40

5

2 80

30

40

5

2 35

80

ي جايگذار

80

ي ار

گذايج

35

مثال

74

Page 75: فصل پنجم : درخت

insert_node تحليل 7-5

در ي�ک numزم�ان الزم ب�راي جس�تجوي براب�ر نح�وي O(h)درخت ب�ه باش�د مي

درخت hک�ه ارتف�اع ي�ا عم�ق ب�ا براب�ر Θ(1)اس�ت. بقي�ه الگ�وريتم ني�از ب�ه زم�ان

ني�از م�ورد ک�ل زم�ان بن�ابراين دارد. insert_node برابر با Θ(h) .مي باشد

75

Page 76: فصل پنجم : درخت

bool BST::Insert(int key){

BSTNode *p=root;BSTNode *q;while(p!=NULL){

q = p;if(key < p→key)

p = p→left;else if(key > p→key)

p = p→right;else

return false; //Error for duplicate key}p = new BSTNode (key);if (!root){

root = p;return true;

}if(key < q→key)

q→left = p;else

q→right = p;return true;}

76

Page 77: فصل پنجم : درخت

حذف عنصري از درخت 7-5جستجوي دودويي

از درخت زي�ر باي�د فيل�د فرزن�د 35براي ح�ذف ق�رار داده NULLچپ وال�د اين گ�روه را براب�ر

و گره را آزاد نمود :30

405

2 35 80

77

Page 78: فصل پنجم : درخت

زم�اني ک�ه ي�ک گ�ره ب�رگ ب�ا دو فرزن�د ح�ذف مي ش�وند ، گ�ره را ب�ا بزرگ�ترين عنص�ر در زي�ر در عنص��ر کوچک��ترين ي��ا و چپ درخت زي�ردرخت راس�ت آن گ�ره ج�ايگزين و تع�ويض

کرد.

انج�ام مي گ�يرد ، O(h)عم�ل ح�ذف در زم�ان عمق درخت مي باشد.hبه نحوي که

حذف عنصري از درخت 7-5جستجوي دودويي

78

Page 79: فصل پنجم : درخت

void DeleteNode (BSTNode* pNode,bool bRight){ BSTNode *CurNode = pNode→left; if (bRight) CurNode = pNode→right; if( !CurNode→right && !CurNode→ left) { delete CurNode; return; } if(CurNode→right && !CurNode→ left) { if (bRight) pNode→right = CurNode→right; else pNode→left = CurNode→right; delete CurNode; return; } if(!CurNode→right && CurNode→ left) { if (bRight) pNode→right = CurNode→left; else pNode→left = CurNode→left; delete CurNode; return; }

if(CurNode→right && CurNode→ left) { BSTNode *tmp = CurNode→left; pNode = CurNode; bRight = false; while (tmp→right) {

pNode = tmp; bRight = true;

tmp = tmp→right; } CurNode→key = tmp→key; DeleteNode(pNode , bRight); }}

79

Page 80: فصل پنجم : درخت

درختان جستجوي متعادل7-5

عم�ق بيش�ترين ب�ا جس�تجو درخت�ان درخت�ان ،جستجوي متعادل ناميده مي شوند.

ک�ه دارن�د وج�ود متع�ادلي جس�تجوي درخت�ان O(h)عم�ل جس�تجو ، درج و ح�ذف را در زم�ان

، red_blackممکن مي س�ازند از جمل�ه درخت�ان 2-3 ، AVL

)(log 2 nO

80

Page 81: فصل پنجم : درخت

درختان انتخابي8-5

مجموع�ه و رش�ته م�رتب ش�ده kفرض کني�د داراي اي از عناص�ر هس�تيم ک�ه باي�د در ي�ک رش�ته واح�د ادغ�ام ش�وند. ه�ر دنبال�ه ي�ا ت�رتيب ش�امل تع�دادي رک�ورد ب�ه ت�رتيب غ�يرنزولي و فيل�د مشخص�ي ب�ه

مي باشد.keyنام

اجرا ( يک دنباله مرتبrun( .ناميده مي شود

ک�ه کني�د در n ف�رض تع�داد رکورده�ا ،k اج�را باش�د، عم�ل ادغ�ام مي توان�د ب�ا تک�رار رک�ورد ب�ا

کوچکترين کليد انجام شود.

81

Page 82: فصل پنجم : درخت

درختان انتخابي8-5

امک�ان موج�ود k کوچک�ترين کلي�د باي�د ازبين kپي�دا ش�ود و مي توان�د رک�وردي قب�ل از ه�ر

) باشد.k-runsاجرا (

) ، k-runs اج�را (k به�ترين روش ب�راي ادغ�ام انتق�ال k-1نيازمن�د و تع�يين ب�راي مقايس�ه

رکورد بعدي به خروجي مي باشد.

، مي ت�وانيم ب�ا اس�تفاده از اي�ده k>2 ب�ه ازاي الزم ه�اي مقايس�ه تع�داد ، انتخ�ابي درخت ک�اهش را عنص�ر کوچک�ترين تع�يين جهت

دهيم.

82

Page 83: فصل پنجم : درخت

درختان انتخابي8-5

يک درخت انتخ�ابي ، ي�ک درخت دودويي اس�ت ک�ه ه�ر گ�ره آن کوچک�تر از دو فرزن�د خ�ود مي دهن�ده نش�ان ريش�ه گ�ره ، بن�ابراين باش�د

کوچکترين گره در درخت مي باشد.

83

Page 84: فصل پنجم : درخت

6

86

9 8 17

6

910

620

98 17

90

[1]

[2]

[4]

[3]

[5]

[12][11][10][9][8]

[6]

[14][13] [15]

[7]

درختان انتخابي 8-5

15

16

مثال

20

38

20

30

15

25

15

50

11

16

100

110

18

20

run1 run 2 run 3 run 4 run 5 run 8run 7run 6

Page 85: فصل پنجم : درخت

مي باشد. درخت برابر زمان تجديد ساختار

تمام زمان الزم براي ادغام nمي باشد. رکورد برابر

زمان کل الزم جهت ادغام k( اجرا run برابر ) مي باشد.

85

درختان انتخابي8-5

)(log 2 kO

)log( 2 knO

)log( 2 knO

Page 86: فصل پنجم : درخت

درخت مجزا مي باشد.n ≤ 0جنگل مجموعه

اگر ريشه درخت را حذف کنيم ، آنگاه داراي يک جنگل

خواهيم بود.

جنگل ها9-5

86

Page 87: فصل پنجم : درخت

براي تبديل اين جنگل به يک درخت دودويي واحد :ب�ه از درخت�ان جنگ�ل را ي�ک نم�ايش دودويي ه�ر ابت�دا

دست مي آوريمسپس تم�ام درخت�ان دودويي را از طري�ق فيل�د هم�زاد

گره ريشه به يکديگر متصل مي کنيم.

تبديل جنگل به يک درخت 9-5دودويي

87

Page 88: فصل پنجم : درخت

تبديل جنگل به يک درخت 9-5دودويي

A

DB C

E

F

G

IH

A

EB

F G

I

H

C

D

تبديل به درخت دودويي

88

Page 89: فصل پنجم : درخت

دودويي اگ�ر درخت آنگ�اه ، باش�د درخت�ان از جنگلي :Bمتناظر با اين جنگل يعني

باشد ، تهي خواهد بود.n=0اگر )1(ريش�ه)2( ب�ا براب�ر اي ريش�ه داراي داراي ، باش�د مي

ب�ا براب�ر نه�ايت داراي زي�ردرخت چ�پي باش�د، و در مي مي باشد. زيردرخت راست

تبديل جنگل به يک درخت 9-5دودويي

nTT ,...,1

),...,( 1 nTT

)( 1T)( 1T),...,( 2 nTTB

89

Page 90: فصل پنجم : درخت

پيمايش جنگل9-5

postorder ، inorder ، preorderپيم�ايش ه�اي دودويي درخت جنگ�ل Tمتن�اظر ي�ک F

Fداراي ي�ک تن�اظر ط�بيعي ب�ا پيم�ايش ه�اي مي باشند.

90

Page 91: فصل پنجم : درخت

ب�ه preorderپيم�ايش مرب�وط T ب�ا مع�ادل مي preorder در درخت Fبازي�ابي گ�ره ه�اي

باشد:

تهي باشد ، برگرديد.Fاگر 1)

را بازيابي کنيد.F ريشه درخت اول 2)

ص�ورت 3) ب�ه را اول درخت ، زي�ردرخت preorder.پيمايش کنيد

درخت�ان 4) س�اير F ص�ورت ب�ه را preorder پيمايش کنيد.

پيمايش جنگل9-5

91

Page 92: فصل پنجم : درخت

پيمايش جنگل9-5

ب�ه inorderپيم�ايش مرب�وط T گ�ره مع�ادل درخت Fه�اي در inorder ب�ه ک�ه اس�ت

صورت زير تعريف مي شود :

تهي باشد ، برگرديد.F اگر 1) ريش�ه درخت ، درخت اول را ب�ه ص�ورت 2)

inorder.پيمايش کنيد ريشه درخت اول را بازيابي کنيد.3)ص�ورت 4) ب�ه را درخت�ان س�اير inorder

پيمايش کنيد.

92

Page 93: فصل پنجم : درخت

پيمايش جنگل9-5پيم�ايش ب�راي ب�راي ط�بيعي مع�ادل گون�ه هيچ

postorder جنگ�ل ي�ک متن�اظر دودويي درخت را F ي�ک جنگ�ل postorderوج�ود ن�دارد . پيم�ايش

به صورت زير بيان ي کنيم :

تهي باشد ، برگرديد.F) اگر 1درخت 2 اولين ، زي�ردرخت (F ص�ورت ب�ه را

postorder.پيمايش کنيد را ب�ه ص�ورت F) س�اير درخت�ان ب�اقي مان�ده3

postorder.پيمايش کنيد را بازيابي کنيدF) ريشه اولين درخت4

93

Page 94: فصل پنجم : درخت

نمايش مجموعه10-5

از ت�ا 0ده عض�و ب�ه س�ه مجموع�ه 9 ک�ه مي ، باش�ند ش�ده تفکي�ک هم از مج�زا

}5,3,2,,{}9,4,1,{}8,7,6,0{توانند بدين صورت باشند : 123 SSS

0

86 7

4

91

2

53

1S 2S 3S

مثال

94

Page 95: فصل پنجم : درخت

در ه�ر مجموع�ه ب�ر خالف معم�ول ک�ه اش�اره گره�ا ب�ه از وال�د ب�ه فرزن�دان در نظ�ر گرفت�ه مي ش�دند، در اينج�ا اش�اره گره�ا از فرزن�دان ب�ه وال�د تنظيم مي پ�دري رابط�ه ب�ا ه�ا گ�ره حقيقت در ي�ا و ش�وند

اتصال يافته اند.

نمايش مجموعه10-5

95

Page 96: فصل پنجم : درخت

اعمال روي مجموعه ها10-5

حداقل اعم�الي ک�ه ب�ر روي مجموع�ه انج�ام مي شود ، به شرح زير است :

دو ) : اگ�ر union(اجتم�اع مجموع�ه مج�زا 1)ب�ه آنه�ا انگ�اه اجتم�اع ، مجموع�ه مج�زا باش�ند

صورت زير تعريف مي شود :

ji SوS

jiUSS باش�د ي�ا عض�و ي�ا عض�وx ک�ه x{ هم�ه اعض�ا ب�ه ص�ورت {

iSSj

2 (find(i) پي�داکردن )i ک�ه اي مجموع�ه : ( i عضو آن است را پيدا کنيد

96

Page 97: فصل پنجم : درخت

اعمال روي مجموعه ها10-5

مثال

21USS

0

86 7 4

91

97

Page 98: فصل پنجم : درخت

Weighting قانون 10-5 Union(i, j )براي

: اگ�ر تع�دا گ�ره Union(i,j ) ب�رايWeightingقانون کم�تر از تع�داد گ�ره ه�ا در درخت iه�ا در درخت

j ، باش�د j را وال�د i در غ�ير اين ص�ورت ، i را قرار مي دهيم.jوالد

تعريف

98

Page 99: فصل پنجم : درخت

پياده سازي قانون 10-5Weighting

باي�د ب�دانيم Weightingبراي پي�اده س�ازي ق�انون ک�ه در ه�ر درخت چن�د گ�ره وج�ود دارد. اين ک�ار را ب�دين ت�رتيب انج�ام مي دهيم ک�ه در ريش�ه ه�ر

ي�ک i ق�رار مي دهيم. اگ�ر countدرخت ي�ک فيل�د تع�داد گ�ره count[i]گ�ره ريش�ه باش�د ، آنگ�اه در ب�ه ص�ورت ي�ک Countه�اي آن درخت خواه�د ب�ود.

فيل�د در منفي گذاش�ته مي ش�ود. parentع�دد را بي�ان مي ک�نيم ، Weightingزم�اني ک�ه ق�انون

را ص�ورت اين ب�ه اجتم�اع مي union2عم�ل ناميم.

99

Page 100: فصل پنجم : درخت

مجموعه ها10-5

1][log 2 n

n ي�ک درخت ب�ا T ف�رض کني�د اص�ل موض�وعي : ايج�اد ش�ده باش�د ، union2گ�ره باش�د ک�ه توس�ط

در گ�رهي هيچ ص�ورت اين س�طحي Tدر ، نخواهد داشت. بيشتر از

عض�و وج�ود داش�ته باش�د ، nاگ�ر در ي�ک درخت بيش�ترين زم�ان ب�راي ي�افتن ي�ک عض�و ب�ه ص�ورت

خواهد بود. )(log 2 nO

)log( 2 nmnO از ترکي�بي و union عم�ل n-1اگ�ر mعمل find

داش�ته باش�يم ، در ب�دترين ح�الت ممکن ، زم�ان درمي آيد. به صورت

گ�رهي روي j اگ�ر تعري�ف ( ق�انون تخ�ريب ) : را فرزن�د j ت�ا ريش�ه خ�ود باش�د ، آنگ�اه iمس�ير از

ريشه قرار دهيد.

100