ساختمان داده ها
faradars.org/fvds9402
:مدرسفرشید شیرافکن
دانشگاه تهران دانشجوی دکتری (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )
(قسمت اول)فصل ششم
درخت
1
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
دسته بندی ساختمان داده ها
2
پیوندیلیست-پشته-صف-آرایه:خطی-1
گراف-درخت:خطیغیر-2
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تعاریف اولیه
3
یمتقسمجزامجموعهبهگرههابقیهواستریشهنامبهخاصیگرهدارایکهباشدمیگرهچندیایكازمحدودیمجموعهدرخت.باشندمیدرختیكنیزخودمجموعههاازیكهرکهمیشوند
.گرهایکهدارایپدرنیستریشه
(رگرهبادرجهصف)گرهبدونفرزندبرگ
گرهغیربرگوریشهگره داخلی
گرههاییبایكپدربرادر
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ارتفاع درخت و ارتفاع گره
4
رگبازآنگرهبهطولبزرگترینمسیرگرهارتفاع
ارتفاعریشهارتفاع درخت
فرادرسآنگرهبهطولمسیریازریشهگره (سطح)عمق
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
.درخت حلقه ندارد
.شکلزیردرختنیست
5
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
درخت دودویی
.باشد(فرزندچپوراست)دارایدوفرزندحداکثرمرتبیکههرعنصرآندرخت:درختدودویی•
درختمرتب• .کهترتیبفرزندانهرگرهمشخصاستدرختی:
6
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
درخت دودویی پر
.استفرزنددودارایبرگهاازغیربهگرههرآندرکهدرختی:پردودوییدرخت
:4گرهوارتفاع31یكدرختدودوییپربا:مثال
n:گرهتعداد2h:برگهاتعداد = 2h+1 – floor:داخلیگرههایتعداد1 (n/2)
7
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
درخت دودویی کامل
.ندمیگیرقراردرختچپدراستممکنکهجاییتاگرههاهمۀوشدهاست،پرکاملبهطور،سطحآخریناحتماالًجزبهسطح،هر
8
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
هاتعداد برگ
:تاییkتعدادبرگهادریكدرخت
:تایی3درخت:تایی2درخت
9
1...)2()1( 210 nnknkn kk
120 nn
3,2 02 nn11,8,1 023 nnn
12 230 nnn فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
شماره گذاری
:استبرقرارزیرقواعدiاندیسباگرههربرایشده،گذاریشمارهکاملدودوییدرختهردر.استریشهآنگاهباشد،i=1اگر(1
>iاگر(2 .استi/2پایینحددر،آنوالدآنگاهباشد،1<
.است2iدرآن،چپفرزندآنگاهباشد،2i<=nاگر(3
.است2i+1درآن،راستفرزندآنگاهباشد،2i+1<=nاگر(4
10
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پیاده سازی درخت دودویی
.یالیستپیوندینمایشدادیكدرخترامیتوانبهکمكآرایه
آرایهپیاده سازی با .امدرآرایهذخیرهمیشودiدرخانهشده،امباتوجهبهدرختدودوییکاملشمارهگذاریiگره
11
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
:پیادهسازیدرختاریبباآرایه
12
3115731
5040302010
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پیوندیپیاده سازی با لیست
.باشدمی"راستفرزندبهگراشارهوچپفرزندبهگراشارهداده،"قسمتسهشاملدودوییدرختدرگرههر
:cزباندردودوییدرختگرهیكتعریف
struct node{
int data;
struct node* left;
struct node* right;
};
13
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
14
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پیمایش درخت دودویی
15
.یکباردقیقاآنهایگرههمهمالقاتودرختیالهایرویحرکتیعنیدرخت،پیمایش
:پیمایشمعمولروشهای(preorder)(راستـچپـریشه)(VLR)پیشوندی(1
(inorder)(راستـریشهـچپ)(LVR)میانوندی(2
(postorder)(ریشهـراستـچپ)(LRV)پسوندی(3
زیرنهایتدر.شودمیپیمایشپیشوندیروشبهچپسمتدرختزیرسپس.شودمیمالقاتریشهابتدا،پیشوندیپیمایشدر.شودمیپیمایشپیشوندیروشبهراستسمتدرخت
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
Preorder : J E A H T M Y
Inorder : A E H J M T Y
Postorder : A H E M Y T J
16
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
Preorder : Y T W Z
Inorder : T W Y Z
Postorder : W T Z Y
17
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
Preorder : S R Y T W Z
Inorder : R S T W Y Z
Postorder : R W T Z Y S
18
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
Preorder : P F B H G S R Y T W Z
Inorder : B F G H P R S T W Y Z
Postorder : B G H F R W T Z Y S P
19
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
Preorder : 8 5 3 4 2 6 1 9
Inorder : 3 4 5 8 6 2 1 9
Postorder : 4 3 5 6 9 1 2 8
20
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
21
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
الگوریتم های پیمایش
postorderinorderpreorder
post(p){if (p==null) return;post ( p -> left );post ( p -> right );cout<<p -> data;
}
in (p){if (p==null) return;in ( p -> left );cout<<p -> data;in ( p -> right );
}
pre (p){if (p==null) return;cout<< p -> data;pre ( p -> left );pre ( p -> right );
}
22
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
میانوندیرسم درخت دودویی با داشتن پیمایش های پیشوندی و
:زیرپیمایشدوداشتنبادودوییدرخترسم
Preorder : a b d f c e g
Inorder : d f b a e g c
23
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مشخص کردن گره های تک فرزندی
.کردمشخصرافرزندیتكهایگرهدودویی،درختیكpostorderوpreorderپیمایشدوکمكبهتوانمی
postorderپیمایشدرآنمعکوسکهسرهمیپشتزوجوکردهحرکتراستبهچپازPreorderپیمایشدرکاراینبرای.باشندمیفرزندیتكهایگرهها،زوجایندرگرهاولین.کنیممیپیداراباشد
:مثال
Preorder : 8 5 3 4 2 6 1 9
Postorder : 4 3 5 6 9 1 2 8
(53) , (34) و (19) .
24
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
دودویی با داشتن پیمایش های پیشوندی و پسوندیرسم درخت
.کردمشخصنمیتوانرافرزندیتكگرههایمحلباشند،دسترسدردودوییدرختیكپسوندیوپیشوندیهایپیمایشاگر
آنهاpostorderوpreorderپیمایشکهکردایجادتوانمیدرختچندینفرزندی،تكهایگرهوجودصورتدربنابراین(فرزندیتكهایگرهتعداد:k)،k2^:بااستبرابرهادرختاینتعداد.باشندبرابرهمبا
:مثال
Preorder : A B C D E F G H I
Postorder : C E D B H I G F A
:ممکندرختچهار
25
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(Level Order)سطحدرخت به ترتیب پیمایش
.کنیممیمالقاتراستبهچپازسطحهردروپایینبهباالازسطحترتیببهراهاگره
levelپیمایشدر oderشودمیاستفادهصفزا..دارندنیازپشتهبهپسوندی،وپیشوندیمیانوندی،هایپیمایش
26
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
عبارتدرخت
.رودمهمدرختدودوییاستکهبرایعبارتهایریاضیبهکارمیکاربردهایدرختعبارتاز
آنراتولیدمیکندinfixیكدرختعبارت،نگارشinorderپیمایش .A-(C/5*2)+(D*5%4)
.آنراتولیدمیکندprefixیكدرختعبارت،نگارشpreorderپیمایش.آنراتولیدمیکندpostfixیكدرختعبارت،نگارشpostorderپیمایش
27
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
گره ساختnدودویی که می توان با تعداد درخت های
.ایمکردهگذاریشمارهnتا1ازinorderروشبهراهاگرهازیكهرمیکنیمفرض
.دارندقرارریشهراستدرختزیردرگرهn-iوریشهچپدرختزیردرگرهi-1صورتآندرباشد،ریشهiشمارهگرهاگر
1 2 3 …………………i-1 i i+1 ……………………. n
28
n
n
nbn
2
1
1
1,1 10
1
1
bb
bbb in
n
i
in
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.نماییدمشخصراساختمیتوانگره3باکهمتفاوتدودوییهایدرختتعداد:پاسخ
:کنیممیایجادرازیرهایحالتودادهقرارریشهرایکیریشهراستدرگرهدوهر-الف
ریشهراستدرگرهیكوریشهچپدرگرهیك-بریشهچپدرگرهدوهر-ج
:دومروش
29
54
45
4
!3!3
!3456
4
!3!3
!6
4
3
6
21101102 bbbbb فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402 نخ کشی شده دودویی درخت(( A Threaded Binary Tree
.استاشارهگر2nدارایگرهnبادودوییدرختیك
n-1وشدهاستفادهاشارهگرn+1استنشدهاستفادهاشارهگر.پیمایشسرعتنرفتباالباعثکهکرداشارهپیمایشیكدربعدییاقبلیعناصربهمیتواناستفادهبدوناشارهگرهایازاستفادهبا
.میشوددرخت
.میگویندنخیدرخت،شوداستفادهچنیناینآناستفادهبدوناشارهگرهایازکهدرختیبه
H D I B E A F C G
30
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ساختار گره در درخت نخی
struct node{
struct node *left ;
struct node *right ;
char data ;
short int lflag ;
short int rflag ;
};
.یكاشارهگرنخیاستودرغیراینصورتاشارهگرعادیبهفرزندچپاستleftباشد،lflag=1اگر
.یكاشارهگرنخیاستودرغیراینصورتاشارهگرعادیبهفرزندراستاستrightباشد،rflag=1اگر
31
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(عمومی)کلی درخت
ایزمتمهمازراستیاچپبچهعنوانبادودوییدرختیكدرفرزنداینآنگاهباشد،فرزندیكدارایگرهیكاینکهفرضبا.نداردوجودآنهابینتفاوتیکلیدرختیكدرامامیشوند،
درختبا"معادلدودوییدرخت"آنبهکهآوریممیدردودوییدرختیكصورتبهراآنهاکلی،هایدرختسازیپیادهبرای.گوییممیاصلی
32
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مراحل تبدیل یک درخت به درخت دودویی معادل
.میکنیممتصلیکدیگربهرا(پدریكفرزندان)همکنارگرههایکلیهسطحهردر-1.میکنیمقطعرافرزندچپترینسمتاتصالبجزپدر،گرهبهگرههااتصاالتکلیه-2
درگرههرراستسمتبرادرواستمعادلدودوییدرختدرگرهآنچپفرزنداصلی، درختدرگرههرفرزنداولین.استمعادلدرختدرآن،راست فرزنداصلی،درخت
33
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(Forest)جنگل
34
درختمجزااستnجنگلشامل .(n>=0)
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تبدیل جنگل به درخت دودویی
35
:تبدیلمراحل.میکنیمتبدیلدودوییدرختیكبهراجنگلدرختهر-1.کنیممیمتصلهمبهریشه،گرههایراستفرزندطریقازرادودوییهایدرخت-2
.انددادهتشکیلراجنگلکهاستهاییدرختتعدادبرابرها،برگتعدادجنگل،ازحاصلدودوییدرختدر
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(Tree-2)درخت دودویی گسترش یافته
.داردفرزند2یا0گرههرآندرکهدودوییدرخت.گویندمیخارجیراندارندفرزندکههاییگره
.گویندمیداخلیرادارندفرزند2کهگرههایی.دهیممینشانIباراداخلیگرههایتعداد
.دهیممینشانEباراخارجیگرههایتعداد
.نامیممیLIداخلیمسیرطولراداخلیگرههرتاریشهازهاطولتماممجموع
.نامیممیLEخارجیمسیرطولراخارجیگرههرتاریشهازهاطولتماممجموع
36
5221 EL
I2LL IE
3
2
E
I
110 ILفرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پیادهسازیچندالگوریتم
cبهزبان
37
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
نودایجاد
:ساختارگرهیكدرختدودوییstruct node{ int data; struct node* left; struct node* right; };
:هاسازیپیادهتمامدرشدهاستفادهnewnodeتابع
struct node* newnode(int item){
struct node* node = (struct node*) malloc(sizeof(struct node));
node ->data = item;
node ->left = NULL;
node ->right = NULL;
return(node);
}
38
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402شمارشتعدادگرهها
unsigned int count (struct node* root)
{
if (root == NULL)
return (0);
return (1 + count ( root->left ) + count ( root->right ) );
}
39
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
تشخیص برگ بودن
bool isleaf (struct node *n)
{
if (n== NULL)
return false;
if ((n ->left == NULL) && (n ->right == NULL) )
return true;
return false;
}40
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ساختن درخت
int main(void) {
struct node* nr = NULL;
struct node* root = newnode (2);
root ->left = newnode (7);
root -> right = newnode (5);
root -> left -> right = newnode (6);
root -> left -> right -> left = newnode (1);
root -> right -> right = newnode (9);
}
41
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
کامل بودن درخت دودوییتشخیص
bool f(struct Node* root, unsigned int i , unsigned int n)
{
if (root == NULL)
return (true);
if (i >= n)
return (false);
return( f(root->left, 2*i , n) && f (root->right , 2*i + 1 , n) );
}
42
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
حذف گره های تک فرزندی
حذف گره های تک فرزندیstruct node* remove (struct node* root){
if (root==NULL) return NULL;
root->left = remove (root->left);
root->right = remove (root->right);
if ((root->left==NULL) && (root->right==NULL) ) return root;
if (root->left==NULL)
{ struct node* n = root->right; free(root); return n; }
if (root->right==NULL)
{ struct node* n = root->left; free(root); return n; }
return root;
}
43
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
levelorderپیمایش
void LevelOrder( struct node* root ){
int rear, front;
struct node ** queue = createQueue( &front , &rear );
struct node * t = root;
while(t) {
cout << t ->data ;
if (t ->left ) enQueue( queue, &rear, t -> left );
if (t ->right ) enQueue (queue, &rear, t -> right );
t = deQueue (queue, &front );
}
}44
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
struct node** createQueue(int *front , int *rear) {struct node ** queue = (struct node **) malloc (sizeof(struct node*) * MAX);
*front = *rear = 0;
return queue;
}
void enQueue(struct node **queue, int *rear, struct node *newnode) {
queue[*rear] = newnode;
(*rear)++;
}
struct node * deQueue(struct node **queue, int *front) {
(*front)++;
return queue[*front - 1];
}45
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402تمرین
عملکردتابعزیرچیست؟
int sum ( node *root ){
int s = 0;
if ( root != NULL ) {
if ( isLeaf (root ->left ) ) s = s + root ->left ->data;
else s = s+ sum (root ->left);
s = s + sum (root -> right);
}
return s;
}
46
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
درخت جستجوی دودویی
47
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(BST)درخت جستجوی دودویی
Binary))دودوییجستجویرادرختی Search Treeکهنامندمی:.باشندریشهازترکوچكچپ،درختزیرعناصر-1
.باشندریشهازبزرگترراست،درختزیرعناصر-2
.باشنددودوییجستجویدرختان،راستوچپدرختانزیر-3
.باشدنداشتهتکراریعنصرباگره-4
48
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
BSTارتفاع
.باشدمیnبرابرحالتبدتریندروlgnبرابرمتوسططوربهدودوییجستجویدرختارتفاع
49
nhn lg فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
BSTساخت
باسهگرهساخت؟BSTتهی،یكBSTبههرترتیبدلخواهدریك3,2,1بهچندحالتمیتوانباواردکردنمقادیر:پاسخ:عددسهورودبرایممکنهایترتیب
123 , 132 , 321 , 312 , 231 , 213
.درختمتمایزمیتوانایجادکرد5بنابراین.منجربهیكدرختمیشوند231و213ترتیب.رسید5جواببهدررابطه3میتوانباقراردادنمقدارالبته
50
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
BSTجستجوی یک عنصر در
:میشودمقایسهریشهبانظرموردعنصرکلیدمقدار.رسیدهایمنتیجهبهباشدبرابراگر-1
.نماییممیجستجوبازگشتیصورتبهراچپدرختزیرباشد،ریشهمقدارازکمتراگر-2
.نماییممیجستجوبازگشتیصورتبهراراستدرختزیرباشد،ریشهمقدارازبزرگتراگر-3
51
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
.تعدادمقایسهبرایپیداکردنهریكازکلیدهایدرختزیرراتعیینکنید:مثال
52
18
24
212
32
36
310
314
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
الگوریتم جستجوی دودویی
search( t , key)
{
if ( t==NULL or key == t -> data )
return t ;
if ( key < t -> data )
return search ( t -> left , key ) ;
else
return search ( t -> right , key ) ;
}
53
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
جستجودنباله
x(ناموفقیا)موفقیافتندرکهاستدرختآنهایگرههایبرچسبازایدنباله،"xکلیدجستجویدنباله"یكBSTیكدر.شوندمیمالقات
>:بااستبرابر45جستجودنباله:مثال 60 , 25 , 50 , 30 , 45 >
54
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
BSTدرج یک عنصر به
راستدرخترزیبهبودنبزرگترصورتدروچپدرختزیربهبودن،کوچکترصورتدروشدهمقایسهریشهباابتدانظرموردکلید.شودمیاضافه
:45کردناضافه:مثال
.میگیردانجامO(h)درزمانhبهارتفاعگرهوnباBSTدردرج
55
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
BSTالگوریتم درج در
tدر درخت جستجوی دودویی itemدرج یک گره با داده
insert( t , item ) {
p = search( t , item );
if ( p or !t ) {
n = malloc(sizeof(t));
n -> data = item ; n -> left = NULL; n -> right = NULL;
if ( t )
if (item < p -> data ) p -> left = n; else p -> right = n;
else
t = n;
}
}
56
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
سازیمرتب
رااعدادازشدهمرتبلیستیكتوانمیدرخت،inorderپیمایشسپسوعددnبادودوییجستجویدرختیكایجادباTreeسازی،مرتبروشاینبه.آوردبدست Sortگویندمی.
inorder : 20 , 25 , 30 , 45 , 50 , 60 , 65 , 70
57
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
BSTحذف یک گره از
:دهدرخاستممکنزیرحالتسهازیکی،حذفبراینظرموردگرهیافتنازپس.نمیباشددرختتنظیمبهنیازیوشدهحذفسادگیبهباشد،فرزندفاقدگرهاگر-1
.میشودمنتقلدرختدرباالطرفبهآنفرزندباشد،فرزندیكدارایفقطگرهاگر-2
.میگیردراآنجایinorderپیمایشدرآنقبلییابعدیگرهباشد،فرزنددودارایگرهاگر-3(.میشودجایگزینراستدرختزیرعنصرکوچکترینیاچپدرختزیرعنصربزرگترینمقدارباشده،حذفعنصرعبارتیبه)
58
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
مثال
:25بادادهحذفگره•
59
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
BSTپیدا کردن عنصر مینیم و ماکزیمم در
.کردپیداNULLبهرسیدنتاریشهازچپفرزندانگرهایاشارهکردندنبالباتوانمیرااستمینیمم،BSTدرآنکلیدکهعنصری
min( t ) {
while ( t -> left != NULL )
t = t -> left;
return t;
}
:رابرمیگرداندtزیردرختمشتقشدهازماکزیممدرروالزیراشارهگریبهعنصر
max( t ) {
while ( t -> right != NULL )
t = t -> right;
return t;
}
60
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
درخت هیپ
61
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402 هرم(Heap)
:داردوجوددودوییHeapنوعدو
1-Max-Heap:.باشدفرزندانشکلیدهایمقدارمساوییابزرگترآنگرههرکلیدمقدارکهکاملدودوییدرختیك
.کلیدبزرگترین:ریشه
62
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402 هرم((Heap
2-Min-Heap:.باشدفرزندانشکلیدهایمقدارمساوییاکوچکترآنگرههرکلیدمقدارکهکاملدودوییدرختیك
.کلیدکوچکترین:Minheapریشه
63
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
با آرایهheapنمایش
:v[i]عنصرهربرای:پدرv[2i+2]:راستفرزندv[2i+1]:چپفرزند
64
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heapدرج در
(خالیجایترینچپدر)نشدهپرکاملطوربههنوزکهسطحیدردرج
(.میشودجابهجاپدرشگرهباامکانحدتاسطحپایینتریندرگرهیعنی)،میپذیردصورتReHeapعملسپس
:5درج:مثال
65
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heaps 66
19
4222127
23
45
35
42
درج
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heaps 67
19
4222142
23
45
35
27
درج
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heaps 68
19
4222135
23
45
42
27
درج
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
ساخت درخت هیپ
69
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heapحذف از
.دمیشوتنظیممجدداًدرختومیگیردقرارریشهدرسطح،پایینتریندرموجودعنصرراستترینسمتوشدهحذفریشه
70
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heaps 71
19
4222127
36
45
35
3
حذف:مثال
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heaps 72
19
4222127
36
3
35
حذف:مثال
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heaps 73
19
4222127
3
36
35
حذف:مثال
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Heaps 74
19
432127
22
23
35
حذف:مثال
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402 صف اولویت(Priority Queue)
.میشودمشخصاولویتیدادههربرایاولویتصفدر
.میگرددحذفدارد،رااولویتباالترینکهعنصری
.داردرسیدگیبرایبیشتریاولویتبیشتربیماریشدتبابیمارهرکهکردتشبیهبیمارستانیكاورژانسبهمیتوانرااولویتصف.میکنداستفادهاولویتهایصفازپردازشهامدیریتبرایهمکامپیوترسیستمعامل
:داردوجوداولویتصفنوعدو
max-priority)ماکزیمماولویتصف-1 queue)
min-priority)مینیمماولویتصف-2 queue)
75
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
پیاده سازی صف اولویت
نامرتبآرایهازاستفادهبا-1.میگیردقرارآنانتهایدرعادیصفمانندمیشود،صفواردکهدادهایO(n):حذفO(1):درج
مرتبآرایهازاستفادهبا-2.میگیردقرارمناسبمحلدرخوداولویتاساسبرمیشود،صفواردکهدادهایO(1):حذفO(n):درج
((heapمرتبنیمهآرایهازاستفادهبا-3O(logn):حذفO(logn):درج
.داردبهتریبسیارکارآییاولویتصفسازیپیادهبرایهیپدرختروشپس
76
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
.(ادامه)اولویت صف
:کندمیپشتیبانیرازیراعمالماکزیمماولویتصفیك
ناصرعتمامبایدونداردثابتیجایخاصعنصریكچونداد،انجامکاراصورتبهتواننمیرااولویتصفدرعنصریكیافتن.شوندجستجو
77
MAXIMUM(S) اولویتبرگرداندن عنصر با بزرگترینO(1)
INSERT(S,x) درج عنصرxO(lgn)
EXTRACT-MAX(S) لویتاوحذف و برگرداندن عنصر با بزرگترینO(lgn)
INCREASE-KEY(S,x,k) اولویت عنصر افزایش مقدارx به مقدار جدیدkO(lgn)
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
(Min-Max Heap) حداکثر -هرم حداقل
78
.استکلیدنامبهفیلدیدارایآنعنصرهرنباشد،تهیاگرکهاستکاملدودوییدرختیك
.داردقرارminسطحدرریشه.هستندmaxسطوحوminسطوحبترتیبدرخت،اینمتناوبسطوح.استگرهاینریشهبادرختزیردرواقععناصرهمهمیاندرکلیدکمتریندارایآندرواقععنصرکهحداقل،سطحدرگرهای:minگره.استگرهاینریشهبادرختزیردرواقععناصرهمهمیاندرکلیدبیشتریندارایآندرواقععنصرکهحداکثر،سطحدرگرهای:maxگره فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
حداکثر-درج در هرم حداقل
:80درجگره
79
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
حداکثر-درج در هرم حداقل
:5درجگره
80
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
حذف
:7حذف •
81
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Deap
:استزیرخواصداراییاواستتهییاکهاستکاملدودوییدرختیك
.نداردوجودعنصریریشهدر-1
.استminheapیكچپسمتدرختزیر-2.استmaxheapیكراستسمتدرختزیر-3کلیدمساوییاکوچکترچپ،درختزیرگرهکلید-4
.باشدمیراستدرختزیردرمتناظرگره
ارتفاع• :O(lgn)
O(lgn):یادرجحذف•
.میباشدn-1قرارنمیدهیموتعدادعناصرآرایهبرابرچیزیدرخانهاول.رامیتواندریكآرایهذخیرهکردdeapیك•
82
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
deapگره متناظر در
.است،maxheapدرآنبامتناظرگرهآنگاهباشد،minheapدرگرهیiاگر
.خواهدبودj/2،گرهiبیشترشود،آنگاهگرهمتناظرباگرهnازjالبتهاگر
83
1log22
i
ij
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Deapدرج در
:4درجعنصریباکلید
84
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
Treap
.شودمیساختهHEAPوBSTهایویژگیترکیباز
.استاولویتوکلیددارایگرههر
.کنندمیپیرویBSTویژگیازکلیدها
.کنندمیپیرویMinHeapویژگیازهااولویت
lognمرتبهاز:جستجو
85
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402درجدرtreap
86
فرادرس
FaraDars.org
ساختمان داده ها
faradars.org/fvds9402
87
این اسالید ها بر مبنای نکات مطرح شده در فرادرس« مجموعه فرادرس های ساختمان داده ها»
.تهیه شده است
.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به
faradars.org/fvds9402
فرادرس
FaraDars.org