ایوپ یسیون همانرب شور
Dynamic Programming
لصف موس
اه متیروگلا یحارط سرد
( س تمسق مو
)
کی ورفص یتشپ لهوک هلئسم
The 0-1 Knapsack Problem
کی و رفص یتشپ هلوک
دادعت
لااک n اب نزو و
شزرا نیعم
دوجو دراد
.
یش
، i i=1,2,…,n یاراد
w
iنزو و p
iشزرا تسا
.
کی
هلوک یتشپ
اب تیفرظ W ینزو
دوجوم تسا
.
فده
:
هلوک
یتشپ ار
هب هنوگ یا
مینکرپ هک
شزرا ایشا
باختنا
هدش رثکادح
دوش .
رد
هلوک یتشپ
کیورفص ره
لااک ای باختنا یم
دوش
ای لاصا باختنا
یمن ددرگ
.
3
W= 20
w
i9 10 5 8
5 4
4 3
2 3
نزو شزرا
تیفرظ اب یتشپ هلوک 20
Items p
i4
متیروگلا
Brute-force
اب
دوجو نتشاد
لااک n رد
2
nلک تلاح فلتخم
زا بیکرت اهنآ
دوجو دراد
.
هبترم
متیروگلا o(2
n)
تسا .
ایآ
یم ناوت رتهب
زا نیا لح
؟درک
هلب
اب – هدافتسا زا
شور همانرب
یسیون ایوپ
لاوس
: هلئسمریز رد
نیا هلئسم
؟تسیچ
5
لومرف یدنب
هلئسم
رگا
ایشا 1 زا
n ات بسچرب یراذگ
دنوش سپ
هلئسم نتفای
باوج هنیهب
یارب
هعومجم تامیمصت
ریز : تسا
x
iهک میمصت ینبم
رب دوجو ای
مدع دوجو
i ئیش رد
هلوک یتشپ
تسا .
هعومجم
یا زا تامیمصت هنیهب
تسا هک
ممیزکام دنک
رادقم
ار هب یطرش هک
اب
نتشاد هعومجم
هنیهب یا
k زا ءیش لوا
یسررب مینک
ناکما هفاضا
ندرک ءیش
یدیدج دوجو
دراد ای
ریخ . S
n= {x
1, x
2, … , x
n}
ni
i
x
ip
1
W
n
i
i
i
x
w
16
یتشگزاب ماگ هب ماگ لح
رد
ره هلحرم فیلکت
کی ئیش صخشم
یم دوش . رگا x
nزا
عورش مینک
:
رگا
x
n=1
،دشاب هاگنآ
شزرا هلوک
هب هزادنا p
nهفاضا و
تیفرظ هلوک
هب هزادنا w
nهتساک یم
دوش و دیاب هلئسم ار
n-1 یارب ئیش
و تیفرظ W-w
iهدنامیقاب لح
درک .
رگا
x
n=0 دشاب
هاگنآ دیاب
هلئسم ار
n-1 یارب ئیش
و تیفرظ لح W
درک .
ینعی
زا ود هنیزگ باختنا
ای مدع باختنا
n ئیش
،مُا ره مادک هک
هنیهب دشاب
هدیزگرب دهاوخ
دش .
f f w p
f
n(W) max
n 1(W),
n 1(W
n)
n
7
هطبار یتشگزاب
یتشپ هلوک یارب
B[w][k]
دوس هنیهب
لصاح زا
باختنا هعطق k
،لوا تحت
نیا تیدودحم هک
نزو لک
w زا زواجت دنکن
.
w w
p k
w w
B k
w B
w w
k w k B
w B
k k
k
k
if } ]
1 ][
[ ], 1 ][
[ max{
if ]
1 ][
] [ ][
[
رگا w
kءیش لماش باوج سپ دشاب هلئسمریز نزو زا رتشیب دوش یمن k
.
رگا نزو نآ
رتمک ای
یواسم اب
نزو هلئسمریز
،دشاب یم
دناوت رد
باوج
دشاب و
هعومجم اب
شزرا رتشیب
باختنا یم
دوش .
8
متیروگلا هب کی و رفص یتشپ هلوک
ایوپ یسیون همانرب شور
)
* (
)
( n w n
T
ادتبا ،متیروگلا یارجا زا لبق ساسا رب ار ایشا
pi/wi مینک یم بترم یلوزن تروص هب
.
1. void knapsack ( int n , const int p [ ] , const int w [ ], int W , int &
maxprofit )
2. { for w = 0 to W
3. B[w][0] = 0
4. for i = 0 to n
5. B[0][ i] = 0
6. for i = 1 to n
7. for w = 1 to W
8. if wi <= W // item i can be part of the solution
9. if pi + B[w-wi][i-1] > B[w][i-1]
10. B[w][i] = pi + B[w- wi][i-1]
11. else
12. B[w][i] = B[w][i-1]
13. else
14. B[w][i] = B[w][i-1] // wi > w 15. maxprofit=B[W][n];
16.}
لاثم دشاب گرزب رایسب یتشپ هلوک تیفرظ رگا W=n!
تروص نیا رد دشاب T(n)O(n!*n) :
9
)
* (
)
( n w n
T
for w = 0 to W
B[w][0] = 0
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
4
ساسا رب ار ایشا ادتبا pi/wi
هب
مینک یم بترم یلوزن تروص .
n = 4
ایشا دادعت
W = 5
هلوک تیفرظ یتشپ
نزو 2
3 4
5
شزرا 3
4 5
6
10
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
4
n = 4
ایشا دادعت
W = 5
یتشپ هلوک تیفرظ
نزو 2
3 4
5
شزرا 3
4 5
6
for i = 0 to n
B[0][ i] = 0
0 0 0 0
11
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=1 p
i=3 w
i=2 w=1
w-w
i=-1
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0
12
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=1 p
i=3 w
i=2 w=2
w-w
i=0
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
13
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=1 p
i=3 w
i=2 w=3
w-w
i=1
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
14
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=1 p
i=3 w
i=2 w=4
w-w
i=2
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
15
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=1 p
i=3 w
i=2 w=5
w-w
i=2
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
16
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=2 p
i=4 w
i=3 w=1
w-w
i=-2
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3 3
0
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
17
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=2 p
i=4 w
i=3 w=2
w-w
i=-1
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3 3
0 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
18
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=2 p
i=4 w
i=3 w=3
w-w
i=0
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3 3
0 3 4
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
19
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=2 p
i=4 w
i=3 w=4
w-w
i=1
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3 3
0 3 4 4
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
20
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=2 p
i=4 w
i=3 w=5
w-w
i=2
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3 3
0 3 4 4 7
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
21
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=3 p
i=5 w
i=4 w=1..3
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 3 3 3 3
0 0 3 4 4 7
0 3 4
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
22
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=3 p
i=5 w
i=4 w=4
w- w
i=0
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 0 0 3 4 4 7
0 3 4 5 3
3 3 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
23
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=3 p
i=5 w
i=4 w=5
w- w
i=1
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 0 0 3 4 4 7
0 3 4 5 7 3
3 3 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
24
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=4 p
i=6 w
i=5 w=1..4
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 0 0 3 4 4 7
0 3 4 5 7
0 3 4 5 3
3 3 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
25
0 0 0 0
0 0 W
0 1 2 3
4
5
i 0 1 2 3
0 0 0 0
i=4 b
i=6 w
i=5 w=5
Items:
1: (2,3) 2: (3,4) 3: (4,5) 4: (5,6)
4
0 0 0 3 4 4 7
0 3 4 5 7
0 3 4 5 7 3
3 3 3
if wi <= w // item i can be part of the solution if pi + B[w-wi][i-1] > B[w][i-1]
B[w][i] = pi + B[w- wi][i-1]
else
B[w][i] = B[w][i-1]
else B[w][i] = B[w][i-1] // wi > w
26
دگر هرود هدنشوفر هلئسم
The Traveling Salesperson Problem
هلئسم دگر هرود هدنشوفر
هلئسم
هدنشورف درگ هرود
Travelling salesman problem (
،
راصتخا هب (TSP :
یا هلئسم روهشم
تسا هک
ادتبا رد
هدس ۱۸
لئاسم طوبرم
هب
نآ طسوت مایلیو
نوتلیمه و
ویروچ حرطم
دش .
حرش
هلئسم نیدب
لکش تسا
هک :
یدادعت
رهش میراد
و هنیزه نتفر
میقتسم زا
یکی هب
یرگید ار
میناد یم .
بولطم
تسا نیرت هنیزه مک
یریسم هک
زا کی رهش عورش
دوش و
زا یمامت اهرهش
ًاقیقد
رابکی روبع
دنک و
هب رهش عورش
ددرگزاب .
هب نیا ریسم
کی روت
ای لکیس
ینوتلیماه هتفگ
یم دوش و
رد نیا هلئسم هب
لابند ادیپ
ندرک روت
هنیهب هک
لقادح لوط
روت ار دراد میتسه
. دادعت یاه باوج
یندش
،هلئسم ربارب
تسا اب
(n-1)!
n>2 رگا دشاب
n هک دادعت اهرهش
دشاب یم .
28
هلئسم دگر هرود هدنشوفر
In general, there can be an edge from every vertex to every other vertex. If we consider all possible tours, the second vertex on the tour can be any of n − 1 vertices, the third vertex on the tour can be any of n − 2 vertices, …, the nth vertex on the tour can be only one vertex.
Therefore, the total number of tours is : (n-1)!
لاثم
:
29
هلئسم لاثم مهادا دگر هرود هدنشوفر
The last tour is optimal. We solved this instance by simply considering all possible tours. In general, there can be an edge from every vertex to every other vertex. If we consider all possible tours, the second vertex on the tour can be any of n − 1 vertices, the third vertex on the tour can be any of n − 2 vertices, …, the nth vertex on the tour can be only one vertex. Therefore, the total number of tours is
30
31
32
33
34
متیروگلا درگ هرود هدنشورف هلئسم یارب ایوپ یسیون همانرب
1. void tarvel ( int , n, const number W[ ][ ] , index P[ ] [ ] , & minlength) 2. {
3. index i , j , k ;
4. number D[1..n] [subset of V - { v1 } ] ; 5. for ( i = 2 ; i ≤ n ; i ++)
6. D[i] [Ø] = W [i] [1] ;
7. for (k = 1 ; k ≤ n - 2 ; k ++)
8. for (all subsets A Ç V – { v1 } containing k vertices) 9. for (i such that i != 1 and vi is not in A){
10. D[i] [A] = minimum ( W [i] [j] + D [j] [A – {vj}]);
11. j: vj ∊ A
12. P [i] [A] = value of j that gave the minimum;
13. }
14. D [1] [ V – { v1 } ] = minimum ( W [1] [j] + D [j] [ V – { v1 – v j } ] );
15. 2 ≤ j ≤ n
16. P [1] [ V – { v1 } ] = value of j that gave the minimum;
17. minlength = D [1] [ V – { v1 } ];
18. } 35
لیلحت هلئسم ینامز یگدیچیپ
هرود هدنشورف درگ
لمع یلصا
: نامز رد
ره ود هقلح ی
لوا و
،رخآ رد
هسیاقم اب
نامز رد
هقلح
ینایم مشچ
ریگ
،تسین اریز
هقلح ینایم
یواح حوطس
نوگانوگ ییوتردوت
تسا .
تاروتسد ارجا
هدش یارب
ره رادقم v
jار یم ناوت لمع
یلصا رد
. تفرگ رظن
هزادنا یدورو
n : ، دادعت سوئر
دوجوم رد
فارگ .
نیرمت :
ناشن دیهد
یگدیچیپ هک
ینامز هلئسم
هدنشورف هرود
درگ ربارب
اب :
T (n) = n 2ⁿ Є θ ( n 2ⁿ )
36