درخت بخش 2

39
ت خ در ش خ ب2 TREE A.M. Safaei ه گان ی ش خ ب ی ست ه د داون ام خ هن ن م ت س ه سه ل خ

Upload: ila-riley

Post on 02-Jan-2016

151 views

Category:

Documents


3 download

DESCRIPTION

جلسه هشتم. به نام خداوند هستی بخش یگانه. درخت بخش 2. TREE. A.M. Safaei. جلسه هشتم. درخت ها. درخت عمومی ( General Tree ) درخت عمومی یک درخت K تایی است که هر گره آن می تواند حداکثر K فرزند داشته باشد. تفاوت درخت دودویی و درخت عمومی درخت دودویی هر گره حداکثر دو فرزند دارد. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: درخت بخش 2

درخت2بخش

TREE

A.M. Safaei

بخشیگانه هستی خداوند نام به هشتم جلسه

Page 2: درخت بخش 2

هشتم جلسه

( درختعمومیGeneral Tree)

درخت – یک عمومی حداکثر Kدرخت تواند می آن گره هر که است Kتایی

. باشد داشته فرزند

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

. دارد فرزند دو حداکثر گره هر دودویی درخت

تواند نمی عمومی درخت یک ولی باشد تهی میتواند دودویی درخت یک

. باشد خالی

یک در فرزند این آنگاه باشد، داشته فرزند یک تنها درخت یک کنید فرض

در شود می متمایز هم از چپ یا راست فرزند عنوان با دودویی درخت

. نیست آنها بین تمایزی هیچگونه درختعمومی در که حالی

ها درخت

درخت لحاظ از ولی باشند می متمایز هم با دودویی درخت لحاظ از ب و الف درخت دو

. ندارند تفاوتی هیچگونه هم با عمومی

Page 3: درخت بخش 2

هشتم جلسه

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

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

سمت – اتصال جز به را پدرشان به همزاد های گره کلیه ارتباط سپس

. کنیم می قطع فرزند ترین چپ

را – افقی سطح در هم به متصل های های 45گره عقربه جهت در درجه

. چرخانیم ساعتمی

ها درخت

Page 4: درخت بخش 2

هشتم ها جلسه درخت

: دودویی درخت به عمومی درخت تبدیل مثال

Page 5: درخت بخش 2

هشتم جلسه

) دار ) پیچ درختان دودویی نخی درختان

گرهای اشاره تعداد از بیشتر دودویی درخت یک در تهی اتصاالت تعداد

. است غیرتهی

تعداد دودویی درخت یک ، n + 1در یعنی آن اتصاالت کل از تهی 2nاتصال

دیگر. با ارتباط برای تهی اتصاالت از که این کارگیری به برای راه یک است

می نخی درخت را درخت صورت این در که شود استفاده درخت یک های گره

نامند.

تعداد با دودویی درخت یک تعداد 2nگره، nدر این از که دارد وجود گر اشاره

n-1 همواره و است شده استفاده گر مقدار n+1اشاره گر . Nullاشاره دارند

اشاره برای آنها از توان می استفاده بدون گرهای اشاره این از استفاده با

. هنگام در نتیجه در کرد پیمایشاستفاده یک در بعدی یا قبلی عناصر به کردن

. اشاره که درختی کرد پیمایش را درخت توان می سریعتریی نحو به پیمایش

نخ درخت گیرد قرارمی استفاده مورد صورت بدین آن بالاستفاده های گر

. گویند می کشیشده

ها درخت

Page 6: درخت بخش 2

هشتم جلسه

) دار ) پیچ درختان دودویی نخی درختان

نخی 1. گرهای اشاره از واقعی گرهای اشاره باید نخی های درخت در

منطقی فیلد دو گره هر به لذا باشند، می Rtagو Ltagمتمایز اضافه

اگر مقدار Rtagیا Ltagشود نخی Trueدارای گر اشاره آنگاه باشند

. باشد می عادی گر اشاره اینصورت غیر در و باشد می

گر 2. اشاره به Leftاگر اشاره جهت باشد، بالاستفاده که صورتی در

این از قبل آن میانودی پیمایش در که شود می استفاده عنصری

گر اشاره و دارد قرار استفاده rightعنصر بعدی عنصر به اشاره برای

. میشود

ها درخت

Ltag Left info Right Rtag

Page 7: درخت بخش 2

هشتم جلسه

) دار ) پیچ درختان دودویی نخی درختان

: میشود استفاده زیر قوانین از نخی اتصاالت ایجاد برای

گره ptr left_childاگر 1. به که دهیم می تغییر طوری را آن ، باشد تهی

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

به ptr right_childاگر 2. که دهیم می تغییر طوری را آن ، باشد تهی

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

ها درخت

Page 8: درخت بخش 2

هشتم جلسه

) دار ) پیچ درختان دودویی نخی درختان

