ad greedy algorithms2017/10/05 · راد نولایطساو ۱۳۹۵- یوضر صان دیس-...
TRANSCRIPT
روش حریصانه[email protected]سید ناصر رضوی
۱۳۹۵
مطالبفهرست
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
2
معرفی
پولباقیماندهمسئله
کمینهپوشایدرختپریمالگوریتم
کروسکالالگوریتم
تک مبدأمسیرکوتاه تریندایکستراالگوریتم
کارهازمانبندی
فشرده سازیهافمنالگوریتم
معرفی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
3
کنشروعتهیجوابمجموعهیکبا.ایده[حریصانهانتخاب]کنانتخابراعنصربهترینباقیماندهعناصربینازبارهر[سنجیامکانبررسی]کناضافهجوابمجموعهبهامکانصورتدرراشدهانتخابعنصرکنتکراررافوقمراحلصورتاینغیردروبرگردانراآناست،راه حلیکبیانگرجوابمجموعهاگر
[حلراهبررسی]
بهینه سازیمسائل.اصلیکاربرد
داردرسمیاثباتیکبهنیاز.بهینگی!؟می شودمنجرسراسریبهینهراه حلیکبه،محلیبهینهانتخاب هایازدنباله ایآیا
مسئله باقیمانده پول 4
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
5
سکه هاتعدادحداقلباسنت۳6دادنپس.۱مثال
صندوقدرموجودسکه های.
[جوابمجموعه].شدهانتخابسکه های
0: مجموع
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
6
سکه هاتعدادحداقلباسنت۳6دادنپس.۱مثال
صندوقدرموجودسکه های.
[جوابمجموعه].شدهانتخابسکه های
25: مجموع
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
7
سکه هاتعدادحداقلباسنت۳6دادنپس.۱مثال
صندوقدرموجودسکه های.
[جوابمجموعه].شدهانتخابسکه های
35: مجموع
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
8
35: مجموع
سکه هاتعدادحداقلباسنت۳6دادنپس.۱مثال
صندوقدرموجودسکه های.
[جوابمجموعه].شدهانتخابسکه های
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
9
35: مجموع
سکه هاتعدادحداقلباسنت۳6دادنپس.۱مثال
صندوقدرموجودسکه های.
[جوابمجموعه].شدهانتخابسکه های
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
10
36: مجموع
راه حل بهینه
سکه هاتعدادحداقلباسنت۳6دادنپس.۱مثال
صندوقدرموجودسکه های.
[جوابمجموعه].شدهانتخابسکه های
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
11
سکه هاتعدادحداقلباسنت۱6دادنپس.2مثال
صندوقدرموجودسکه های.
شدهانتخابسکه های.
[جوابمجموعه]
0: مجموع
سنت12
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
12
12: مجموع
سکه هاتعدادحداقلباسنت۱6دادنپس.2مثال
صندوقدرموجودسکه های.
شدهانتخابسکه های.
[جوابمجموعه]
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
13
12: مجموع
سکه هاتعدادحداقلباسنت۱6دادنپس.2مثال
صندوقدرموجودسکه های.
شدهانتخابسکه های.
[جوابمجموعه]
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
14
12: مجموع
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
15
13: مجموع
سکه هاتعدادحداقلباسنت۱6دادنپس.2مثال
صندوقدرموجودسکه های.
شدهانتخابسکه های.
[جوابمجموعه]
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
16
14: مجموع
سکه هاتعدادحداقلباسنت۱6دادنپس.2مثال
صندوقدرموجودسکه های.
شدهانتخابسکه های.
[جوابمجموعه]
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
17
15: مجموع
سکه هاتعدادحداقلباسنت۱6دادنپس.2مثال
صندوقدرموجودسکه های.
شدهانتخابسکه های.
[جوابمجموعه]
پولباقیماندهمسئله
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
18
16: مجموعراه حل غیر بهینه
سکه هاتعدادحداقلباسنت۱6دادنپس.2مثال
صندوقدرموجودسکه های.
شدهانتخابسکه های.
[جوابمجموعه]
حریصانهالگوریتمیکاجزای
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
19
انتخاب.گردداضافهجوابمجموعهبهبایدکهبعدیعنصرانتخاب.استبهینهخودزماندرانتخابهرکهمعنااینبهمی شود؛انجامحریصانهملاکیکاساسبرانتخاب.
امکان سنجی.خیریااستامکان پذیرجواب،مجموعهبهجدیدعنصرکردناضافهآیاکهاینبررسی.
راه حلبررسی.خیریااستراه حلیکبیانگرجدید،جوابمجموعهآیاکهاینبررسی.
درخت پوشای کمینه 20
مطالبفهرست
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
21
کمینهپوشایدرخت.معرفیوزن دارگرافواسطحریصانهالگوریتمکروسکالالگوریتمپریمالگوریتم
کمینهپوشایدرخت
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
22
همبندوجهتبدونگراف.ورودیGهستندمثبتآنیال هایوزنکه.
گرافازپوشادرختیک.تعریفGگرافازدوربدونوهمبندزیرگرافیکGاست.
وزنکمترینباپوشادرختیکیافتن.هدف
4
6
16
24
23
5
10
21
14
11
18
7
9
8
Gگراف
کمینهپوشایدرخت
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
23
4
6
16
24
23
5
10
21
14
11
18
7
9
8
غیر همبند
همبندوجهتبدونگراف.ورودیGهستندمثبتآنیال هایوزنکه.
گرافازپوشادرختیک.تعریفGگرافازدوربدونوهمبندزیرگرافیکGاست.
وزنکمترینباپوشادرختیکیافتن.هدف
کمینهپوشایدرخت
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
24
4
6
16
24
23
5
10
21
14
11
18
7
9
8
دارای دور
همبندوجهتبدونگراف.ورودیGهستندمثبتآنیال هایوزنکه.
گرافازپوشادرختیک.تعریفGگرافازدوربدونوهمبندزیرگرافیکGاست.
وزنکمترینباپوشادرختیکیافتن.هدف
کمینهپوشایدرخت
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
25
4
6
16
24
23
5
10
21
14
11
18
7
9
8
50یک درخت پوشا با وزن
همبندوجهتبدونگراف.ورودیGهستندمثبتآنیال هایوزنکه.
گرافازپوشادرختیک.تعریفGگرافازدوربدونوهمبندزیرگرافیکGاست.
وزنکمترینباپوشادرختیکیافتن.هدف
کمینهپوشایدرخت26
یمسیرهابرایکمینهپوشایدرخت.سیاتلشهردردوچرخه سواری
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
کمینهپوشایدرخت27
فیتصادگرافیکبرایکمینهپوشایدرخت.
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
کمینهپوشایدرخت28
یشآرابیانگرکمینهپوشایدرختتیپوسبافتیکدرسلول هاهسته.سرطانمورددرپژوهشبرای
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
کاربردها
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
29
کمینهپوشایدرختکاربردهایازبرخی.(جاده ایکابلی،کامپیوتری،الکتریکی،ارتباطی،)شبکهطراحی(دوره گردفروشنده)کاملپی-انمسائلبرایتقریبیالگوریتم هایماهواره ایوهواییتصاویردرراه هاشبکهیافتنبلادرنگصورتبهچهرهتشخیص...
وزن دارواسط گراف 30
وزن داریالواسط
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
31
وزن داریالکلاسواسط.
Edge implements Comparable<Edge>public class
v-wEdge(int v, int w, double weight)یال وزن دار ایجاد
either()intانتهاییبرگرداندن یکی از نقاط
other(int v)intنقطه انتهایی دیگربرگرداندن
compareTo(Edge that)intرمقایسه این یال با یک یال دیگ
weight()doubleبرگرداندن وزن یال
toString()Stringاینمایش یال به صورت رشته
v wweight
جاواپیاده سازی:وزن داریال
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
32
public class Edge implements Comparable<Edge>
{
private final int v, w;
private final double weight;
}
public Edge(int v, int w, double weight)
{
this.v = v;
this.w = w;
this.weight = weight;
}
public int either()
{ return v; }
public int compareTo(Edge that)
{
if (this.weight < that.weight) return -1;
else if (this.weight > that.weight) return +1;
else return 0;
}
سازنده
یکی از رئوس
رأس دیگر
ر مقایسه دو یال بمبنای وزن آن ها
public int other(int vertex)
{
if (vertex == v) return w;
else return v;
}
وزن دارگرافواسط33
EdgeWeightedGraphpublic class
EdgeWeightedGraph(int V)رأسVگراف تهی با ایجاد یک
EdgeWeightedGraph(In in)ایجاد یک گراف از جریان ورودی
addEdge(Edge e)voidبه گرافeافزودن یال
<vadj(int v)Iterable<Edgeبرگرداندن یال های متلاقی با رأس
<edges()Iterable<Edgeهمه یال های گرافبرگرداندن
V()intرئوسبرگرداندن تعداد
E()intبرگرداندن تعداد یال ها
toString()Stringهنمایش گراف وزن دار به صورت یک رشت
.موازی مجاز استیال های داشتن طوقه و پیاده سازی، در این . قرارداد۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
همسایگیلیستپیاده سازی:وزن دارگراف
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
34
می شوندذخیرهلیستیکدرآنبامتلاقییال هایرأس،هرازایبه.
جاواپیاده سازی:وزن دارگراف
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
35
public class EdgeWeightedGraph
{
private final int V;
private final Bag<Edge>[] adj;
}
public EdgeWeightedGraph(int V)
{
this.V = V;
adj = (Bag<Edge>[]) new Bag[V];
for (int v = 0; v < V; v++)
adj[v] = new Bag<Edge>();
}
public void addEdge(Edge e)
{
int v = e.either(), w = e.other(v);
adj[v].add(e);
adj[w].add(e);
}
public Iterable<Edge> adj(int v)
{ return adj[v]; }
سازنده
هر اضافه کردن یال بهدو لیست همسایگی
کمینهپوشایدرختواسط36
MSTpublic class
MST(EdgeWeightedGraphسازنده G)
<edges()Iterable<Edgeهبرگرداندن یال های درخت پوشای کمین
weight()doubleوزن درخت پوشای کمینهبرگرداندن
MSTیالهای
(سیاه)
سایر یالها(خاکستری)
% java MST tinyEWG.txt
0-7 0.16
1-7 0.19
0-2 0.26
2-3 0.17
5-7 0.28
4-5 0.35
6-2 0.40
1.81
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
کمینهپوشایدرختواسط37
MSTpublic class
MST(EdgeWeightedGraphسازنده G)
<edges()Iterable<Edgeهبرگرداندن یال های درخت پوشای کمین
weight()doubleوزن درخت پوشای کمینهبرگرداندن
% java MST tinyEWG.txt
0-7 0.16
1-7 0.19
0-2 0.26
2-3 0.17
5-7 0.28
4-5 0.35
6-2 0.40
1.81
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
Public static void main(String[] args)
{
In in = new In(args[0]);
EdgeWeightedGraph G = new EdgeWeightedGraph(in);
MST mst = new MST(G);
for (Edge e : mst.edges())
StdOut.println(e);
StdOut.printf(“%.2f\n”, mst.weight());
}
الگوریتم حریصانه 38
برشویژگی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
39
کنندهسادهفرضیات.متفاوتندیال هاوزن.،استهمبندگراف.
استفردبهمنحصروداردوجودکمینهپوشایدرخت.نتیجه.
75
4
13
8
9
12
14
20
16
10
1 3
26
ا وزن هیچ دو یالی بستیکدیگر برابر نی
11
برشویژگی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
40
می کندافراز(غیرتهی)مجموعهدوبهراگرافآنرئوسگراف،ازبرشیک.تعریف.
می کندمتصلدیگرمجموعهازرأسیکبهرامجموعهیکازرأسیک،متقاطعیالیک.تعریف.
داردقرارکمینهپوشایدرختدروزنکمترینبامتقاطعیالبرش،هرازایبه.برشویژگی.
ن یال های متقاطع بیتریرئوس سفید و خاکس
ن باید یال متقاطع با کمترین وزددر درخت پوشای کمینه باش
درستیاثبات:برشویژگی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
41
کندمیافراز(غیرتهی)مجموعهدوبهراگرافآنرئوسگرافازبرشیک.تعریف.
کندمیمتصلدیگرمجموعهازرأسیکبهرامجموعهیکازرأسیکمتقاطعیالیک.تعریف.
داردقرارکمینهپوشایدرختدروزنکمترینبامتقاطعیالبرش،هرازایبه.برشویژگی.
کنیدفرض.اثباتeباشدبرشیکدروزنکمترینبامتقاطعیالیک.کنیدفرضeنباشدکمینهپوشایدرختدر.
افزودنeکندمیایجاددوریککمینهپوشایدرختبه.
ماننددیگریالیکدورایندرfباشدمتقاطعیالیکباید.
برداشتنازحاصلدرختfافزودنوeاستپوشادرختیکهمچنان.
وزنکهآنجاازeوزنازfجدیدپوشایدرختایناست،کمتر
.داردکمتریوزن
تناقض!
e
درخت پوشای کمینهنیستeشامل
ینه به درخت پوشای کمeافزودن یک دور ایجاد می کند
f
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
42
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
6-4 0.93
5
4
1
7
0
3
2
6
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
43
0-2 0.26
1-3 0.29
2-7 0.34
1-2 0.36
6-0 0.58
6-4 0.93
5
4
1
7
0
3
2
6
یال های متقاطع (مرتب شده بر اساس وزن)
MSTدر
یال متقاطع با کمترین وزن
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
44
5
4
1
7
0
3
2
6
MST
0-2
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
45
5
4
1
7
0
3
2
6
یال متقاطعبا کمترین
5-7 0.28
1-5 0.32
4-5 0.35
یال های متقاطع (مرتب شده بر اساس وزن)
MSTدر
MST
0-2
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
46
5
4
1
7
0
3
2
6
MST
0-2 5-7
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
47
5
4
1
7
0
3
2
6
MST
0-2 5-7
یال متقاطعبا کمترین
6-2 0.40
3-6 0.52
6-0 0.58
6-4 0.93
یال های متقاطع (مرتب شده بر اساس وزن)
MSTدر
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
48
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
49
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2
0-7 0.16
2-3 0.17
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
3-6 0.52
یال های متقاطع (مرتب شده بر اساس وزن)
MSTدر
یال متقاطعبا کمترین
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
50
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2 0-7
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
51
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2 0-7
یال متقاطعبا کمترین
2-3 0.17
1-7 0.19
1-5 0.32
1-2 0.36
3-6 0.52
یال های متقاطع (مرتب شده بر اساس وزن)
MSTدر
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
52
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2 0-7 2-3
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
53
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2 0-7 2-3
یال متقاطعبا کمترین
1-7 0.19
1-3 0.29
1-5 0.32
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-4 0.93
یال های متقاطع (مرتب شده بر اساس وزن)
MSTدر
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
54
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2 0-7 2-3 1-7
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
55
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2 0-7 2-3 1-7
یال متقاطعبا کمترین
4-5 0.35
4-7 0.37
0-4 0.38
6-4 0.93
یال های متقاطع (مرتب شده بر اساس وزن)
MSTدر
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
نمایشیاجرای:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
56
5
4
1
7
0
3
2
6
MST
0-2 5-7 6-2 0-7 2-3 1-7 4-5
حریصانهالگوریتم.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.
کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.
تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
درستیاثبات:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
57
استکمینهپوشایدرختیکحریصانهالگوریتمخروجی.گزاره.
اثبات.(برشویژگیاساسبر)داردتعلقکمینهپوشایدرختبهشودمیسیاهکهیالیهر.ازکمترسیاههاییالتعداداگرV – نظردررابرشی).داردوجودسیاهمتقاطعیالبدونبرشیکباشد،1
(دهندمیتشکیلهمبندمولفهیکآنرئوسکهبگیرید
- Vتعداد یال های سیاه کمتر از هیک برش بدون یال متقاطع سیا1
کاراپیاده سازی:حریصانهالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
58
استکمینهپوشایدرختیکزیر،الگوریتمخروجی.گزاره.کنشروعهستند،خاکستریهمگیابتدادرکهیال هاییبا.کنسیاهراآنوزنکمترینبایالوکنپیداسیاهمتقاطعیالبدونبرشیکبارهر.تاکنتکرارقدرآنرابالاعملV – .شوندسیاهیال1
شود؟پیداچگونهکمینهوزنبایالباشد؟چگونهبرشانتخاب.کاراپیاده سازی[باشیدمابا]کروسکالالگوریتم.۱مثال[باشیدمابا]پریمالگوریتم.2مثالبرووکاالگوریتم.۳مثال
؟می شودچهنباشند،متفاوتیال هاهمهوزناگر.س
می کندکاردرستیبههنوزهستند،برابروزندارایکهیال هاییوجودباحریصانهالگوریتم.ج!
(دارداصلاحبهنیازشدهارائهاثبات)
کنندهسادهفرضیاتبرداشتن59
1
3 4
21 2 1.00
1 3 0.50
2 4 1.00
3 4 0.50
1
3 4
21 2 1.00
1 3 0.50
2 4 1.00
3 4 0.50
5
4
1
6
3
2
0
4 5 0.61
4 6 0.62
5 6 0.88
1 5 0.11
2 3 0.35
0 3 0.60
1 6 0.10
0 2 0.22
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
می شود؟چهنباشدهمبندگرافاگر.س
مؤلفههربرایکمینهپوشایدرخت=استکمینهپوشایجنگلیکخروجی.ج.
الگوریتم کروسکال 60
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
61
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
6-4 0.93
یال های گراف که بر اساسوزن مرتب شده اند
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
62
5
4
1
7
0
3
2
6
0-7 0.16
دور ایجاد نمی شود
MSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
63
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
دور ایجاد نمی شودMSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
64
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
دور ایجاد نمی شود
MSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
65
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
دور ایجاد نمی شود
MSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
66
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
دور ایجاد نمی شود
MSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
67
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
دور ایجاد می شود
نیستMSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
68
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
دور ایجاد می شود
نیستMSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
69
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
دور ایجاد می شود
نیستMSTدر
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
70
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
MSTدر 0.35 4-5
وددور ایجاد نمی ش
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
71
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
نیستMSTدر 0.36 1-2
دور ایجاد می شود
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
72
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
نیستMSTدر 0.37 4-7
ددور ایجاد می شو
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
73
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
نیستMSTدر 0.38 0-4
ددور ایجاد می شو
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
74
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
MSTدر 0.40 6-2وددور ایجاد نمی ش
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
75
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
نیستMSTدر 0.52 3-6
ددور ایجاد می شو
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
76
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
نیستMSTدر 0.58 6-0ددور ایجاد می شو
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
77
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
نیستMSTدر 0.93 6-4
ددور ایجاد می شو
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
نمایشیاجرای:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
78
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
6-4 0.93
هدرخت پوشای کمین
[۱۹۵6کروسکال،].کروسکالالگوریتم
بگیرنظردروزنصعودیترتیببهرایال ها.
درختبهراباقیماندهیالکم وزن ترینTشوددورایجادباعثکاراینانجامآنکهمگرکن؛اضافه.
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
نمایشیاجرای:کروسکالالگوریتم79
سازیپیادهچالش:کروسکالالگوریتم80
یالافزودنآیا.چالشv-wدرختبهT؟می شوددورایجادباعث
سختی؟درجه E + V
V
log V
log* V
1
را اجرا کن،DFSالگوریتم vبا شروع از رأس قابل دسترسی استwبررسی کن آیا رأس
5
4
1
7
0
3
2
6
این یال را به درخت اضافه کن
5
4
1
7
0
3
2
6
افزودن این یال به درخت باعث ایجاد دور می شود
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
!با استفاده از ساختمان داده مجموعه های مجزا
پیاده سازیچالش:کروسکالالگوریتم81
یالافزودنآیا.چالشv-wدرختبهT؟می شوددورایجادباعث
مجزامجموعه هایدادهساختمانازاستفاده.کاراه حلرادرهمبندمؤلفههرTکننگهداریمجزامجموعهیکدررا.
رأسدواگرvوwیالافزودنآنگاهباشند،مجموعهیکدرv-wمی شوددورایجادباعث.
یالافزودنازپسv-wبهT،رأسدوشاملمجموعه هایvوwکنادغامیکدیگربارا.
v
w
این یال را به درخت اضافه کن
vw
افزودن این یال به درخت باعث ایجاد دور می شود
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
جاوادرسازیپیاده:کروسکالالگوریتم82 public class KruskalMST
{
private Queue<Edge> mst = new Queue<Edge>();
public KruskalMST (EdgeWeightedGraph G)
{
MinPQ<Edge> pq = new MinPQ<Edge>();
for (Edge e : G.edges())
pq.insert(e);
UF uf = new UF(G.V());
while (!pq.isEmpty() && mst.size() < G.V() - 1)
{
}
}
public Iterable<Edge> edges() { return mst; }
}
Edge e = pq.delMin();
int v = e.either(), w = e.other(v);
if (!uf.connected(v, w))
{
uf.union(v, w);
mst.enqueue(e);
}
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
اجرازمان:کروسکالالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
83
بامتناسبزمانیدرراکمینهپوشایدرختحالتبدتریندرکروسکالالگوریتم.گزارهE log Eمی کندمحاسبه.
اثبات.
بابرابررشدمرتبهباشند،مرتبقبلازیال هااگر.توجهE log* Vبودخواهد.
زمان هر اجرافراوانیعمل
1Eایجاد صف اولویت
Elog Eحذف کوچکترین
*Vlogاجتماع V
*Elogنبررسی متصل بود V
*logدر دنیای واقعی : یادآوری V <= 5
الگوریتم پریم 84
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
85
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
6-4 0.93
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
86
5
4
1
7
0
3
2
6
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
87
5
4
1
7
0
3
2
6
0-7 0.16
0-2 0.26
0-4 0.38
6-0 0.58
یک یال هایی که دقیقااستTرأسشان در
MSTدر
زنیال با کمترین و
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
88
5
4
1
7
0
3
2
6
MSTیال های 0-7
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
89
5
4
1
7
0
3
2
6
یک یال هایی که دقیقااستTرأسشان در
MSTدر
زنیال با کمترین و
MSTیال های 0-7
1-7 0.19
0-2 0.26
5-7 0.28
2-7 0.34
4-7 0.37
0-4 0.38
6-0 0.58
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
90
5
4
1
7
0
3
2
6
MSTیال های 1-7 0-7
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
91
5
4
1
7
0
3
2
6
یک یال هایی که دقیقااستTرأسشان در
MSTدر
زنیال با کمترین و
MSTیال های 1-7 0-7
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
1-2 0.36
4-7 0.37
0-4 0.38
6-0 0.58
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
92
5
4
1
7
0
3
2
6
MSTیال های 0-2 1-7 0-7
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
93
5
4
1
7
0
3
2
6
یک یال هایی که دقیقااستTرأسشان در
MSTدر
زنیال با کمترین و
MSTیال های 0-2 1-7 0-7
2-3 0.17
5-7 0.28
1-3 0.29
1-5 0.32
4-7 0.37
0-4 0.38
6-2 0.40
6-0 0.58
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
94
5
4
1
7
0
3
2
6
MSTیال های 2-3 0-2 1-7 0-7
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
95
5
4
1
7
0
3
2
6
یک یال هایی که دقیقااستTرأسشان در
MSTدر
زنیال با کمترین و
MSTیال های 2-3 0-2 1-7 0-7
5-7 0.28
1-5 0.32
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
96
5
4
1
7
0
3
2
6
MSTیال های 5-7 2-3 0-2 1-7 0-7
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
97
5
4
1
7
0
3
2
6
یک یال هایی که دقیقااستTرأسشان در
MSTدر
یال با کمترین وزن
MSTیال های 5-7 2-3 0-2 1-7 0-7
4-5 0.35
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
98
5
4
1
7
0
3
2
6
MSTیال های 4-5 5-7 2-3 0-2 1-7 0-7
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
99
5
4
1
7
0
3
2
6
یک یال هایی که دقیقااستTرأسشان در
MSTدر
یال با کمترین وزن
MSTیال های 4-5 5-7 2-3 0-2 1-7 0-7
6-2 0.40
3-6 0.52
6-0 0.58
6-4 0.93
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
100
5
4
1
7
0
3
2
6
MSTیال های 6-2 4-5 5-7 2-3 0-2 1-7 0-7
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
101
5
4
1
7
0
3
2
6
MSTیال های 6-2 4-5 5-7 2-3 0-2 1-7 0-7
درخت پوشای کمینه
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].پریمالگوریتم
درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرا.
درآنرأسیکدقیقاًکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافه.
اجرا:پریمالگوریتم102
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
درستیاثبات:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
103
[۱۹۵۹پریم،۱۹۵7دیکسترا،۱۹۳0یارنیک].گزاره
.استکمینهپوشایدرختیکپریمالگوریتمخروجی
محاسبهحریصانهالگوریتمازخاصحالتیکپریمالگوریتم.اثباتMSTاست.کنیدفرضeمی کندمتصلنداردتعلقدرختبهکهدیگررأسیکبهرادرختازرأسیککهباشدیالی.
درخترئوسمجموعه=برش.
نیستسیاهمتقاطعییالهیچ.
ازمتقاطعییالهیچوزنeنیستکمتر.
5
4
1
7
0
3
2
6
به درخت اضافه می شودeیال
پیاده سازیهایچالش:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
104
درسرشیکدقیقاًکهوزنکمترینبایالیافتن.چالشTباشد.
سختیدرجه. E
V
log E
log* E
1
5
4
1
7
0
3
2
6
تیال با کمترین وزن اس7-1یال استTکه دقیقا یک سرش در
1-7 0.19
0-2 0.26
5-7 0.28
2-7 0.34
4-7 0.37
0-4 0.38
6-0 0.58
بررسی تمام یال ها
استفاده از یک صف اولویت
مشتاقپیاده سازی:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
105
درسرشیکدقیقاًکهوزنکمترینبایالیافتن.چالشTباشد.
بهیالیکوسیلهبهکهرارئوسی.مشتاقراه حلTرأساولویتکهطوریبهکن،نگهداریاولویتصفیکدرهستندمتصلvبرابر.می کندوصلTبهراvکهیالیکوتاه ترینوزنبااسترأسنزدیک ترین(v)یال)راآنبامرتبطیالوحذفصفازرادرختبهe = v-w)کناضافهدرختبه.
بامتلاقییال هایهمهگرفتننظردربارااولویتصفv(صورتبهe = v-x)کنرسانیروزبهاگرxبگیرنادیدهراآندارد،قراراولویتصفدر
صورتاینغیردرxکناضافهاولویتصفبهرا
اگرv-xکهباشدیالیکوتاه ترینxاولویت،می کندوصلدرختبهراxبدهافزایشرا
5
4
1
7
0
3
2
6
MSTدر : سیاه
0
1 1-7 0.19
2 0-2 0.26
3 1-3 0.29
4 0-4 0.38
5 5-7 0.28
6 6-0 0.58
7 0-7 0.16
PQدر : قرمز
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
106
5
4
1
7
0
3
2
6
0-7 0.16
2-3 0.17
1-7 0.19
0-2 0.26
5-7 0.28
1-3 0.29
1-5 0.32
2-7 0.34
4-5 0.35
1-2 0.36
4-7 0.37
0-4 0.38
6-2 0.40
3-6 0.52
6-0 0.58
6-4 0.93
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
107
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
108
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
2 0-2 0.26
4 0-4 0.38
6 6-0 0.58
PQرئوس موجود در
(مرتب بر اساس وزن)
اضافه کنPQرا به 6و 4، 2، 7رئوس
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
109
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
2 0-2 0.26
4 0-4 0.38
6 6-0 0.58
MSTیال های 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
110
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
5 5-7 0.28
4 0-4 0.38
6 6-0 0.58
MSTیال های 0-7 در حال حاضر یال های کوتاه تریوجود دارد4و 2به رئوس
را به 1رأس PQاضافه کن
را به5رأس PQاضافه کن
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
111
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
5 5-7 0.28
4 0-4 0.38
6 6-0 0.58
MSTیال های 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
112
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
5 5-7 0.28
4 0-4 0.38
6 6-0 0.58
MSTیال های 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
113
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
5 5-7 0.28
3 1-3 0.29
4 0-4 0.38
6 6-0 0.58
MSTیال های 1-7 0-7 در حال حاضر یال های کوتاه تریوجود دارد5و 2به رئوس
را به 3رأس PQاضافه کن
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
114
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
5 5-7 0.28
3 1-3 0.29
4 0-4 0.38
6 6-0 0.58
MSTیال های 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
115
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
5 5-7 0.28
3 1-3 0.29
4 0-4 0.38
6 6-0 0.58
MSTیال های 0-2 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
116
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 1-3 0.29
5 5-7 0.28
4 0-4 0.38
6 6-0 0.58
MSTیال های 0-2 1-7 0-7 اکنون یال های کوتاه تریوجود دارد6و 3به رئوس
0.29را از 3کلید رأس
کاهش بده0.17به
0.58را از 6کلید رأس
کاهش بده0.40به
2-3
6-2
0.17
0.40
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
117
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 0-4 0.38
6 6-2 .40
MSTیال های 0-2 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
118
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 0-4 0.38
6 6-2 0.40
MSTیال های 2-3 0-2 1-7 0-7 در حال حاضر یال کوتاه تریوجود دارد6به رأس
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
119
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 0-4 0.38
6 6-2 0.40
MSTیال های 2-3 0-2 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
120
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 0-4 0.38
6 6-2 0.40
MSTیال های 5-7 2-3 0-2 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
121
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 0-4 0.38
6 6-2 0.40
MSTیال های 5-7 2-3 0-2 1-7 0-7
0.38را از 4کلید رأس
کاهش بده0.35به
4-5 0.35
اکنون یک یال های کوتاه تروجود دارد4به رأس
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
122
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 4-5 0.35
6 6-2 0.40
MSTیال های 5-7 2-3 0-2 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
123
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 4-5 0.35
6 6-2 0.40
MSTیال های 4-5 5-7 2-3 0-2 1-7 0-7 در حال حاضر یک یال کوتاه تروجود دارد4به رأس
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
124
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 4-5 0.35
6 6-2 0.40
MSTیال های 4-5 5-7 2-3 0-2 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
125
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 4-5 0.35
6 6-2 0.40
MSTیال های 6-2 4-5 5-7 2-3 0-2 1-7 0-7
نمایشیاجرای:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
126
5
4
1
7
0
3
2
6
پریمالگوریتم.درختوکنشروعصفررأسباTکنبزرگحریصانهطوربهرادرآنرأسیکدقیقاکهراوزنکمترینبایالمرحله،هردرT،بهاستTکناضافهآوردندستبهتافوقمراحلتکرارV – یال1
v edgeTo[] distTo[]
0 - -
7 0-7 0.16
1 1-7 0.19
2 0-2 0.26
3 2-3 0.17
5 5-7 0.28
4 4-5 0.35
6 6-2 0.40
MSTیال های 6-2 4-5 5-7 2-3 0-2 1-7 0-7
اندیس داراولویتصف
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
127
تا0بیناندیسیکاولویتصفدرکلیدهربهN – بدهنسبت1
جدیدعنصریکدرجوکلیدکوچک ترینباعنصرحذف:عملیات
آناندیسکردنمشخصباعنصریککلیدکاهش:جدیدعملیک
IndexMinPQ <Key extends Comparable<Key>>public class
- Nتا 0ایجاد یک صف اولویت اندیس دار با اندیس های 1IndexMinPQ(int N)
keyinsert(int k, Key key)voidبه کلید kنسبت دادن اندیس
,kdecreaseKey(int kکلید مرتبط با اندیس کاهش Key key)void
contains(int k)booleanدر صف اولویت وجود دارد؟kآیا اندیس
delMin()intبا آنتبطحذف عنصر با کوچکترین کلید و برگرداندن اندیس مر
isEmpty()booleanآیا صف اولویت خالی است؟
size()intبرگرداندن تعداد عناصر صف اولویت
اندیس داراولویتصفپیاده سازی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
128
پیاده سازی.کدبامشابهکدیباMinPQکنشروع
آرایهسهازپیاده سازیبرایkeys[]،pq[]وqp[]کهگونه ایبهکناستفاده:
Keys[i]اولویتبیانگرiاست
pq[i]مکاندرکهاستکلیدیاندیسبیانگرiداردقرارهرماز
qp[i]اندیسباکلیدمکانبیانگرiاستهرمدر
عملپیاده سازیمنظوربهdecreaseKey(k, key)دستورازswim(qp[k])کناستفاده
i 0 1 2 3 4 5 6 7 8
keys[i] A S O R T I N G -
pq[i] - 0 6 7 2 1 5 4 3
qp[i] 1 5 4 8 7 6 2 3 -
A
N G
O S I T
R
1
2 3
4 5 6 7
8
پیاده سازی:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
129
public class PrimMST
{
private boolean[] marked; // true if v on tree
private Edge[] edgeTo; // shortest edge from tree vertex
private double[] distTo; // distTo[w] = edgeTo[w].weight()
private IndexMinPQ<Double> pq; // eligible crossing edges
public PrimMST(EdgeWeightedGraph G)
{
}
marked = new boolean[G.V()];
edgeTo = new Edge[G.V()];
distTo = new double[G.V()];
pq = new IndexMinPQ<Double>(G.V());
for (int v = 0; v < G.V(); v++)
distTo[v] = Double.POSITIVE_INFINITY;
distTo[0] = 0;
pq.insert(0, 0.0);
while (!pq.isEmpty())
visit(G, pq.delMin());
پیاده سازی:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
130
public Iterable<Edge> edges() { /* exercise */ }
public double weight() { /* exercise */ }
}
private void visit(EdgeWeightedGraph G, int v)
{
marked[v] = true;
for (Edge e : G.adj(v))
{
int w = e.other(v);
if (marked[w]) continue;
if (e.weight() < distTo[w])
{
edgeTo[w] = e;
distTo[w] = e.weight();
if (pq.contains(w)) pq.decreaseKey(w, distTo[w]);
else pq.insert (w, distTo[w]);
}
}
}
اجرازمان:پریمالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
131
دارداولویتصفپیاده سازینحوهبهبستگیپریمالگوریتماجرایزمان:
Vدرج،مرتبهVکوچک ترینحذفمرتبه،Eکلیدکاهشمرتبه
زمان اجرا کاهش کلید حذف کوچکترین درج پیاده سازی
V2 1 V 1 آرایه
E log V log V log V log V هرم دودویی
E logE/V V logd V d logd V d logd V طرفهdهرم
E + V log V 1 † log V † 1 † هرم فیبوناچی
جمع بندی.استبهینهشلوغگراف هایبرایآرایهباپیاده سازی.
استترسریعبسیارخلوتگراف هایبرایدودوییهرم.
نداردپیاده سازیارزشامااست،بهترینتئوریدرفیبوناچیهرم.
دههزینه سرشکن ش†
مسیر تک مبدأکوتاه ترین 132
وزن دارجهت داریالواسط
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
133
داروزنجهت داریالکلاسواسط.
DirectedEdgepublic class
v -> wDirectedEdge(int v, int w, double weight)یال جهت دار ایجاد
vfrom()intبرگرداندن رأس ابتدایی
wto(int v)intرأس انتهایی برگرداندن
weight()doubleبرگرداندن وزن یال
toString()Stringاینمایش یال به صورت رشته
v wweight
134
public class DirectedEdge
{
private final int v, w;
private final double weight;
public double weight()
{ return weight; }
}
public DirectedEdge(int v, int w, double weight)
{
this.v = v;
this.w = w;
this.weight = weight;
}
public int from()
{ return v; }
سازنده
داییبرگرداندن رأس ابت
هاییانتبرگرداندن رأس
البرگرداندن وزن ی
public int to()
{ return w; }
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
سازی جاواپیاده:وزن دارجهت داریال
وزن دارجهت دارگرافواسط135
.موازی مجاز استیال های داشتن طوقه و پیاده سازی در این . قراردادها
EdgeWeightedDigraphpublic class
EdgeWeightedDigraph(int V)رأسVگراف تهی با ایجاد یک
EdgeWeightedDigraph(In in)ایجاد یک گراف از جریان ورودی
addEdge(DirectedEdge e)voidبه گرافeافزودن یال
<vadj(int v)Iterable<DirectedEdgeبرگرداندن یال های خروجی از رأس
<edges()Iterable<DirectedEdgeهمه یال های گرافبرگرداندن
V()intرئوسبرگرداندن تعداد
E()intبرگرداندن تعداد یال ها
toString()Stringهنمایش گراف وزن دار به صورت یک رشت
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
همسایگیلیستنمایش:وزن دارجهت دارگراف
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
136
Bagاشیای
ارجاع به یک یال جهت دار
جاواپیاده سازی:وزن دارجهت دارگراف
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
137
public class EdgeWeightedDigraph
{
private final int V;
private final Bag<DirectedEdge>[] adj;
}
public EdgeWeightedDigraph(int V)
{
this.V = V;
adj = (Bag<DirectedEdge>[]) new Bag[V];
for (int v = 0; v < V; v++)
adj[v] = new Bag<DirectedEdge>();
}
public void addEdge(DirectedEdge e)
{
int v = e.from();
adj[v].add(e);
}
public Iterable<DirectedEdge> adj(int v)
{ return adj[v]; }
سازنده
تنها eاضافه کردن یال vبه لیست همسایگی
مبدأتکمسیرهایکوتاه ترینکلاسواسط
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
138
مبدأرأسازمسیرهاکوتاه ترینیافتن.هدفsدیگررئوستمامبه.
SPpublic class
sSP(EdgeWeightedDigraph G, int s)ز محاسبه کوتاه ترین مسیرها ا
vdistTo(int v)doubleبه sطول کوتاه ترین مسیر از
<vpathTo(int v)Iterable<DirectedEdgeبه sکوتاه ترین مسیر از
hasPathTo(int v)booleanمسیر وجود دارد؟vبه sآیا از
SP sp = new SP(G, s);
for (int v = 0; v < G.V(); v++)
{
StdOut.printf(“%d to %d (%.2f): ”, s, v, sp.distTo(v));
for (DirectedEdge e : sp.pathTo(v))
StdOut.println(e + “ ”);
StdOut.println();
}
مبدأتکمسیرهایکوتاه ترینکلاسواسط
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
139
مبدأرأسازمسیرهاکوتاه ترینیافتن.هدفsدیگررئوستمامبه.
SPpublic class
sSP(EdgeWeightedDigraph G, int s)ز محاسبه کوتاه ترین مسیرها ا
vdistTo(int v)doubleبه sطول کوتاه ترین مسیر از
<vpathTo(int v)Iterable<DirectedEdgeبه sکوتاه ترین مسیر از
hasPathTo(int v)booleanمسیر وجود دارد؟vبه sآیا از
% java SP tinyEWD.txt 0
0 to 0 (0.00):
0 to 1 (1.05): 0->4 0.38 4->5 0.35 5->1 0.32
0 to 2 (0.26): 0->2 0.26
0 to 3 (0.99): 0->2 0.26 2->7 0.34 7->3 0.39
0 to 4 (0.38): 0->4 0.38
0 to 5 (0.73): 0->4 0.38 4->5 0.35
0 to 6 (1.51): 0->2 0.26 2->7 0.34 7->3 0.39 3->6 0.52
0 to 7 (0.60): 0->2 0.26 2->7 0.34
مسیرویژگی های کوتاه ترین 140
مبدأتکمسیرکوتاه ترینمسئلهبرایداده هاساختمان
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
141
رأسازمسیرکوتاه ترینیافتن.هدفsدیگررئوستمامبه.
مسیرکوتاه تریندرختیک.مشاهده(SPT)چرا؟.داردوجود
دادنمایشمی توانآرایهدوازاستفادهبارامسیرکوتاه تریندرخت.نتیجه:distTo[v]=ازمسیرکوتاه ترینطولsبهv.
edgeTo[v]=ازمسیرکوتاه تریندریالآخرینsبهv.
5
4
1
7
3
6
2
0
sمسیر از کوتاه ترین درخت
v distTo[] edgeTo[]
0 0.00 null
1 1.05 5->1
2 0.26 0->2
3 0.97 7->3
5 0.38 0->4
4 0.73 4->5
6 1.49 3->6
7 0.60 2->7
مبدأتکمسیرکوتاه ترینمسئلهبرایداده هاساختمان
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
142
public double distTo(int v)
{ return distTo[v]; }
public Iterable<DirectedEdge> pathTo(int v)
{
if (!hasPathTo(v)) return null;
Stack<DirectedEdge> path = new Stack<DirectedEdge>();
for (DirectedEdge e = edgeTo[v]; e != null; e = edgeTo[e.from()])
path.push(e);
return path;
}
رأسازمسیرکوتاه ترینیافتن.هدفsدیگررئوستمامبه.
مسیرکوتاه تریندرختیک.مشاهده(SPT)چرا؟.داردوجود
دادنمایشمی توانآرایهدوازاستفادهبارامسیرکوتاه تریندرخت.نتیجه:distTo[v]=ازمسیرکوتاه ترینطولsبهv.
edgeTo[v]=ازمسیرکوتاه تریندریالآخرینsبهv.
(relaxation)یالراحت سازی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
143
یالراحت سازیe = v->w.distTo[v]ازفعلیمسیرکوتاه ترینطولبااستبرابرsبهv
distTo[w]ازفعلیمسیرکوتاه ترینطولبااستبرابرsبهw
edgeTo[w]ازفعلیمسیرکوتاه تریندریالآخرینبااستبرابرsبهw
یالاگرv->wرأسبهکوتاه تریمسیرwکند،میایجاد
.کنرسانیروزبهراedgeTo[w]وdistTo[w]مقداردوهر
v->wموفقیت آمیز یال راحت سازی
s
w
v 3.1
7.2
1.3
SPTیال های
4.4
(relaxation)یالراحت سازی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
144
private void relax(DirectedEdge e)
{
int v = e.from(), w = e.to();
if (distTo[w] > distTo[v] + e.weight())
{
distTo[w] = distTo[v] + e.weight();
edgeTo[w] = e;
}
}
s
w
v
7.2
1.3
3.1
یالراحت سازیe = v->w.distTo[v]ازفعلیمسیرکوتاه ترینطولبااستبرابرsبهv
distTo[w]ازفعلیمسیرکوتاه ترینطولبااستبرابرsبهw
edgeTo[w]ازفعلیمسیرکوتاه تریندریالآخرینبااستبرابرsبهw
یالاگرv->wرأسبهکوتاه تریمسیرwکند،میایجاد
.کنرسانیروزبهراedgeTo[w]وdistTo[w]مقداردوهر
مسیرکوتاه ترینبهینگیشرط
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
145
کنیدفرض.گزارهGباشدوزن دارجهت دارگرافیک.
مقادیرصورتایندرdistTo[]ازمسیرهاکوتاه ترینطولبیانگرsاگرفقطواگرهستند:رأسهرازایبهv،مقدارdistTo[v]ازمسیریکطولبیانگرsبهvباشد.
یالهرازایبهe = v->w،باشیمداشته:distTo[w] <= distTo[v] + e.weight()
[لازمشرط].اثباتیالازایبهکنیدفرضe = v->wباشیمداشتهdistTo[w] > distTo[v] + e.weight().
یالصورتایندرeازمسیریsبهwازکوتاه ترآنطولکهمی کندایجادdistTo[w]است.
s
w
v
7.2
1.3
3.1 distTo[v]
distTo[w]
مسیرکوتاه ترینبهینگیشرط
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
146
کنیدفرض.گزارهGباشدوزن دارجهت دارگرافیک.:اگرفقطواگرهستندsازمسیرهاکوتاه ترینطولبیانگر[]distToمقادیرصورتایندررأسهرازایبهv،مقدارdistTo[v]ازمسیریکطولبیانگرsبهvباشد.یالهرازایبهe = v->w،باشیمداشته:distTo[w] <= distTo[v] + e.weight()
[کافیشرط].اثباتکنیدفرضs = v
0->v
1->…->v
k= wازمسیرکوتاه ترینsبهwآنگاه.باشد:
distTo[vk] <= distTo[v
k-1] + e
k.weight()
distTo[vk-1
] <= distTo[vk-2
] + ek-1
.weight()
...
distTo[v1] <= distTo[v
0] + e
1.weight()
نتیجهدرdistTo[w] = distTo[v
k] <= e
1.weight() + e
1.weight()+ … + e
k.weight()
.استwبهsازکوتاه ترینطولبیانگرdistTo[w]بنابراین
مسیرکوتاه ترینعمومیالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
147
می کندمحاسبه(وجودصورتدر)رامسیرترینکوتاهدرختعمومیالگوریتم.گزاره.
اثباتطرح.اجرا،طولدرdistTo[v]ازسادهمسیریکطولsبهvاستمقدارموفق،راحت سازیهرdistTo[v]می دهدکاهشرا.مقدارdistTo[v]یابدکاهشمحدودیدفعاتتعدادمی تواندحداکثر.
Generic Algorithm (to compute SPT from s)
Initialize distTo[s] = 0 and distTo[v] = ∞ for all other vertices.
Repeat until optimality conditions are satisfied:
- Relax any edge
مسیرکوتاه ترینعمومیالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
148
شود؟راحت سازیبایدیالکدام.کاراپیاده سازی
(غیرمنفییال هاوزن)دایکستراالگوریتم.۱مثال(جهت داردورهایبدون)توپولوژیکیمرتب سازیالگوریتم.2مثال
(منفیدوربدون)فورد-بلمنالگوریتم.۳مثال
Generic Algorithm (to compute SPT from s)
Initialize distTo[s] = 0 and distTo[v] = ∞ for all other vertices.
Repeat until optimality conditions are satisfied:
- Relax any edge
الگوریتم دایکسترا 149
دایکستراازقولنقلچند150
ادسخر دایکسترا1972جایزه تورینگ
«. فقط کاری را انجام بده که توان انجامش را داری»
.کامپیوترها به عنوان یک ابزار چیزی بیش از یک موج گذرا بر سطح فرهنگ ما خواهند بود» «.هستندی سابقه ب، در تاریخ فرهنگی بشر می کنندذهنی ایجاد چالش های کامپیوترها در ظرفیتی که برای
«. تلقی شودکنی قانون ش؛ بنابراین تدریس آن باید به عنوان نوعی می کنداستفاده از کوبول مغز را تباه »
به عنوان : یرممکن استدر عمل غبوده اند خوب به دانشجویانی که قبلاً در معرض بیسیک برنامه نویسی تدریس » «. بالقوه ذهن آنها چنان فلج شده که دیگر امیدی به بازسازی آن نیستبرنامه نویسان
روش های با استفاده از آیندهبرنامه نویسی زبان ای پی ال . اشتباهی است که به کمال خود رسیده استای پی ال » «. نداخترا به راه خواهد ابرنامه نویسی از خطاهای تازه ای این زبان نسل . گذشته استبرنامه نویسی
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
151
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
1 3
0
7
4 6
2
5
5
8
9
12
7
6
4
20
13
11
9
5
15
3
4
1
s
0->1 5.0
0->4 9.0
0->7 8.0
1->2 12.0
1->3 15.0
1->7 4.0
2->3 3.0
2->6 11.0
3->6 9.0
4->5 4.0
4->6 20.0
4->7 5.0
5->2 1.0
5->6 13.0
7->5 6.0
7->2 7.0
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
152
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1
2
3
5
4
6
7
∞
∞
∞
∞
∞
∞
∞
0
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
153
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1
2
3
5
4
6
7
∞
∞
∞
∞
∞
∞
∞
0
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
154
1 3
0
7
4 6
2
5
5
8
9
0
∞
∞
∞
v distTo[] edgeTo[]
0 0.0 -
1
2
3
5
4
6
7
∞
∞
∞
∞
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2
3
5
4 9.0 0->4
6
7 8.0 0->7
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
155
1 3
0
7
4 6
2
5
5
8
9
0
∞
∞
∞
5
9
8
∞
∞
∞
∞
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
156
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2
3
5
4 9.0 0->4
6
7 8.0 0->7
∞
∞
∞
∞
5
9
8
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
157
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2
3
5
4 9.0 0->4
6
7 8.0 0->7
∞
∞
∞
∞
5
9
8
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
5
8
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
158
1 3
0
7
4 6
2
5
12
15
4
∞
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2
3
5
4 9.0 0->4
6
7 8.0 0->7
∞
∞
∞
9
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
159
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 17.0 1->2
3 20.0 1->3
5
4 9.0 0->4
6
7 8.0 0->7
12
15
4
5
8
∞
∞
20
17
∞
∞
9
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
160
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 17.0 1->2
3 20.0 1->3
5
4 9.0 0->4
6
7 8.0 0->7
∞
∞
9
8
20
17
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
161
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 17.0 1->2
3 20.0 1->3
5
4 9.0 0->4
6
7 8.0 0->7
∞
∞
9
8
20
17
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
162
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 17.0 1->2
3 20.0 1->3
5
4 9.0 0->4
6
7 8.0 0->7
7
6
8 17
∞
∞9
20
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
163
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 14.0 7->5
4 9.0 0->4
6
7 8.0 0->7
7
6
8 17 15
∞ 14
∞9
20
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
164
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 14.0 7->5
4 9.0 0->4
6
7 8.0 0->7
∞9
20
14
15
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
165
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 14.0 7->5
4 9.0 0->4
6
7 8.0 0->7
∞9
20
14
15
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
∞
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
166
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 14.0 7->5
4 9.0 0->4
6
7 8.0 0->7
4
20
5
9
8
14
20
15
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
167
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 29.0 4->6
7 8.0 0->7
4
20
5
9
∞
8
14 13
29
20
15
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
168
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 29.0 4->6
7 8.0 0->7
20
15
29
13
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
169
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 29.0 4->6
7 8.0 0->7
20
15
29
13
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
170
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 15.0 7->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 29.0 4->6
7 8.0 0->7
13
1
13
29
15
20
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
171
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 26.0 5->6
7 8.0 0->7
13
1
13
29
15
26
14
20
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
172
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 26.0 5->6
7 8.0 0->7
20
14
26
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
173
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 26.0 5->6
7 8.0 0->7
20
14
26
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
174
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 20.0 1->3
5 13.0 4->5
4 9.0 0->4
6 26.0 5->6
7 8.0 0->7
11
3
26
14
20
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
175
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
11
3
26
14
20 17
25
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
176
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
17
25
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
177
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
17
25
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
178
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
9
25
17
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
179
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
25
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
180
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
25
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
181
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
نمایشیاجرای:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
182
1 3
0
7
4 6
2
5
v distTo[] edgeTo[]
0 0.0 -
1 5.0 0->1
2 14.0 5->2
3 17.0 2->3
5 13.0 4->5
4 9.0 0->4
6 25.0 2->6
7 8.0 0->7
s
رأستاآنهافاصلهصعودیترتیببهرارئوسsبگیرنظردر.
کنراحت سازیراآنازخروجییال هایتماموکناضافهدرختبهرارأسنزدیک ترین.
اجرا:دایکستراالگوریتم183
s
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
درستیاثبات:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
184
بهمحاسرامسیرکوتاه تریندرختمنفی،وزن هایبدونوزن دارجهت دارگرافهردردایکستراالگوریتم.گزاره.می کند
اثبات.یالهرe = v->wًمی شودراحت سازیباریکدقیقا(راحت سازیهنگامدرv)،می شودباعثکه:
زیرا،می ماندبرقرارالگوریتماجرایانتهایتافوقنامساوی:distTo[w]نمی یابدافزایشهرگزdistTo[v]نمی کندتغییربعدبهاینازنیز
بودخواهدبرقرارمسیرهاکوتاه ترینبهینگیشرطالگوریتم،اجرایخاتمهازپسنتیجه،در.
distTo[w] ≤ distTo[v] + e.weight()
پیاده سازی:دایکستراالگوریتم185
public class DijkstraSP
{
private DirectedEdge[] edgeTo;
private double[] distTo;
private IndexMinPQ<Double> pq;
public DijkstraSP(EdgeWeightedDigraph G, int s)
{
edgeTo = new DirectedEdge[G.V()];
distTo = new double[G.V()];
pq = new IndexMinPQ<Double>(G.V());
for (int v = 0; v < G.V(); v++)
distTo[v] = Double.POSITIVE_INFINITY;
distTo[s] = 0.0;
}
pq.insert(s, 0.0);
while (!pq.isEmpty())
{
int v = pq.delMin();
for (DirectedEdge e : G.adj(v))
relax(e);
}
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
پیاده سازی:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
186
}
private void relax(DirectedEdge e)
{
int v = e.from(), w = e.to();
if (distTo[w] > distTo[v] + e.weight())
{
distTo[w] = distTo[v] + e.weight();
edgeTo[w] = e;
if (pq.contains(w)) pq.decreaseKey(w, distTo[w]);
else pq.insert (w, distTo[w]);
}
}
گراف هادرپوشادرختمحاسبه187
؟می رسدنظربهآشنادایکستراالگوریتماستدایکستراالگوریتمهمانپریمالگوریتم.
شانکارکهدارندتعلقالگوریتم هاازخانواده ایبهالگوریتمدوهر.استپوشادرختمحاسبه
بعدیرأسانتخابمنظوربهشدهاستفادهقانون.اصلیتفاوت(جهتبدونیالیکطریقاز)درختبهرأسنزدیک ترین:پریم
(ارجهت دیالیکطریقاز)مبدأبهرأسنزدیک ترین:دایکسترا
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
اجرازمان:دایکستراالگوریتم
۱۳۹۵-سید ناصر رضوی -روش حریصانه -طراحی الگوریتم ها
188
دارداولویتصفپیاده سازیشیوهبهبستگیدایکستراالگوریتماجرایزمان:
Vدرج،مرتبهVترین،کوچکحذفمرتبهEکلیدکاهشمرتبه
زمان اجرا کاهش کلید کوچکترینحذف درج پیاده سازی
V2 1 V 1 آرایه
E log V log V log V log V هرم دودویی
E logE/V V logd V d logd V d logd V طرفهdهرم
E + V log V 1 † log V † 1 † هرم فیبوناچی
جمع بندی.استبهینهشلوغگراف هایبرایآرایهباپیاده سازی.
استسریع تربسیارخلوتگراف هایبرایدودوییهرم.
نداردپیاده سازیارزشامااست،بهترینتئوریدرفیبوناچیهرم.
دههزینه سرشکن ش†