درخت بخش 2
DESCRIPTION
جلسه هشتم. به نام خداوند هستی بخش یگانه. درخت بخش 2. TREE. A.M. Safaei. جلسه هشتم. درخت ها. درخت عمومی ( General Tree ) درخت عمومی یک درخت K تایی است که هر گره آن می تواند حداکثر K فرزند داشته باشد. تفاوت درخت دودویی و درخت عمومی درخت دودویی هر گره حداکثر دو فرزند دارد. - PowerPoint PPT PresentationTRANSCRIPT
درخت2بخش
TREE
A.M. Safaei
بخشیگانه هستی خداوند نام به هشتم جلسه
هشتم جلسه
( درختعمومیGeneral Tree)
درخت – یک عمومی حداکثر Kدرخت تواند می آن گره هر که است Kتایی
. باشد داشته فرزند
درختعمومی و دودویی درخت تفاوت
. دارد فرزند دو حداکثر گره هر دودویی درخت
تواند نمی عمومی درخت یک ولی باشد تهی میتواند دودویی درخت یک
. باشد خالی
یک در فرزند این آنگاه باشد، داشته فرزند یک تنها درخت یک کنید فرض
در شود می متمایز هم از چپ یا راست فرزند عنوان با دودویی درخت
. نیست آنها بین تمایزی هیچگونه درختعمومی در که حالی
ها درخت
درخت لحاظ از ولی باشند می متمایز هم با دودویی درخت لحاظ از ب و الف درخت دو
. ندارند تفاوتی هیچگونه هم با عمومی
هشتم جلسه
دودویی درخت به عمومی درخت تبدیل
کنیم، – می وصل یکدیگر به را همزاد های گره کلیه سطح هر در ابتدا
سمت – اتصال جز به را پدرشان به همزاد های گره کلیه ارتباط سپس
. کنیم می قطع فرزند ترین چپ
را – افقی سطح در هم به متصل های های 45گره عقربه جهت در درجه
. چرخانیم ساعتمی
ها درخت
هشتم ها جلسه درخت
: دودویی درخت به عمومی درخت تبدیل مثال
هشتم جلسه
) دار ) پیچ درختان دودویی نخی درختان
گرهای اشاره تعداد از بیشتر دودویی درخت یک در تهی اتصاالت تعداد
. است غیرتهی
تعداد دودویی درخت یک ، n + 1در یعنی آن اتصاالت کل از تهی 2nاتصال
دیگر. با ارتباط برای تهی اتصاالت از که این کارگیری به برای راه یک است
می نخی درخت را درخت صورت این در که شود استفاده درخت یک های گره
نامند.
تعداد با دودویی درخت یک تعداد 2nگره، nدر این از که دارد وجود گر اشاره
n-1 همواره و است شده استفاده گر مقدار n+1اشاره گر . Nullاشاره دارند
اشاره برای آنها از توان می استفاده بدون گرهای اشاره این از استفاده با
. هنگام در نتیجه در کرد پیمایشاستفاده یک در بعدی یا قبلی عناصر به کردن
. اشاره که درختی کرد پیمایش را درخت توان می سریعتریی نحو به پیمایش
نخ درخت گیرد قرارمی استفاده مورد صورت بدین آن بالاستفاده های گر
. گویند می کشیشده
ها درخت
هشتم جلسه
) دار ) پیچ درختان دودویی نخی درختان
نخی 1. گرهای اشاره از واقعی گرهای اشاره باید نخی های درخت در
منطقی فیلد دو گره هر به لذا باشند، می Rtagو Ltagمتمایز اضافه
اگر مقدار Rtagیا Ltagشود نخی Trueدارای گر اشاره آنگاه باشند
. باشد می عادی گر اشاره اینصورت غیر در و باشد می
گر 2. اشاره به Leftاگر اشاره جهت باشد، بالاستفاده که صورتی در
این از قبل آن میانودی پیمایش در که شود می استفاده عنصری
گر اشاره و دارد قرار استفاده rightعنصر بعدی عنصر به اشاره برای
. میشود
ها درخت
Ltag Left info Right Rtag
هشتم جلسه
) دار ) پیچ درختان دودویی نخی درختان
: میشود استفاده زیر قوانین از نخی اتصاالت ایجاد برای
گره ptr left_childاگر 1. به که دهیم می تغییر طوری را آن ، باشد تهی
پیمایش در که از inorderای .ptrقبل کند اشاره ، دارد قرار
به ptr right_childاگر 2. که دهیم می تغییر طوری را آن ، باشد تهی
پیمایش در که ای از inorderگره .ptrبعد کند اشاره ، دارد قرار
ها درخت
هشتم جلسه
) دار ) پیچ درختان دودویی نخی درختان
دودویی نخی درخت از ای نمونه
ها درخت
G
نخي اتصاالت
هشتم جلسه
) دار ) پیچ درختان دودویی نخی درختان
راست سمت گر اشاره زیر شکل سمتچپ Gدر گر اشاره هیچ Hو به
این نخی های درخت ارائه از هدف که حالی در کنند نمی اشاره جایی
ای گره منظوری این برای باشند، نداشته تهی گر اشاره هیچ که بود
گر Headبنام اشاره که گیریم می نظر و rootدر کند می اشاره آن به
Ltag گرهhead. کند می اشاره واقعی درخت اول گره شروع به
ها درخت
هشتم جلسه
) دار ) پیچ درختان دودویی نخی درختان
ها درخت
Head
هشتم جلسه
جنگل
.1 . است متمایز درخت چند یا صفر از مرتب ای مجموعه جنگل یک
از 2. ای مجموعه .N>=0جنگل است مجزا درخت
.3. آید می بوجود جنگل کنیم حذف را درخت یک ریشه اگر
ها درخت
جنگل
هشتم جلسه
دودویی درخت به جنگل تبدیل
.1 ( روش از استفاده با کنیم می تبدیل دودویی درخت به را درخت هر ابتدا
راست – ( برادر چپ فرزند
راست 2. فرزند از را راست سمت درخت هر ریشه راست به چپ از سپس
. گیرم می نظر درختسمتچپشدر
. کنید : تبدیل دودویی درخت به را زیر جنگل مثال
ها درخت
جنگل
هشتم جلسه
دودویی درخت به جنگل تبدیل
– ( روش از استفاده با کنیم می تبدیل دودویی درخت به را درخت هر ابتدا
راست – ( برادر چپ فرزند
ها درخت
هشتم جلسه
دودویی درخت به جنگل تبدیل
درخت – راست فرزند بعنوان را درخت هر ریشه راست به چپ از سپس
. گیریم می نظر در چپی سمت
ها درخت
A
EB
F G
I
H
C
D
هشتم جلسه
مشخص ساختار با درختان
o درختHEAP :: ) هرم )هرم ) مجرد داده (ADTنوع
مساوی max treeدرخت – یا بزرگتر آن گره هر کلید مقدار که است درختی
. فرزندانشباشد
مساوی min treeدرخت – یا کوچکتر آن گره هر کلید مقدار که است درختی
. فرزندانشباشد
یک max heapدرخت – که است کامل دودویی درخت .max treeیک باشد می نیز
که min heapدرخت – است کامل دودویی درخت .min treeیک باشد می نیز
ها درخت
هشتم جلسه
از • max heapمثال
ها درخت
14
712
10 8 6
2
47
10 8 6
9
36
5
10
8320
50
از • min heapمثال
هشتم جلسه
درخت در عنصر یک HEAPدرج
صورت طوری باید آن از عنصری حذف و درخت در عنصر یک کردن اضافه اعمال
( هرم بصورت درخت که خاصیت( Heapپذیرد و کامل دودوئی درخت را heapیعنی
. بماند باقی داراست
درخت یک اینکه فرض هم heapبا و است کامل چپ maxtreeهم از را گره هر ابتدا ،
برای سپس ، شود کامل درخت تا کنیم می درج درخت در سطح هر در راست به
شرط بزرگتر maxtreeبرقراری اجدادش از که جایی تا را شده درج گره درخت بودن
. کنیم می جابجا آنها با باشد
: ایجاد مراحل
کرده 1. ایجاد خالی گره یک ابتدا
است heapسپس 2. کامل دودوئی درخت چون کنیم، می بررسی را درخت بودن
کنیم . می پر و ساخته را آن راست به چپ از بنابراین
ها درخت
هشتم جلسه
: عدد درج درخت 27مثال نوع Heapبه maxtreeاز
ها درخت
هشتم جلسه
: درخت . maxheapمثال کنید رسم را رو روبه های ورودی از , 30, 44حاصل
50 ,22 ,60 ,55 ,77
ها درخت
هشتم جلسه
: درخت . maxheapمثال کنید رسم را رو روبه های ورودی از , 30, 44حاصل
50 ,22 ,60 ,55 ,77
ها درخت
هشتم جلسه
: درخت . maxheapمثال کنید رسم را رو روبه های ورودی از , 30, 44حاصل
50 ,22 ,60 ,55 ,77
ها درخت
7744
55
جابجائی 2
هشتم جلسه
درخت از HEAPحذفعنصری
ترین پائین در سپس و شود می حذف ریشه مقدار همواره حذف برای
سپس و دهیم می قرار ریشه بجای را برگ ترین راست سمت سطح،
. از که جایی تا را جدید ریشه کار این برای کنیم می تنظیم را درخت
کنیم . می جابجا آنها ترین بزرگ یا باشد تر کوچک خود فرزندان
ها درخت
هشتم جلسه
درخت های HEAPکاربرد
درخت اولویت Heapکاربرد صف در
اضافه اولویت صف به اختیاری اولویت با را عنصری توان می اولویت صف در
. پیاده برای شود می حذف اولویت باالترین دارای عنصر حذف موقع در ولی نمود
درخت و پیوندی لیست آرایه، از توان می اولویت صف نمود Heapسازی استفاده
عمل هم که سازد می فراهم را امکان این هرم بصورت اولویت صف نمایش ولی
امر همین که شود می انجام زمان بهترین در درج عمل هم و حذف
درخت .Heapارجحیت دهد می نشان پیوندی لیست آرایه، به نسبت
ها درخت
)(log2nO
هشتم جلسه
درخت های HEAPکاربرد
درخت مرتبسازی Heapکاربرد در
با ای آرایه کردن مرتب درخت nبرای یک ابتدا . heapعضو سازیم می آرایه عناصر از
. از ها داده صعودی کردن مرتب برای کنیم حذفمی مکرر طور به را آن سپسریشه
Min heap از ها داده نزولی مرتبسازی جهت . max heapو میشود استفاده
از استفاده با شود می انجام زمان با حذف و درج عمل اینکه به توجه با
حلقه درخت nیک وسیله به مرتبسازی الگوریتم ای زمان heapمرتبه با
. میشود انجام
ها درخت
)(log2nO
)log( 2nnO
هشتم جلسه
( دودویی جستجوی (Binary Search Tree - BSTدرختان
خصوصیات دارای که است درختی دودویی جستجوی درخت یک
باشد : زیر
، باشند یکسان کلید دارای نباید عنصر دو و است کلید یک دارای عنصر هر
. فرداند به منحصر کلیدها واقع در
در واقع کلید مقدار از کمتر باید چپ غیرتهی زیردرخت در واقع کلیدهای
. باشد راست زیردرخت ریشه
کلید مقدار از بزرگتر باید راست غیرتهی زیردرخت در واقع کلیدهای
. باشد زیردرختچپ ریشه در واقع
. باشند می دودویی جستجوی درختان خود نیز راست و چپ زیردرختان
ها درخت
30
405
2
میانوندی درخت LVRپیمایش این
را ها گره در موجود مقادیر
و صعودی شده مرتب بصورت
میانوندی را RVLپیمایش آن
به نزولی شده مرتب بصورت
. فرستند خروجیمی
هشتم جلسه
( دودویی درختجستجوی در عنصر یک (BSTجستجوی
کلید با عنصری دنبال باشیم خواسته کنید . keyفرض از ابتدا بگردیم
( جستجو( rootریشه درخت ، باشد تهی ریشه اگر ، کنیم می شروع
. صورت این غیر در بود خواهد ناموفق جستجو و بوده عنصری هر فاقد
key: کرده مقایسه ریشه کلید مقدار با با را
اگرkey زیردرخت در عنصری هیچ ، باشد ریشه کلید مقدار از کمتر
برابر کلیدی دارای که ندارد وجود زیردرخت keyراست بنابراین ، باشد
. کنیم می جستجو را ریشه چپ
اگرkey جستجو را راست زیردرخت ، باشد ریشه کلید مقدار از بزرگتر
. کنیم می
ها درخت
هشتم جلسه
درختجستجوی در عنصر یک جستجوی بازگشتی غیر الگوریتم
(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;
}
هشتم جلسه
جستجوی درخت در عنصر یک جستجوی بازگشتی الگوریتم
(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);
}
هشتم جلسه
جستجوی درخت در عنصر یک جستجوی های الگوریتم تحلیل
(BSTدودویی )
ها درخت
درخت در عنصر یک جستجو الگوریتم دو به توجه عمق BSTبا تا حداکثر که
با( hدرخت ) است برابر جستجو برای الزم زمان لذا یابد می O(h)ادامه
درخت در عنصر یک جستجوی اجرائی بهترین nبا BStمرتبه در گره
با است برابر حالت بدترین در و با برابراست .O(n)حالت
: درخت یک در کلیدی یافتن برای مقایسه تعداد حداکثر مثال
BST باn ؟ است مقداری چه با برابر گره
)(log2nO
درخت عمق اندازه به
هشتم جلسه
( دودویی درختجستجوی در عنصر (BSTدرج
ها درخت
نام – به جدیدی عنصر درج با keyبرای کلید آیا که مشخصنمود باید ابتدا ،
. را درخت باید کار این انجام برای خیر یا است متفاوت موجود عناصر
کرد که O(h)جستجو محلی در را عنصر ، باشد ناموفق اگرجستجو ،
کنیم می درج ، است نموده پیدا خاتمه .O(1)جستجو
در – درج و جستجو های الگوریتم اجرائی زمان BSTمرتبه با دو O(h)هر
. میشود انجام
هشتم جلسه
( دودویی درختجستجوی در عنصر (BSTدرج
ها درخت
30
405
2
30
405
2 81
81درج
30
405
2 36 81
36درج
هشتم جلسه
( دودویی درختجستجوی در عنصر درج تابع (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;}
هشتم جلسه
دودویی : )2مثال درختجستجوی در عنصر (BSTدرج
ها درخت
عدد – فرضکنید زیر درخت عدد 37در جایگزین درخت 25را آنگاه شود
یک همچنان عدد BSTمزبور اگر ولی ماند خواهد جایگزین 42باقی را
دیگر 25 . BSTکنیم عدد کنید فرض حال بود درج 22نخواهد درخت را
. بود خواهد الزم عملیاتی چه کنیم40
5816
10 47 84
72
25
20
هشتم جلسه
عنصر : 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
هشتم جلسه
( دودویی درختجستجوی در یک از (BSTحذفعنصری
ها درخت
–: دهد می رخ ممکن حالت سه گره آن جستجوی پساز گره حذفیک برای
–. نیست درخت تنظیم به نیازی و راحتیحذفشده به باشد برگ نظر مورد گره اگر
–. میشود پدر گره جانشین فرزند باشد، فرزند یک دااری تنها نظر مورد گره اگر
میانوندی – پیمایش باشد فرزند دو دارای نظر مورد گره می LVRاگر را درخت
گیرد می قرار نظر مورد گره از بعد میانوندی پیمایش در که ای گره نویسیم
. انتخابمیشود جانشین بعنوان
گره BSTاز 49حذف
هشتم ها جلسه درخت
گره BSTاز 80حذف
گره BSTاز 30حذف
گره – 2دارای 30چون
بنابراین است فرزند
میانودی پیمایش طبق
که ای گره بایست می
گره از قرار 30بعد
پدر گره بعنوان دارد
. شود داده قرار
–20 ,30 ,38 ,55 ,56 ,71
دودویی جستجوی درخت در یک از عنصری حذف
(BST)
زمان • در حذف گیرد ) O(h)عمل می (hانجام درخت عمق
هشتم جلسه
تمرین
آورید- 1 بدست را زیر عمومی درخت .نمایشدودویی
ها درخت
A
DB
K
F
C
E
G H J
L
NM
هشتم جلسه
کنید 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
ها درخت
Any Question
????