درخت Heap - Ilbeygi Bros

Download Report

Transcript درخت Heap - Ilbeygi Bros

‫مهدی ایل بیگی‬
‫دانشگاه آزاد اسالمی دماوند‬
‫پاییز ‪89‬‬
‫• درخت جستجويي دودويي = )‪Binary Search Tree (BST‬‬
‫• س اااختداد داد اگ دبر ااگ دا اگاگ عر ا ا ارگ سجدوه ااي ت اااگ و اس اات ااي هد ااا‬
‫اعجام سي دت ‪:‬‬
‫‪Maximum, Predecessor,‬‬
‫•‬
‫‪Successor, Insert, and Delete.‬‬
‫‪Minimum,‬‬
‫ااگ را‬
‫‪Search,‬‬
‫• دگاگ ساختد ‪ Dictionary‬و ‪ Priority Queue‬سي تواد ا آد استفاد گد‪.‬‬
‫• ساد اعجام هد ا اول ي‪ ،‬ستناسب دا هدق(ارتفاع) درخت است‪O(h).‬‬
‫‪2‬‬
‫• بک درخت جستجوگ بک درخات دودوياي اسات اي سدسا اسات تدا دا ا ‪ .‬اگاگ درخات‬
‫تد عبا خصوص ا گ را دگآورد سي ن ‪:‬‬
‫• تگ هنصگ داراگ بک ک ا اسات و دو هنصاگ عبابا داراگ ک ا بسسااد دا ان ‪ ،‬در واقا‬
‫ک تا سنحصگ دي فگدع ‪.‬‬
‫• ک ا ا تاگ واق ا ا در گدرخا اات ر اتد ا ا ي ا ا داب ا ا‬
‫گدرخت راست دا ‪.‬‬
‫دتا ااا ا س ا ا ار ک ا ا واق ا ا در ري ا ااي‬
‫• ک ا تاگ واق ا در گدرخ اات ر اتد ا راس اات داب ا ددرگت ااا ا س ا ار ک ا واق ا در ري ااي‬
‫گدرخت ي دا ‪.‬‬
‫•‬
‫‪3‬‬
‫گدرختاد ي و راست ع ز خود درختاد جستجوگ دودويي سي دا ن ‪.‬‬
‫• سثالی دگای درخت دودویی‪:‬‬
‫‪56‬‬
‫‪200‬‬
‫‪213‬‬
‫‪26‬‬
‫‪190‬‬
‫‪28‬‬
‫‪18‬‬
‫‪27‬‬
‫‪24‬‬
‫‪12‬‬
‫• عست ااي‪ :‬د ااا شد ااا ‪ Inorder‬درخ اات جس ااتجوی دودوی اای س اای ت ااواد هناص ااگ سوج ااود در‬
‫درخت را دگحسب س ادیگ ک ش ‪ ،‬دصور صعودی سگتب گد‪.‬‬
‫• سثال‪ :‬شدا سشاعوع ی درخت فوق دصور یگ است‪:‬‬
‫‪12, 18, 24, 26, 27, 28, 56, 190, 200, 213‬‬
‫‪4‬‬
‫• فگض ن خواستي دا م دعبال هنصگگ دا ک ‪ key‬دراگدبم‪ .‬ادتا ا ا ري اي (‪)root‬‬
‫گوع سي ن م‪ ،‬اگگ ري ي تد دا ‪ ،‬درخت جساتجو فاقا تاگ هنصاگگ داود و جساتجو‬
‫عاسوفق خوات دود‪.‬‬
‫• در ر ا اب صور ‪ key‬را دا س ار ک‬
‫ري ي س ايسي گد ‪:‬‬
‫– اگااگ ‪ key‬دتااا ا س ا ار ک ا ري ااي دا ا ‪ ،‬ت ا ت هنصااگگ در گدرخاات راساات وجااود‬
‫ع ا ارد ااي داراگ ک ا گ دگادااگ ‪ key‬دا ا ‪ ،‬دنااادگاب گدرخاات ي ا ري ااي را جس ااتجو‬
‫سي ن م‪.‬‬
‫– اگگ ‪ key‬ددرگتا ا س ار ک‬
‫‪5‬‬
‫ري ي دا‬
‫‪ ،‬گدرخت راست را جستجو سي ن م‪.‬‬
BSTNode * BST_Search(BSTNode *T, int x)
{
if (T == NULL || x == T -> key)
return T;
if (x < T -> key)
return BST_Search(T -> left, x)
else
return BST_Search(T -> right, x)
}
6
BSTNode* Iterative_BST_Search(BSTNode *T, int x)
{
while (T != NULL && x != T -> key)
{
If (x < T -> key)
T = T -> left;
else
T = T -> right;
}
return T;
}
7
‫ااگدد گااگ‬
‫• ک ااي هد ااا سجدوهااي تاااگ و ااا ساعن ا جسااتجو‪ ،‬در ‪ ،‬ح ا ‪ ،‬س ا‬
‫بعا ی یااا قب اای و یااافتد سشاااشدم و سااا دیدم هناصااگ را سااي تااواد دااا تد نااي اگ ستناسااب دااا‬
‫هدق درخت اعجام داد‪O(h) :‬‬
‫• اگااگ درخاات ستااوا د دا ا (هدااق درخت ااي تاااگ ساادت ي ا و راساات عددبااک تاام دا ا )‪:‬‬
‫)‪h = θ(log n‬‬
‫• در دا تگ حالاات درخاات دودويااي دااي صااور‬
‫)‪h = θ(n‬‬
‫‪8‬‬
‫عج ااا اگ ا گااگ تااا در سااي آبا ‪ ،‬در ع شجااي‪:‬‬
: ‫ تضد د سي ن‬BST ‫• ساختار‬
.‫ در سدت ي تگ گگ قگار سي گ اد‬MIN •
.‫ در سدت راست تگ گگ قگار سي گ اد‬MAX •
: ‫ را ناسایی سی عداین‬BST ‫ یک‬Max ‫ و‬Min ‫• تواب یگ هنصگ‬
int Tree_Minimum(BSTNode *x)
{ while(x -> left != NULL)
x = x -> left;
return x -> key;
}
int Tree_Maximum(BSTNode *x)
{ while(x -> right != NULL)
x = x -> right;
return x -> key;
}
9
‫ در واقا دایا هنصاگ بعا ی هنصاگ ساورد‬BST ‫• دگای یافتد هنصگ بعا ی یاک هنصاگ در‬
.‫ د ست آوریم‬Inorder ‫عظگ را در شدا‬
‫• قطعي‬
. ‫یگ ای هدل را اعجام سی دت‬
int Tree_Successor(BSTNode *x) {
If(x -> right != NULL)
return Tree_Minimum(x -> right);
y = parent(x);
while(y != NULL && x == y -> right)
{ x = y;
y = parent(y); }
return y;
}
Successor (28)
56
y
26
200
x
28
18
12
24
190
213
27
10
‫‪void Insert_Node(BSTNode *root,‬‬
‫• د ا اگاگ در هنصا ااگ ج ب ا ا گ دا ااي عا ااام ‪ ،z‬ادت ا ا ا‬
‫عدود ي آبا ک ای هنصگ دا )‪BSTNode *z‬‬
‫داب س‬
‫{‬
‫ک ش ا هناص ااگ سوج ااود ستفاااو اس اات ب ااا خ ااا‪.‬‬
‫;‪BSTNode *y = NULL‬‬
‫د اگاگ اعج ااام اب ا ک ااار داب ا درخ اات را جس ااتجو‬
‫;‪BSTNode *x = root‬‬
‫)‪while(x != NULL‬‬
‫ااگد‪ ،‬اگگجس ااتجو ع اااسوفق د ااود‪ ،‬هنص ااگ را در‬
‫{‬
‫سح ااک ااي جسااتجو خاتدااي ا ا عدااود اساات‪،‬‬
‫;‪y = x‬‬
‫در سي ن م‪.‬‬
‫)‪if(z -> key < x -> key‬‬
‫;‪x = x -> left‬‬
‫• ساااد م م داگاگ جسااتجوگ یااک هنصااگ در بااک‬
‫‪else‬‬
‫;‪x = x -> right‬‬
‫درخاات دگادااگ )‪ O(h‬سااي دا ا دااي عحااوگ ااي‬
‫}‬
‫‪ h‬دگادااگ دااا هدااق بااا ارتفاااع درخاات اساات‪ .‬د ااي‬
‫الگ ااور تم ع ااا د ااي س اااد )‪ θ(1‬دارد‪ .‬دن ااادگاب‬
‫ساااد کاال سااورد ع ااا ‪ insert_node‬دگادااگ‬
‫دا )‪ θ(h‬سي دا ‪.‬‬
‫‪11‬‬
‫)‪if (y == NULL‬‬
‫;‪root = z‬‬
‫‪else‬‬
‫)‪if(z -> key < y -> key‬‬
‫;‪y -> left = z‬‬
‫‪else‬‬
‫;‪y -> right = z‬‬
‫}‬
56
26
28
18
12
200
24
190
213
56
26
27
28
18
12
200
24
27
190
213
50
12
‫• دگای ح‬
‫یک گگ ا ‪ BST‬سي حالت رخ سی دت ‪:‬‬
‫سی عدایشم‪.‬‬
‫‪ .1‬اگگ گگ ای ي دای ح‬
‫ود فگ ع ی ع ا ت‪ ،‬آد گگ را ح‬
‫‪ .2‬اگااگ گااگ ای ااي دایا حا‬
‫گگ را ح سی عدایشم‪.‬‬
‫ااود یااک فگ عا دا اات‪ ،‬ا ر آد گااگ را دااي فگ عا‬
‫‪ .3‬اگگ گگ ای اي دایا حا‬
‫دنویسشم‪ .‬دگای ای سنظور‪:‬‬
‫اود دو فگ عا دا ات‪ ،‬دایا گاگ ای بعا ی یاا قب ای ایا گاگ را دجاای آد‬
‫ا ااار ساای دتااشم و‬
‫– دگای یافتد گگ بع ی یک گگ دو فگ ع ی‪ ،‬ا سکاد ای گگ یک گام داي راسات سای رویام و ساقد آع ا ر داي يا سای‬
‫رویم تا دي ‪ NULL‬دگسشم‪ ،‬حال آخگی گگ را دجای گگ سح و سی عویسم‪.‬‬
‫– دگای یافتد گگ قب ی یک گگ دو فگ ع ی‪ ،‬ساعن قبل هدل سی نشم ف ا ادتا ا یاک گاام داي يا سای رویام و ساقد‬
‫تا رسش د دي ‪ NULL‬دي راست خواتشم رفت‪.‬‬
‫• هدل ح‬
‫‪13‬‬
‫در ساد )‪ O(h‬اعجام سي گ اد‪ ،‬دي عحوگ ي ‪ h‬هدق درخت سي دا‬
‫‪.‬‬
BST_Delete(BST_Node *r, int x)
{
if(r == null){ cout <<“Tree is Empty”; return; }
if(x < r -> key) BST_Delete(r -> left, x);
if(x > r -> key) BST_Delete(r -> right, x);
if(x == r -> key){
BSTNode *temp = r;
if(r -> left == null) {
r = r -> right;
delete(temp); }
else if(r -> right == null) {
r = r -> left;
delete(temp); }
else
r -> key = BST_DeleteMin(r -> right);
}
14
int BST_DeleteMin(r)
{
if(r == null){ cout << “Tree is Empty”; return -1; }
if(r -> left == null)
{
int x = r -> key;
BSTNode *t = r;
r = r -> right;
delete(t);
return x;
}
else
return BST_DeleteMin(r -> left);
}
15
‫• در ای ا ااگوخ ساای خااواتشم دااا اسااتفاد ا ساااختداد داد ‪ BST‬یااک دیس ااجای ایجاااد‬
‫عد ااایشم‪ .‬در واق ا در ای ا ‪ BST‬ک ش ا ت ااگ گ ااگ ی ااک ک د ااي س اای دا ا ع ااي ی ااک ه ا د‪ ،‬ااد‬
‫‪ BST‬دااگ اساااا س ا سااي ر ااتي تااا بعنااواد ک شا ‪ ،‬ااکل ساای گ اااد‪ .‬ای ا دیس ااجای دایا‬
‫ویژگی تای یگ را دارا دا ‪:‬‬
‫– قاد شت در ‪ ،‬ح‬
‫و جستجوی ک دا ‪.‬‬
‫– قاد شت دگگگداع د ک دي بع ی یا قب ی یک ک دي در دیس جای‪.‬‬
‫– قاد شت ياپ تداسی ک دا سوجود در دیس جای دصور سگتب‬
‫• عستي‪ :‬دیس جای دای ک دا فارس ی را عر اری عدای ‪.‬‬
‫‪16‬‬
‫ی صعودی‪.‬‬
‫• ‪ :max tree‬درخت است ي س ار ک‬
‫تگ گگ آد دتا ا س ادبگ ک تاگ فگ ع ان‬
‫• ‪ :max heap‬بک درخت دودويي کامل است ي بک ‪ max tree‬ع ز سي دا‬
‫• ‪ :min tree‬درخت است ي س ار ک‬
‫‪.‬‬
‫تگ گگ آد دي تا ا س ادبگ ک تاگ فگ ع ان‬
‫• ‪ :min heap‬بک درخت دودويي کامل است ي در واق بک ‪ min tree‬سي دا‬
‫عبا‬
‫‪.‬‬
‫عبا‬
‫‪.‬‬
‫‪.‬‬
‫• د ا لشل اینسااي درخ اات ‪ Heap‬یااک درخاات دودوی اای کاساال اس اات‪ ،‬ساای تااواد آد را د ااا اسااتفاد ا آرای ااي‪،‬‬
‫دصور بهشني عدا داد‪.‬‬
‫• رالبا درخت تای ‪ Heap‬دگاگ اد سا گ صف تای اولو ت اساتفاد ساي اوع ‪ .‬در صاف اولو ات‬
‫هنصگگ ي داراگ دامتگ (با اب د تگ ) اولو ت تست‪ ،‬ح سي ود‪.‬‬
‫‪17‬‬
‫• سثال دگای ‪:Min Heap‬‬
‫‪2‬‬
‫‪4‬‬
‫‪7‬‬
‫‪6‬‬
‫• سثال دگای ‪:Max Heap‬‬
‫‪8‬‬
‫‪14‬‬
‫‪7‬‬
‫‪12‬‬
‫‪6‬‬
‫‪18‬‬
‫‪10‬‬
‫‪8‬‬
‫‪10‬‬
‫• د اگای در ااگدد ی ااک گ ااگ ج ی ا د ااي درخ اات ‪ ،Heap‬آد گ ااگ را در اول ا د سوقعش اات خ ااالی در درخ اات‬
‫دودویی کاسل در سی نشم‪.‬‬
‫• اضااافي ااگدد گااگ ج با در تااگ سوقع اات دبرااگگ‪ ،‬عگ ااف ‪ Heap‬را ع اام سااي نا‬
‫درخت دودويي کاسل عخوات دود‪.‬‬
‫اگا ع جااي بااک‬
‫• د ا اضاافي اگدد گاگ در ایا سوقعشات‪ ،‬اگ درخات ‪ Max Heap‬یاا ‪ Min Heap‬را داگای‬
‫دگرس ی سی نشم‪:‬‬
‫گگ اضافي‬
‫• اگگ درخت ‪ Min Heap‬دا ‪ ،‬دای تگ گگ ا فگ ع ان کويستا یا سساوی دا ‪ ،‬دي تد د دلشال‬
‫گ ااگ ج ی ا را د ااا ا ر س ا س ااي س اای ن ااشم‪ ،‬اگ ااگ ک ااويستا ا آد د ااود ج ااای ای ا گ ااگ و ا ر را د ااا ت اام‬
‫ع ااویم س اای ن ااشم‪ .‬ای ا هد ش ااا را ت ااا ج ااایی ااي گ ااگ در ا ا ا ر ک ااويستا عبا ا ‪ ،‬اداس ااي س ای‬
‫دتشم‪.‬‬
‫• اگگ درخت ‪ Max Heap‬دا ‪ ،‬دای تگ گگ ا فگ ع ان ددرگتا یا سساوی دا ‪ ،‬داي تدا د دلشال‬
‫گ ااگ ج ی ا را د ااا ا ر س ا س ااي س اای ن ااشم‪ ،‬اگ ااگ ددرگت ااا ا آد د ااود ج ااای ای ا گ ااگ و ا ر را د ااا ت اام‬
‫ا ر ددرگتا عبا ‪ ،‬اداسي سی دتشم‪.‬‬
‫عویم سی نشم‪ .‬ای هد شا را تا جایی ي گگ در‬
‫‪19‬‬
‫• گ ااگ ‪ 16‬را د ااي ‪ Max Heap‬ی ااگ اض ااافي عدایش ا ‪ :‬د اگای ای ا سنظ ااور ادت ا ا گ ااگ ‪ 16‬را در اول ا د‬
‫سوقعشت در درخت دودویی کاسل قگار سی دتشم‪.‬‬
‫‪15‬‬
‫‪10‬‬
‫‪3‬‬
‫‪14‬‬
‫‪9‬‬
‫‪8‬‬
‫‪7‬‬
‫‪16‬‬
‫‪2‬‬
‫‪4‬‬
‫• در اداسي دای دا جادجایی گگ تا گ ‪ Max Heap‬را رهایت نشم‪:‬‬
‫‪16‬‬
‫‪10‬‬
‫‪3‬‬
‫‪20‬‬
‫‪15‬‬
‫‪9‬‬
‫‪8‬‬
‫‪14‬‬
‫‪7‬‬
‫‪4‬‬
‫‪2‬‬
Void insert_max_heap (int[] heap, int item, int n)
{
// insert item into a max heap of current size n
int i;
if (length(heap) == n) {
cout << “ The heap is full . \n” ;
return;
}
i = ++n;
while ( (i != 1) && (item > heap[i/2]) ) {
heap[i] = heap[i/2];
i /= 2;
}
heap [i] = item;
}
21
‫• در حا یااک گااگ ا ‪ Heap‬تدی ااي گااگ ری ااي حا ساای ااود (دااي خگو اای اعت ااال ساای یادا )‪ ،‬سااقد‬
‫آخااگی گااگ درخاات (ساادت راساات تااگی گااگ در سااط آخااگ) دجااای گااگ ری ااي عو ااتي ساای ااود (تااا کاساال‬
‫دودد درخت ‪ Heap‬حفظ ود)‪ .‬در اداسي‪:‬‬
‫• اگاگ درخات ‪ Min Heap‬دا ا ‪ ،‬دایا تاگ گاگ ا فگ عا ان کاويستا یاا سسااوی دا ا ‪ ،‬داي تدا د دلشال‬
‫گ ااگ ج یا ا را د ااا فگ عا ا ان س ا س ااي س اای ن ااشم‪ ،‬و ت ااا س ااانی ااي س ا ا ار ایا ا گ ااگ ددرگت ااا ا ت ااگ ی ااک ا‬
‫فگ ع ان دود‪ ،‬دا کويستای فگ ع جادجا سی ود‪.‬‬
‫• اگاگ درخات ‪ Max Heap‬دا ا ‪ ،‬دایا تاگ گاگ ا فگ عا ان ددرگتاا یاا سسااوی دا ا ‪ ،‬داي تدا د دلشال‬
‫گ ااگ ج یا ا را د ااا فگ عا ا ان س ا س ااي س اای ن ااشم‪ ،‬و ت ااا س ااانی ااي س ا ا ار ایا ا گ ااگ ک ااويستا ا ت ااگ ی ااک ا‬
‫فگ ع ان دود‪ ،‬دا ددرگتای فگ ع جادجا سی ود‪.‬‬
‫• عستااي‪ :‬د ا لشل اینسااي هدااق درخ اات ‪ Heap‬دگادااگ دااا ‪ [log n]+1‬اساات‪ ،‬و د اگای دگق اگای اگای در‬
‫درخ اات ‪ Heap‬نهایت ااا د ااي اع ا ا ارتف اااع درخ اات‪ ،‬جادج ااایی خ ااواتشم دا اات‪ ،‬درع شج ااي ش ش ا گی س اانی‬
‫الگوریتم در و ح یک هنصگ در‪/‬ا ‪ Heap‬دگادگ دا )‪ O(log n‬خوات دود‪.‬‬
‫‪22‬‬
‫• یک ح‬
‫ا درخت ‪ Max Heap‬ي در یگ عدا‬
‫اعجام دتش ‪.‬‬
‫داد‬
‫‪16‬‬
‫‪10‬‬
‫‪3‬‬
‫‪14‬‬
‫‪9‬‬
‫‪8‬‬
‫‪7‬‬
‫‪1‬‬
‫• ادت ا گگ ری ي درخت ح‬
‫‪ Heap‬را دگقگار سی نشم‪.‬‬
‫‪2‬‬
‫‪4‬‬
‫سای اود و گاگ اعیهاایی دجاای آد عو اتي سای اود و ساقد اگ‬
‫‪14‬‬
‫‪10‬‬
‫‪3‬‬
‫‪23‬‬
‫‪Max‬‬
‫‪8‬‬
‫‪9‬‬
‫‪4‬‬
‫‪7‬‬
‫‪1‬‬
‫‪2‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪24‬‬
‫فااگض ن ا داراگ ‪ k‬سجدوهااي و ر ااتي سگتااب ا اگ ا هناصااگ تس ا م ااي داب ا در بااک ر ااتي واح ا‬
‫ا دااي عااام‬
‫ادرااام ااوع ‪ .‬تااگ دعبالااي بااا تگتيااب اااسل ع ا ادگ رکااورد دااي تگتيااب ر اعدو لااک و ف ا س‬
‫‪ key‬سي دا ‪.‬‬
‫– بک دعبالي سگتب ‪ Run‬عاس سي ود‪.‬‬
‫– فگض ن ي ‪ n‬ع اد رکوردتا در ‪ Run ،k‬دا ‪ ،‬هدل ادرام سي تواعا داا اعتخااک رکاورد داا‬
‫کويستاب ک ‪ ،‬دصور تسگاری اعجام ود‪.‬‬
‫کويستاب ک داب ا د د ‪ k‬هنصگ اول (کويستا) سوجود در ‪Run‬تا ا ود‪.‬‬
‫یااک رو سعدااولی‪ ،‬د اگاگ ادرااام ‪ ،k-runs‬ع ا سن ا ‪ k-1‬س ايسااي د اگاگ ع ا د و اعت ااال تااگ هنصااگ دااي‬
‫خگو ااک سااي دا ا ‪ ،‬و يااود ‪ n‬هنصااگ داریاام ااد دااا ایا رو داگای ادرااام ‪ k‬لیساات سگتااب‪ ،‬سگتبااي سااانی‬
‫دگادگ )‪ O(nk‬خوات دود‪.‬‬
‫دااي ا اگ ‪ ،k>2‬سااي تااواع م دااا اسااتفاد ا اب ا درخاات اعتخاااهي‪ ،‬ع ا اد س ايسااي تاااگ م م ج اات ع ا د‬
‫کويستاب هنصگ را کات دت م‪.‬‬
‫درختتا انابتتا ي‪ :‬بااک درخاات دودويتتي کامتتل اساات ااي تااگ گااگ آد کويستاسساااوی دااا دو فگ ع ا خااود سااي‬
‫دا ‪ .‬دنادگاب گگ ري ي ن اد دتن کويستاب گگ در درخت سي دا ‪.‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫داگای ادراام ‪ k-run‬دااا اسااتفاد ا درخاات اعتخاااهی‪ ،‬ادتا ا هناصااگ اول تااگ ‪( run‬کااويستای هناصااگ) را‬
‫دي هنواد دگگ تای درخت اعتخاهی در عظگ سی گ ایم‪.‬‬
‫سقد ا ي دي راست تگ دو گگ را دا تم س ا سي گد و گاگ کاويستا را داي هناواد ا ر آد دو در عظاگ‬
‫ساای گ ااایم‪ ،‬و ای ا هد اال را تااا ری ااي درخ اات (رسااش د د ااي یااک گ ااگ ) اداس ااي ساای دت ااشم‪ .‬د ا ی ااکل درخ اات‬
‫اعتخاهی کل سی گ اد‪.‬‬
‫ااگد و دااي خگو اای اعت ااال ساای دتااشم و هنصااگ بع ا ی ا آد ‪ run‬را ااي ری ااي‬
‫در اداسااي ری ااي را ح ا‬
‫قگار سی دتشم‪.‬‬
‫هضو آد دود در دگگی ي ری ي ا آد اعتخاک‬
‫سااقد دااا س ا سااي گااگ ج یا اضااافي ا در سااط آخااگ دااا تداداد ‪ ،‬گااگ ای را ااي کااويستا دا ا دااي‬
‫هنااواد ا ر دو گااگ قاگار ساای دتااشم و ایا کااار را تااا رسااش د دااي ری ااي تساگار ساای نااشم‪ .‬دااي ایا هداال تج یا‬
‫ساختار درخت سی گوین ‪.‬‬
‫• داا توجاي داي اینساي هداق یاک درخات اعتخااهی (دودویای کاسال) دگاداگ داا ‪ [log n] + 1‬اسات‪ ،‬و تد نا د‬
‫د اگای تج ی ا ساااختار درخاات دای ا دااي اع ا ا هدااق درخاات س ا سااي اعجااام دتااشم‪ ،‬ااد د اگای ش ا ا ااگدد‬
‫هنصااگ سشاااشدم ( ااي در ری ااي درخاات اساات) عشااا دااي ‪ log k‬س ا سااي داریاام و يااود ایا هداال دااي عا اد‬
‫هناص ا ااگ در ‪run‬ت ا ااا دایا ا ا تس ا اگار ا ااود‪ ،‬در ع شج ا ااي سگتب ا ااي س ا ااانی دا ا اگای ادر ا ااام ‪ k-run‬د ا ااا ‪ n‬هنص ا ااگ‪،‬‬
‫)‪ O(n*log k‬خوات دود‪.‬‬
‫‪25‬‬
‫•‬
‫در ایا سثااال ادتا ا دااا هناصااگ اول تااگ ‪ run‬درخاات را درساات ساای نااشم‪ .‬سااقد ری ااي درخاات را دااي لیساات ادرااام اضااافي ساای‬
‫نشم و هنصگ بع ی ‪ run4‬ي ری ي هضو آد دود ( عنی ‪ )15‬را دجای ‪ 6‬در دگگ قگار سی دتشم و دا سي س ا سي درخت‬
‫را سا ساد دهی سج د سی نشم (گگ ‪ 8‬دي ری ي سنت ل سی ود) و تد د روال را تا آخگی هنصگ اداسي سی دتشم‪.‬‬
‫‪6‬‬
‫‪6‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪8‬‬
‫‪9‬‬
‫‪6‬‬
‫‪17‬‬
‫‪90‬‬
‫‪9‬‬
‫‪8‬‬
‫‪6‬‬
‫‪17‬‬
‫‪90‬‬
‫‪9‬‬
‫‪8‬‬
‫‪6‬‬
‫‪20‬‬
‫‪18‬‬
‫‪100‬‬
‫‪11‬‬
‫‪15‬‬
‫‪15‬‬
‫‪20‬‬
‫‪20‬‬
‫‪20‬‬
‫‪110‬‬
‫‪16‬‬
‫‪50‬‬
‫‪25‬‬
‫‪30‬‬
‫‪38‬‬
‫‪16‬‬
‫‪run 8‬‬
‫‪run 7‬‬
‫‪run 6‬‬
‫‪run 5‬‬
‫‪run 4‬‬
‫‪run 3‬‬
‫‪run 2‬‬
‫‪run1‬‬
‫‪20‬‬
‫‪9‬‬
‫‪10‬‬
‫‪9‬‬
‫‪10‬‬
‫‪15‬‬
‫• جنگاال سجدوهااي ‪ n ≥ 0‬درخاات سجادا سااي دا ا ‪( .‬دااي هنااواد سثااال اگااگ ري ااي درخاات را حا‬
‫آعگا داراگ بک جنگل خوات م دود)‪ .‬سثال‪:‬‬
‫‪G‬‬
‫‪I‬‬
‫‪E‬‬
‫‪H‬‬
‫‪F‬‬
‫نا م‪،‬‬
‫‪A‬‬
‫‪D‬‬
‫‪C‬‬
‫‪B‬‬
‫• تااگ جنگاال ا عا ادی درخاات هدااوسی ااسشل ا ‪ .‬داگای تبا یل جنگاال دااي درخاات دودویاای سعااادل دااا آد‪،‬‬
‫ادت ا دا الگوریتم یگ تگ درخت هدوسی ا جنگل را دي درخت دودویی تب یل سی عدایشم‪:‬‬
‫– تدي گگ تای تدداد (دارای یک ر) را دصور اف ی دي یس یرگ ستصل سی نشم‪.‬‬
‫– دجد اتصال سدت ي تگی فگ ع دي ر‪ ،‬د شي اتصام فگ ع اد دي ر را ح سی نشم‪.‬‬
‫– گگ تای ستصل دي تم دصور اف ی یا هدودی را ∘‪ 45‬در ج ت ه گبي تای ساهت سی يگخاعشم‪.‬‬
‫• سقد ا ي دي راست ری ي تگ درخت را دي هنواد فگ ع راست درخت سدت يپی در عظگ سی گ ایم‪.‬‬
‫‪27‬‬
: ‫ جنگل یگ را دي درخت دودویی تب یل عدایش‬:‫• سثال‬
E
A
B
C
G
I
H
F
D
F
B
B
I
H
F
D
G
A
H
E
B
I
C
C
G
E
A
E
A
C
G
F
D
D
H
I
28
‫• داگای شدااا درختاااد هدااوسی و جنگاال تااا دااا الگااوریتم ااگد داد‬
‫هدوسی یا جنگل را دي درخت دودویی سعادل تب یل سی عدایشم‪.‬‬
‫• اگگ درخت هدوسی عدا دتن یک هبار سحاسبا ی دا آعگا ‪:‬‬
‫– شد ااا ‪ inorder‬درخ اات دودوی اای سع ااادل د ااا درخ اات هد ااوسی‪ ،‬دگاد ااگ عد ااا ‪postfix‬‬
‫هبار سحاسبا ی سی دا ‪.‬‬
‫– شدااا ‪ preorder‬درخاات دودویاای سعااادل دااا درخاات هدااوسی‪ ،‬سعااادل ‪ prefix‬هبااار‬
‫سحاسبا ی را سی دت ‪.‬‬
‫ا یا‬
‫– شدااا ‪ postorder‬درخاات دودویاای سعااادل دااا درخاات هدااوسی‪ ،‬شدااا س‬
‫هبار سحاسبا ی را د ست عمی دت ‪.‬‬
‫ا در اسا ی ‪ ،28‬درخاات‬
‫• عستااي‪ :‬شدااا ‪ preorder, inorder, postorder‬درخاات دودویاای ستنااا گ دااا یااک‬
‫جنگال‪ ،‬سعاادل داا شداا ‪ preorder, inorder, postorder‬تدااد جنگال خواتا‬
‫دود‪.‬‬
‫‪29‬‬