دودویی نخی درخت از ای نمونه

ها درخت

G

نخي اتصاالت

Page 9: درخت بخش 2

هشتم جلسه

) دار ) پیچ درختان دودویی نخی درختان

راست سمت گر اشاره زیر شکل سمتچپ Gدر گر اشاره هیچ Hو به

این نخی های درخت ارائه از هدف که حالی در کنند نمی اشاره جایی

ای گره منظوری این برای باشند، نداشته تهی گر اشاره هیچ که بود

گر Headبنام اشاره که گیریم می نظر و rootدر کند می اشاره آن به

Ltag گرهhead. کند می اشاره واقعی درخت اول گره شروع به

ها درخت

Page 10: درخت بخش 2

هشتم جلسه

) دار ) پیچ درختان دودویی نخی درختان

ها درخت

Head

Page 11: درخت بخش 2

هشتم جلسه

جنگل

.1 . است متمایز درخت چند یا صفر از مرتب ای مجموعه جنگل یک

از 2. ای مجموعه .N>=0جنگل است مجزا درخت

.3. آید می بوجود جنگل کنیم حذف را درخت یک ریشه اگر

ها درخت

جنگل

Page 12: درخت بخش 2

هشتم جلسه

دودویی درخت به جنگل تبدیل

.1 ( روش از استفاده با کنیم می تبدیل دودویی درخت به را درخت هر ابتدا

راست – ( برادر چپ فرزند

راست 2. فرزند از را راست سمت درخت هر ریشه راست به چپ از سپس

. گیرم می نظر درختسمتچپشدر

. کنید : تبدیل دودویی درخت به را زیر جنگل مثال

ها درخت

جنگل

Page 13: درخت بخش 2

هشتم جلسه

دودویی درخت به جنگل تبدیل

– ( روش از استفاده با کنیم می تبدیل دودویی درخت به را درخت هر ابتدا

راست – ( برادر چپ فرزند

ها درخت

Page 14: درخت بخش 2

هشتم جلسه

دودویی درخت به جنگل تبدیل

درخت – راست فرزند بعنوان را درخت هر ریشه راست به چپ از سپس

. گیریم می نظر در چپی سمت

ها درخت

A

EB

F G

I

H

C

D

Page 15: درخت بخش 2

هشتم جلسه

مشخص ساختار با درختان

o درختHEAP :: ) هرم )هرم ) مجرد داده (ADTنوع

مساوی max treeدرخت – یا بزرگتر آن گره هر کلید مقدار که است درختی

. فرزندانشباشد

مساوی min treeدرخت – یا کوچکتر آن گره هر کلید مقدار که است درختی

. فرزندانشباشد

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

که min heapدرخت – است کامل دودویی درخت .min treeیک باشد می نیز

ها درخت

Page 16: درخت بخش 2

هشتم جلسه

از • max heapمثال

ها درخت

14

712

10 8 6

2

47

10 8 6

9

36

5

10

8320

50

از • min heapمثال

Page 17: درخت بخش 2

هشتم جلسه

درخت در عنصر یک HEAPدرج

صورت طوری باید آن از عنصری حذف و درخت در عنصر یک کردن اضافه اعمال

( هرم بصورت درخت که خاصیت( Heapپذیرد و کامل دودوئی درخت را heapیعنی

. بماند باقی داراست

درخت یک اینکه فرض هم heapبا و است کامل چپ maxtreeهم از را گره هر ابتدا ،

برای سپس ، شود کامل درخت تا کنیم می درج درخت در سطح هر در راست به

شرط بزرگتر maxtreeبرقراری اجدادش از که جایی تا را شده درج گره درخت بودن

. کنیم می جابجا آنها با باشد

: ایجاد مراحل

کرده 1. ایجاد خالی گره یک ابتدا

است heapسپس 2. کامل دودوئی درخت چون کنیم، می بررسی را درخت بودن

کنیم . می پر و ساخته را آن راست به چپ از بنابراین

ها درخت

Page 18: درخت بخش 2

هشتم جلسه

: عدد درج درخت 27مثال نوع Heapبه maxtreeاز

ها درخت

Page 19: درخت بخش 2

هشتم جلسه

: درخت . maxheapمثال کنید رسم را رو روبه های ورودی از , 30, 44حاصل

50 ,22 ,60 ,55 ,77

ها درخت

Page 20: درخت بخش 2

هشتم جلسه

: درخت . maxheapمثال کنید رسم را رو روبه های ورودی از , 30, 44حاصل

50 ,22 ,60 ,55 ,77

ها درخت

Page 21: درخت بخش 2

هشتم جلسه

: درخت . maxheapمثال کنید رسم را رو روبه های ورودی از , 30, 44حاصل

50 ,22 ,60 ,55 ,77

ها درخت

7744

55

جابجائی 2

Page 22: درخت بخش 2

هشتم جلسه

درخت از HEAPحذفعنصری

ترین پائین در سپس و شود می حذف ریشه مقدار همواره حذف برای

سپس و دهیم می قرار ریشه بجای را برگ ترین راست سمت سطح،

. از که جایی تا را جدید ریشه کار این برای کنیم می تنظیم را درخت

کنیم . می جابجا آنها ترین بزرگ یا باشد تر کوچک خود فرزندان

ها درخت

Page 23: درخت بخش 2

هشتم جلسه

درخت های HEAPکاربرد

درخت اولویت Heapکاربرد صف در

اضافه اولویت صف به اختیاری اولویت با را عنصری توان می اولویت صف در

. پیاده برای شود می حذف اولویت باالترین دارای عنصر حذف موقع در ولی نمود

درخت و پیوندی لیست آرایه، از توان می اولویت صف نمود Heapسازی استفاده

عمل هم که سازد می فراهم را امکان این هرم بصورت اولویت صف نمایش ولی

امر همین که شود می انجام زمان بهترین در درج عمل هم و حذف

درخت .Heapارجحیت دهد می نشان پیوندی لیست آرایه، به نسبت

ها درخت

)(log2nO

Page 24: درخت بخش 2

هشتم جلسه

درخت های HEAPکاربرد

درخت مرتبسازی Heapکاربرد در

با ای آرایه کردن مرتب درخت nبرای یک ابتدا . heapعضو سازیم می آرایه عناصر از

. از ها داده صعودی کردن مرتب برای کنیم حذفمی مکرر طور به را آن سپسریشه

Min heap از ها داده نزولی مرتبسازی جهت . max heapو میشود استفاده

از استفاده با شود می انجام زمان با حذف و درج عمل اینکه به توجه با

حلقه درخت nیک وسیله به مرتبسازی الگوریتم ای زمان heapمرتبه با

. میشود انجام

ها درخت

)(log2nO

)log( 2nnO

Page 25: درخت بخش 2

هشتم جلسه

( دودویی جستجوی (Binary Search Tree - BSTدرختان

خصوصیات دارای که است درختی دودویی جستجوی درخت یک

باشد : زیر

، باشند یکسان کلید دارای نباید عنصر دو و است کلید یک دارای عنصر هر

. فرداند به منحصر کلیدها واقع در

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

. باشد راست زیردرخت ریشه

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

. باشد زیردرختچپ ریشه در واقع

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

ها درخت

30

405

2

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

را ها گره در موجود مقادیر

و صعودی شده مرتب بصورت

میانوندی را RVLپیمایش آن

به نزولی شده مرتب بصورت

. فرستند خروجیمی

Page 26: درخت بخش 2

هشتم جلسه

( دودویی درختجستجوی در عنصر یک (BSTجستجوی

کلید با عنصری دنبال باشیم خواسته کنید . keyفرض از ابتدا بگردیم

( جستجو( rootریشه درخت ، باشد تهی ریشه اگر ، کنیم می شروع

. صورت این غیر در بود خواهد ناموفق جستجو و بوده عنصری هر فاقد

key: کرده مقایسه ریشه کلید مقدار با با را

اگرkey زیردرخت در عنصری هیچ ، باشد ریشه کلید مقدار از کمتر

برابر کلیدی دارای که ندارد وجود زیردرخت keyراست بنابراین ، باشد

. کنیم می جستجو را ریشه چپ

اگرkey جستجو را راست زیردرخت ، باشد ریشه کلید مقدار از بزرگتر

. کنیم می

ها درخت

Page 27: درخت بخش 2

هشتم جلسه

درختجستجوی در عنصر یک جستجوی بازگشتی غیر الگوریتم

(BSTدودویی )

ها درخت

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;

}

Page 28: درخت بخش 2

هشتم جلسه

جستجوی درخت در عنصر یک جستجوی بازگشتی الگوریتم

(BSTدودویی )

ها درخت

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);

}

Page 29: درخت بخش 2

هشتم جلسه

جستجوی درخت در عنصر یک جستجوی های الگوریتم تحلیل

(BSTدودویی )

ها درخت

درخت در عنصر یک جستجو الگوریتم دو به توجه عمق BSTبا تا حداکثر که

با( hدرخت ) است برابر جستجو برای الزم زمان لذا یابد می O(h)ادامه

درخت در عنصر یک جستجوی اجرائی بهترین nبا BStمرتبه در گره

با است برابر حالت بدترین در و با برابراست .O(n)حالت

: درخت یک در کلیدی یافتن برای مقایسه تعداد حداکثر مثال

BST باn ؟ است مقداری چه با برابر گره

)(log2nO

درخت عمق اندازه به

Page 30: درخت بخش 2

هشتم جلسه

( دودویی درختجستجوی در عنصر (BSTدرج

ها درخت

نام – به جدیدی عنصر درج با keyبرای کلید آیا که مشخصنمود باید ابتدا ،

. را درخت باید کار این انجام برای خیر یا است متفاوت موجود عناصر

کرد که O(h)جستجو محلی در را عنصر ، باشد ناموفق اگرجستجو ،

کنیم می درج ، است نموده پیدا خاتمه .O(1)جستجو

در – درج و جستجو های الگوریتم اجرائی زمان BSTمرتبه با دو O(h)هر

. میشود انجام

Page 31: درخت بخش 2

هشتم جلسه

( دودویی درختجستجوی در عنصر (BSTدرج

ها درخت

30

405

2

30

405

2 81

81درج

30

405

2 36 81

36درج

Page 32: درخت بخش 2

هشتم جلسه

( دودویی درختجستجوی در عنصر درج تابع (BSTالگوریتم

ها درخت

void insert (node * tree, int key){

node *ptr; ptr = get node ( ); ptr info = key; ptr left = Null; ptr right = Null; if ( tree info > key) tree left = ptr; else if ( tree info < key) tree right = ptr;}

Page 33: درخت بخش 2

هشتم جلسه

دودویی : )2مثال درختجستجوی در عنصر (BSTدرج

ها درخت

عدد – فرضکنید زیر درخت عدد 37در جایگزین درخت 25را آنگاه شود

یک همچنان عدد BSTمزبور اگر ولی ماند خواهد جایگزین 42باقی را

دیگر 25 . BSTکنیم عدد کنید فرض حال بود درج 22نخواهد درخت را

. بود خواهد الزم عملیاتی چه کنیم40

5816

10 47 84

72

25

20

Page 34: درخت بخش 2

هشتم جلسه

عنصر : 2مثال دودویی )22درج درختجستجوی (BSTدر

ها درخت

–Key = 22 یعنی ریشه با طرف 40را به است کوچکتر آن از چون کنیم می مقایسه

چپ .16یعنی 40فرزند رویم می

–Key = 22 با راست 16را فرزند طرف به است بزرگتر آن از چون کنیم می مقایسه

16. رویم می

–Key =22 با چپ 25را فرزند طرف به است کوچکتر آن از چون کنیم می 25مقایسه

.20یعنی رویم می

–Key =22 با راست 20را فرزند طرف به است بزرگتر آن از چون کنیم می مقایسه

چون 20 و رویم ندارد 20می راست .22فرزند کنیم می درج درخت به را

40

5816

10 47 84

72

25

20

22

Page 35: درخت بخش 2

هشتم جلسه

( دودویی درختجستجوی در یک از (BSTحذفعنصری

ها درخت

–: دهد می رخ ممکن حالت سه گره آن جستجوی پساز گره حذفیک برای

–. نیست درخت تنظیم به نیازی و راحتیحذفشده به باشد برگ نظر مورد گره اگر

–. میشود پدر گره جانشین فرزند باشد، فرزند یک دااری تنها نظر مورد گره اگر

میانوندی – پیمایش باشد فرزند دو دارای نظر مورد گره می LVRاگر را درخت

گیرد می قرار نظر مورد گره از بعد میانوندی پیمایش در که ای گره نویسیم

. انتخابمیشود جانشین بعنوان

گره BSTاز 49حذف

Page 36: درخت بخش 2

هشتم ها جلسه درخت

گره BSTاز 80حذف

گره BSTاز 30حذف

گره – 2دارای 30چون

بنابراین است فرزند

میانودی پیمایش طبق

که ای گره بایست می

گره از قرار 30بعد

پدر گره بعنوان دارد

. شود داده قرار

–20 ,30 ,38 ,55 ,56 ,71

دودویی جستجوی درخت در یک از عنصری حذف

(BST)

زمان • در حذف گیرد ) O(h)عمل می (hانجام درخت عمق

Page 37: درخت بخش 2

هشتم جلسه

تمرین

آورید- 1 بدست را زیر عمومی درخت .نمایشدودویی

ها درخت

A

DB

K

F

C

E

G H J

L

NM

Page 38: درخت بخش 2

هشتم جلسه

کنید BSTدرخت- 2 رسم را زیر های ورودی از حاصل

40 ,60 ,50 ,33 ,55 ,11

عنصر- 3 درخت 40اگر ترسیم BSTاز را حاصل درخت شود حذف زیر بصورت

نمایید.

(40(20(10,30,)60(50(45,55(52,)70))))

4. کنید- رسم را زیر کارکترهای درج از حاصل دودویی درختجستجوی

C,O,R,N,F,L,A,K,E,S

.Heapدرخت- 5 کنید رسم مرحله به مرحله را زیر اعداد درج از حاصل

9,6,5,3,2,1

ها درخت

Page 39: درخت بخش 2

Any Question

????