درخت 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