مشاهده - سید محمد بیدکی
Download
Report
Transcript مشاهده - سید محمد بیدکی
درس طراحی الگوریتم ها
فصل چهارم (ادامه)
روش حریصانه
Greedy approach
مدرس :سید محمد بیدکی
بهار 1392
مقدمه
گراف بدون جهت :شامل یک مجموعه متناهی و غیر تهی Vمی باشد که
عناصر آن را رئوس گراف Gمی نامیم .به همراه مجموعه Eکه شامل
مجموعه ای از زوج رئوس (یال) در Vمی باشد.
گراف جهت دار :در گراف جهت دار هر یال دارای ابتدا و انتها می باشد .به
عبارت دیگر ) (v, uبا ) (u ,vفرق دارد.
مسیر) :(Pathدنباله ای از رئوس ) (v1 , v2 ,…, vkبه گونه ای که هر یال (vi-1,
) viدر Eوجود داشته باشد.
چرخه ) :(cycleمسیری از یک رأس به خودش
گراف هم بند (متصل) :اگر از هر رأس به رئوس دیگر مسیری وجود داشته
باشد.
گراف وزن دار :گرافی که یال های آن دارای ارزش (وزن) باشند.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
2
مقدمه
درخت ) :(Treeگراف هم بند ،بدون جهت و بدون چرخه است.
رأس wمجاور رأس uمی باشد اگر یالی از wبه uوجود داشته
باشد.
دور اویلری :چرخه ای که از تمام یال های گراف دقیقا یک بار
عبور می کند.
دور همیلتونی :چرخه ای که از تمام رئوس گراف دقیقا یک بار
عبور می کند.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
3
نمایش گراف
G = (V, E) یک گراف با nرأس و eیال می باشد.
ماتریس مجاورت :یک ماتریس n*nکه برای هر دو رأسی که بین آنها
یال وجود دارد ،درایه متناظر آن 1و در غیر این صورت 0است.
در گراف وزن دار ،وزن ها را در ماتریس مجاورت ذخیره می کنند.
لیست مجاورت :یک آرایه nعضوی از اشاره گرها می باشد که هر
خانه آن به یک لیست پیوندی که شامل رئوس مجاور آن رأس است
اشاره می کند.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
4
مثال
2
1
3
4
5
5
4
2 3
1
1
0
1 0
0
1
1
1
0 1
1
2
0
1
1 0
0
3
ماتریس
مجاورتی
4 0 1 1 0 1
0
× 4
1 0
1
1
5
× 5
2
1
5
1
2
× 4
2
3
× 3
5
2
4
× 2
1
4
5
3
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
لیست
مجاورتی
/42
5
درخت پوشای کمینه )(minimum spanning tree
مسئله :یافتن درختی در یک گراف که شامل تمام رئوس آن گراف باشد(پوشا) و
مجموع وزن یالها در آن حداقل باشد.
کاربردهای مسئله:
در راهسازی می خواهیم چند شهر معین را با حداقل هزینه (کمترین جاده) به یکدیگر
وصل کنیم به طوری که مردم بتوانند از هر شهر به شهر دیگر سفر کنند.
در ارتباطات راه دور می خواهیم حداقل طول کابل استفاده شود.
در طراحی مدارات الکترونیکی به طور معمول الزم است پایه های چندین قطعه را از
طریق سیم کشی آنها به یکدیگر ،از نظر الکتریکی معادل سازیم.
برای اتصال nپایه ،می توان از چیدمان n-1سیمی (کمترین تعداد سیم) استفاده کرد که هر کدام
دو پایه را متصل می کند.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
6
مثال
یافتن درخت پوشا در گراف
1
v2
3
6
3
4
v4
نظریه :Cayleyبرای گراف کامل با nگره تعداد nn-2درخت پوشا وجود
دارد.
v1
v3
2
5
v5
استفاده از الگوریتم brute-forceهزینه زیادی دارد.
v2
1
v1
v2
3
v4
4
1
v4
2
v3
5
v5
v5
هزینه 15
هزینه 10
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
3
6
v3
v1
-
بیدکی
/42
7
الگوریتم حریصانه
مسئله درخت پوشای کمینه از دسته مسائل بهینه سازی می باشد.
هدف یافتن زیرمجموعه Fاز Eاست به گونه ای که )T=(V, F
درخت پوشای کمینه برای ) G=(V,Eباشد.
برای یافتن MSTسه الگوریتم حریصانه وجود دارد:
الگوریتم Prim
الگوریتم Kruskal
الگوریتم reverse-delete
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
8
الگوریتم پریم )(Prim
مبنای کار الگوریتم انتخاب بهترین
رأس در هر لحظه است.
مالک بهینه محلی :انتخاب نزدیک
ترین رأس به رئوس موجود در
مجموعه Y
روند اجرای الگوریتم:
Fزیرمجموعه ای تهی از یال ها
Yحاوی یک رأس دلخواه
انتخاب نزدیکترین رأس از مجموعه
V-Yبه رئوس Y
اضافه کردن رأس انتخاب شده به Y
و یال مربوطه به F
الگوریتم تا زمانی که تمام رئوس به
Yاضافه شوند ادامه می یابد.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
بیدکی
-
9
الگوریتم پریم
اندیس نزدیک ترین رأس در Yبه = vi
]nearest[i
وزن یال میان viو رأسی که توسط ] nearest[iمشخص شده است = ]/42distance[i
10
مثال
برای نمایش گراف از ماتریس مجاورتی استفاده می کنیم:
(vi , v j ) E
weight
w[i][ j ]
0
(vi , v j ) E
i j
1
v2
v1
3
6
3
4
v4
v3
2
5
v5
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
11
مثال
F=Ø
V-Y
1
v2
v1
v2
3
6
3
4
v4
v3
v3
v4
2
5
Y
v5
1
v1
3
∞
∞
v5
5
4
3
2
∞
∞
3
1
distance
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
5
4
3
2
1
1
1
1
بیدکی
nearest
/42
12
مثال
}}F = {{v1 , v2
V-Y
1
v2
v1
v3
3
6
∞ v4
v3
6
2
5
3
v1
3
3
4
v4
Y
v5
v2
∞
∞
v5
5
4
3
2
∞
6
3
-1
distance
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
5
4
3
2
1
2
1
1
بیدکی
nearest
/42
13
مثال
}}F = {{v1 , v2},{v1 , v3
V-Y
1
v2
v1
3
6
4
v3
v5
2
5
v1
∞ v4
3
4
v4
Y
v2
6
∞
∞
v3
2
v5
5
4
3
2
2
4
-1
-1
distance
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
5
4
3
2
3
3
1
1
بیدکی
nearest
/42
14
مثال
}}F = {{v1 , v2},{v1 , v3},{v3 , v5
V-Y
1
v2
Y
v1
v1
3
6
3
4
v4
∞
6
4
v4
v3
v3
5
2
5
v2
v5
v5
5
4
3
2
-1
4
-1
-1
distance
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
5
4
3
2
3
3
1
1
بیدکی
nearest
/42
15
مثال
}}F = {{v1 , v2},{v1 , v3},{v3 , v5},{v3 , v4
V-Y
v2
1
Y
v1
v1
v2
3
v4
4
v3
v3
v5
2
v4
v5
5
4
3
2
-1
-1
-1
-1
distance
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
5
4
3
2
3
3
1
1
بیدکی
nearest
/42
16
پیچیدگی زمانی
در حلقه repeatدو حلقه وجود دارد که هرکدام n-1بار تکرار می
شوند.
حلقه repeatهم به تعداد n-1بار تکرار میشود.
اندازه ورودی n :تعداد رئوس
)T(n) = 2 (n-1) (n-1) = Ө(n2
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
17
الگوریتم کروسکال )(Kruskal
این الگوریتم در هر لحظه بهترین یال را انتخاب میکند.
مراحل اجرای الگوریتم کروسکال
F = Ø .1مجموعه یالها
.2
ایجاد مجموعه های مستقل از رئوس (در ابتدا هر رأس ،در یک مجموعه)
.3
مرتب سازی یالها براساس وزن به صورت صعودی
.4
انتخاب یال با کمترین وزن
.5
بررسی امکان سنجی :اگر یال انتخاب شده دو مجموعه مجزا را به یکدیگر
وصل کند به مجموعه جواب ( )Fاضافه می شود و دو مجموعه ادغام می
گردند.
.6
مراحل از ۴
نگرفته -اند،
تا زمانی که تمام رئوس در یک مجموعه قرار
بیدکی
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
تکرار
/42
18
مثال
F = {{v
Ø 1 , v2},{v
}} 3,,v
v5},{v
}} 2 ,v3},{v
}}}} 3 ,v4
.1ایجاد مجموعه های مستقل از V
v1
v3
1
v2
v5
3
6
v4
3
4
v4
v2
v1
2
5
.2مرتب سازی یالها به ترتیب
صعودی
v3
v5
)(v4 , v2
)(v4 , v5
)(v3 , v4
)(v1 , v3
)(v2 , v3
)(v3 , v5
)(v1 , v2
6
5
4
3
3
2
1
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
19
الگوریتم
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
20
تحلیل پیچیدگی
اندازه ورودی n :تعداد رئوس و mتعداد یالها
زمان الزم برای ایجاد nمجموعه مجزا
زمان الزم برای مرتب سازی یالها
)T (n) (n
)w(m) (m lg m
زمان عملیات موجود در حلقه w(m) (m lg m) while
در بدترین حالت هر رأس را می توان به هر یک از رئوس دیگر متصل
کرد:
2)
m
=
n
)(n-1
/
2
∈
Ө(n
)W(m, n) ∈ Θ(m lgm) = Θ(n2 lgn2) = Θ(n2 2 lgn) = Θ(n2 lgn
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
21
مقایسه الگوریتم های Prim & Kruskal
)Ө(n2
الگوریتم پریم از مرتبه
الگوریتم کروسکال از مرتبه )Ө(m lgm) = Ө(n2 lgn
تعداد یالها در بازه زیر قرار داردn-1 ≤ m ≤ n(n-1)/2 :
اگر تعداد یال ها نزدیك به كرانه پاییني باشد ،الگوریتم
كروسكال) Ө(n lgnاست و باید سریعتر از پریم باشد.
اگر تعداد یال ها نزدیك به كرانه باالیي باشد ،الگوریتم
كروسكال) Ө(n2 lgnاست ،یعني الگوریتم پریم باید سریعتر
باشد.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
22
مسئله یافتن کوتاهترین مسیر )(shortest path
مسئله کوتاهترین مسیر یک مسئله بهینه سازی است.
مثال :یک مسئله مهم در سفرهای هوایی که پرواز مستقیم وجود ندارد،
تعیین کوتاهترین مسیر پرواز از یک شهر به شهر دیگر است.
برای حل این مسئله از الگوریتم های گراف بهره میگیریم:
الگوریتم فلوید ) (Floydکه از روش برنامه نویسی پویا استفاده می کند.
تمام کوتاهترین مسیرهای بین هر دو رأس را بدست می آورد.
( مراجعه به کتاب)
الگوریتم دایجسترا ) )Dijkstraکه یک الگوریتم حریصانه است.
این الگوریتم مسئله کوتاهترین مسیر تک مبدأ را حل می کند.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
23
الگوریتم Brute-force
تعیین طول همه مسیرها برای هر رأس ،از آن رأس به هر یک از رئوس
دیگر
مرتبه زمانی روش فوق بدتر از نمایی است:
فرض کنید که از هر رأس یک یال به همه رئوس وجود داشته باشد .همچنین
مسیر بین دو رأس مبدأ و مقصد از همه رئوس عبورکند.
رأس دوم در چنین مسیری می تواند هر یک از n-2رأس دیگر باشد ،رأس
سوم در چنین مسیری می تواند هر یک از n-3رأس دیگر باشد ... ،و رأس
یکی مانده به آخری در چنین مسیری فقط می تواند یک رأس باشد.
بنابراین تعداد کل مسیرها از یک رأس به رأس دیگر که از همه رئوس دیگر
بگذرد عبارت است از:
! )(n-2) (n-3) . . . 1 = (n-2
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
24
الگوریتم دایجسترا )(Dijkstra
هدف یافتن کوتاهترین مسیر از یک رأس مشخص تا تمام رئوس دیگر است
در یک گراف جهتدار موزون.
به دلیل استفاده از روش حریصانه در هر مرحله باید بخشی از جواب بدست
آید .بنابراین از کوتاهترین مسیر شروع کرده و به سمت مسیرهای طوالنی
تر می رویم.
} Y ={v1مجموعه رئوسی که کوتاهترین مسیر از گره مبدأ تا آنها پیدا شده
است.
در هر مرحله ،کوتاهترین مسیر بعدی که از v1شروع می شود و از رئوس
داخل Yمی گذرد و به رأسی می رسد که تا حاال مسیری برای آن پیدا نشده
است ،ثبت می شود.
در صورت اضافه شدن رأس جدیدی به ،Yباید تأثیر مثبت آن را در طول
مسیر رئوسی که در Yنیستند بررسی و اعمال کرد.
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
25
الگوریتم دایجسترا
Y = {v1}
F=ᶲ
While (the instance is not solved) {
select a vertex v from V-Y, that has a shortest path
from v1, using only vertices in Y as intermediates;
add the new vertex v to Y;
add the edge (on the shortest path) that touches v to F;
if (Y == V)
the instance is solved;
}
26
/42
بیدکی
-
) روش حریصانه (ادامه: فصل چهارم- درس طراحی الگوریتم ها
ساختمان داده مورد استفاده
touch[i]
•اندیس رأس vدر Yطوری که یال > <v, viآخرین یال
روی کوتاه ترین مسیر فعلی از v1به viفقط با استفاده از
رئوس Yبه عنوان واسط باشد( .رأس قبل از viروی
کوتاهترین مسیر)
length[i]
•طول کوتاهترین مسیر فعلی از v1به viفقط با استفاده از
رئوس موجود در Y
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
27
الگوریتم دایجسترا ...
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
28
مثال
}{ =F
}Y = {v1
v1
1
7
v2
4
v3
5
4
3
1
6
4
7
6
3
2
2
v5
length
5
1
v4
5
4
3
2
1
1
1
1
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
touch
/42
29
مثال
}>F= {<v1 , v5
}Y = {v1 , v5
v1
1
7
v2
4
v3
5
4
3
-1
2
4
7
6
3
2
2
v5
length
5
1
v4
5
4
3
2
1
5
1
1
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
touch
/42
30
مثال
}>F= {<v1 , v5>, <v5, v4
} Y = {v1 , v5 , v4
v1
1
7
v2
4
v3
5
4
3
-1
-1
4
5
6
1
3
2
2
v5
length
5
v4
5
4
3
2
1
5
1
4
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
touch
/42
31
مثال
}>F= {<v1 , v5>, <v5, v4>, <v1,v3
}Y = {v1 , v5 , v4 , v3
v1
1
7
v2
4
v3
5
4
3
-1
-1
-1
5
6
1
3
2
2
v5
length
5
v4
5
4
3
2
1
5
1
4
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
touch
/42
32
مثال
}>F= {<v1 , v5>, <v5, v4>, <v1,v3>, <v4,v2
}Y = {v1 , v5 , v4 , v3 , v2
v1
1
7
v2
4
v3
5
4
3
-1
-1
-1
-1
6
1
3
2
2
v5
length
5
v4
5
4
3
2
1
5
1
4
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
touch
/42
33
مثال 2
مسئله :یافتن کوتاهترین مسیر از رأس Aبه بقیه
رئوس
در گراف با وزن های غیر منفی
درس طراحی الگوریتم ها -فصل چهارم :روش حریصانه (ادامه)
-
بیدکی
/42
34