• Tidak ada hasil yang ditemukan

فصل سوم

N/A
N/A
Protected

Academic year: 2024

Membagikan "فصل سوم"

Copied!
36
0
0

Teks penuh

(1)

ایوپ یسیون همانرب شور

Dynamic Programming

لصف موس

اه متیروگلا یحارط سرد

( س تمسق مو

)

(2)

کی ورفص یتشپ لهوک هلئسم

The 0-1 Knapsack Problem

(3)

کی و رفص یتشپ هلوک

دادعت

لااک n اب نزو و

شزرا نیعم

دوجو دراد

.

یش

، i i=1,2,…,n یاراد

w

i

نزو و p

i

شزرا تسا

.

کی

هلوک یتشپ

اب تیفرظ W ینزو

دوجوم تسا

.

فده

:

هلوک

یتشپ ار

هب هنوگ یا

مینکرپ هک

شزرا ایشا

باختنا

هدش رثکادح

دوش .

رد

هلوک یتشپ

کیورفص ره

لااک ای باختنا یم

دوش

ای لاصا باختنا

یمن ددرگ

.

3

(4)

W= 20

w

i

9 10 5 8

5 4

4 3

2 3

نزو شزرا

تیفرظ اب یتشپ هلوک 20

Items p

i

4

(5)

متیروگلا

Brute-force

اب 

دوجو نتشاد

لااک n رد

2

n

لک تلاح فلتخم

زا بیکرت اهنآ

دوجو دراد

.

هبترم

متیروگلا o(2

n

)

تسا .

ایآ 

یم ناوت رتهب

زا نیا لح

؟درک

هلب

اب – هدافتسا زا

شور همانرب

یسیون ایوپ

لاوس 

: هلئسمریز رد

نیا هلئسم

؟تسیچ

5

(6)

لومرف یدنب

هلئسم

رگا

ایشا 1 زا

n ات بسچرب یراذگ

دنوش سپ

هلئسم نتفای

باوج هنیهب

یارب

هعومجم تامیمصت

ریز : تسا

x

i

هک میمصت ینبم

رب دوجو ای

مدع دوجو

i ئیش رد

هلوک یتشپ

تسا .

هعومجم

یا زا تامیمصت هنیهب

تسا هک

ممیزکام دنک

رادقم

ار هب یطرش هک

اب

نتشاد هعومجم

هنیهب یا

k زا ءیش لوا

یسررب مینک

ناکما هفاضا

ندرک ءیش

یدیدج دوجو

دراد ای

ریخ . S

n

= {x

1

, x

2

, … , x

n

}

n

i

i

x

i

p

1

W

n

i

i

i

x

w

1

6

(7)

یتشگزاب ماگ هب ماگ لح

رد

ره هلحرم فیلکت

کی ئیش صخشم

یم دوش . رگا 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

(8)

هطبار یتشگزاب

یتشپ هلوک یارب

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

(9)

متیروگلا هب کی و رفص یتشپ هلوک

ایوپ یسیون همانرب شور

)

* (

)

( 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  

(10)

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

(11)

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

(12)

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

(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=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

(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=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

(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=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

(16)

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

(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=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

(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=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

(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=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

(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=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

(21)

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

(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=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

(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=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

(24)

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

(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 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

(26)

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

(27)

دگر هرود هدنشوفر هلئسم

The Traveling Salesperson Problem

(28)

هلئسم دگر هرود هدنشوفر

هلئسم

هدنشورف درگ هرود

Travelling salesman problem (

،

راصتخا هب (TSP :

یا هلئسم روهشم

تسا هک

ادتبا رد

هدس ۱۸

لئاسم طوبرم

هب

نآ طسوت مایلیو

نوتلیمه و

ویروچ حرطم

دش .

حرش

هلئسم نیدب

لکش تسا

هک :

یدادعت

رهش میراد

و هنیزه نتفر

میقتسم زا

یکی هب

یرگید ار

میناد یم .

بولطم

تسا نیرت هنیزه مک

یریسم هک

زا کی رهش عورش

دوش و

زا یمامت اهرهش

ًاقیقد

رابکی روبع

دنک و

هب رهش عورش

ددرگزاب .

هب نیا ریسم

کی روت

ای لکیس

ینوتلیماه هتفگ

یم دوش و

رد نیا هلئسم هب

لابند ادیپ

ندرک روت

هنیهب هک

لقادح لوط

روت ار دراد میتسه

. دادعت یاه باوج

یندش

،هلئسم ربارب

تسا اب

(n-1)!

n>2 رگا دشاب

n هک دادعت اهرهش

دشاب یم .

28

(29)

هلئسم دگر هرود هدنشوفر

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

(30)

هلئسم لاثم مهادا دگر هرود هدنشوفر

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)

31

(32)

32

(33)

33

(34)

34

(35)

متیروگلا درگ هرود هدنشورف هلئسم یارب ایوپ یسیون همانرب

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 ≤ jn

16. P [1] [ V – { v1 } ] = value of j that gave the minimum;

17. minlength = D [1] [ V – { v1 } ];

18. } 35

(36)

لیلحت هلئسم ینامز یگدیچیپ

هرود هدنشورف درگ

لمع یلصا

: نامز رد

ره ود هقلح ی

لوا و

،رخآ رد

هسیاقم اب

نامز رد

هقلح

ینایم مشچ

ریگ

،تسین اریز

هقلح ینایم

یواح حوطس

نوگانوگ ییوتردوت

تسا .

تاروتسد ارجا

هدش یارب

ره رادقم v

j

ار یم ناوت لمع

یلصا رد

. تفرگ رظن

هزادنا یدورو

n : ، دادعت سوئر

دوجوم رد

فارگ .

نیرمت :

ناشن دیهد

یگدیچیپ هک

ینامز هلئسم

هدنشورف هرود

درگ ربارب

اب :

T (n) = n 2ⁿ Є θ ( n 2ⁿ )

36

Referensi

Dokumen terkait