Tải bản đầy đủ (.pdf) (8 trang)

Bài toán quy hoạch động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (182.7 KB, 8 trang )

14/04/2008
1
BÀI TOÁN QUY HOẠCH ĐỘNG
BÀI

TOÁN

QUY

HOẠCH

ĐỘNG
(DYNAMIC PROGRAMMING)
Phạm Thế Bảo
Khoa Toán – Tin học
Trường Đại học Khoa học Tự nhiên Tp.HCM
Nội dung
• Kỹ thuậtchiađể trị thường dẫntớigiảithuật
đệ
quy
Æ

giải
thuật

thời
gian


giải
đệ


quy
Æ

giải
thuật

thời
gian


giải
bài toán con nhiềulần.
• Để tránh giải bài toán con nhiềulần Æ tạomột
bảng lưutrữ kếtquả các bài toán con để khi
cầnsẽ sử dụng lạikếtquả.
Lấ
đầ
kế

á
bài
á
h
l ậ

Lấ
p
đầ
y
kế

tqu

c
á
c
bài
to
á
ncont
h
eo quy
l
u

t
nào đó để có kếtquả củabàitoánbanđầu Æ
quy hoạch động
Phạm Thế Bảo
14/04/2008
2
Thuật giải
1. Tạobảng bằng cách:

a. Gán giá trị mộ
t
s

ô nào đó.
b. Gán giá trị cho các ô khác nhờ vào giá trị của các
ôtrước.

2. Tra bảng và xác định kếtquả của bài toán ban
đầu
Phạm Thế Bảo
Đánh giá
• Ưu điểm

Chương
trình
thực
thi
nhanh
do
không
tốn
thời
gian
Chương
trình
thực
thi
nhanh
do
không
tốn
thời
gian
giảilại bài toán con.
– Vậndụng để giải các bài toán tối ưu, có công thứctruy
hồi
• Nhược điểm

– Không tìm được công thứctruyhồi.

Số
lượng
bài
toán
con
cần
giải

lưu
trữ
kết
quả
rất
Số
lượng
bài
toán
con
cần
giải

lưu
trữ
kết
quả
rất
lớn.
– Việckếthợplờigiảicủa các bài toán con chưachắc

cho lờigiảicủa bài toán ban đầu.
Phạm Thế Bảo
14/04/2008
3
Bài toán tính số tổ hợp
• Tính C
n
k
bằng công thứctruyhồi.
0
n
e
á
u
k=
0
h
ay
k=n
k


Thuậtgiải:
long Comb(int n, int k){
1
0
k-1
n-1
eu 0 ay
C neáu 0<k<n

k
n
k
n
C
C


=

+

}
Phạm Thế Bảo
Đánh giá
• Gọi T(n) là thời gian tính C
n
k
,
ta có T
(
1
)
=C
1
và T
(
n
)
=

()
1
(
)
giải ta có T(n)=O( )
Æ bài toán con đượcgiải nhiềulần
Comb(4,2)
Phạm Thế Bảo
Comb(2,0)
Comb(3,2)
Comb(3,1)
Comb(2,2)Comb(2,1)Comb(2,1)
14/04/2008
4
Dùng quy hoạch động
• Xây dựng mộtbảng có (n+1) dòng từ 0 đếnnvà
(n+1) cộttừ 0 đếnn.Điền các giá trị ô(i,j) theo
ê
tắ
nguy
ê
n
tắ
csau:
– ô(0,0)=1 ô(i,i)=1 với0<i≤n
– ô(i,0)=1 ô(i,j)=ô(i-1,j-1)+ô(i-1,j) với 0<j<i≤n
• Ví dụ n=4
01234
0
1

Phạm Thế Bảo
0
1
1 11
2 11
3 11
4 11
Tamgiác Pascal
• Thuậtgiảimới:
int ** Comb(int n, int k){
C[0,0]=1;
for i=1 to n do
C[i,0]=1;
C[i,i]=1;
for j=1 to i-1 do
C[i,j]=C[i-1,j-1]+C[i-1,j];
endfor
return C;
}
}
• Vòng lặp for j thựchiệni-1 lần. Vòng lặpilặp
n lần Æ
Phạm Thế Bảo
14/04/2008
5
Bài toán cái ba lô
• Giả sử X[k,V] là số lượng đồ vậtkđượcchọn,
F[
kV
]

tổng
giá
trị
k
đồ
vật
được
chọn

V

F[
k
,
V
]
tổng
giá
trị
k
đồ
vật
được
chọn

V

trọng lượng còn lạicủabalô,k=1 nvà
V=1 W.
• Trường hợp đơngiảnnhất: chỉ có một đồ vật,

ta tính X[1,V] và F[1,V] với V=1 W như sau:
X[
1
V] V
di
à
F[
1
V] X[
1
V]*

X[
1
,
V]
=
V
di
vg
1
v
à
F[
1
,
V]
=
X[
1

,
V]*
v
1
– Vớig
1
là trọng lượng đồ vật1vàv
1
là giá trịđồ
vật1
Phạm Thế Bảo
• Giả sử tính được F[k-1,V], khi có thêm đồ vậtthứ
k, ta sẽ tính đượcF[k,V]như sau: nếuchọnx
k
đồ
vậtloạik,thìtrọng lượng còn lạicủabalôdành
cho k-1 đồ vậttừ 1 đếnk-1làU=V-x
k
*g
k
và tổng
giá
trị
k
loại
đồ
vật
đã
được
chọn


F[
kV
]
=
F[k
-
giá
trị
k
loại
đồ
vật
đã
được
chọn

F[
k
,
V
]F[k
1,U]+x
k
*v
kvới
x
k
từ 0 đếny
k

=V div g
k
và ta sẽ
chọnx
k
sao cho F[k,V] lớnnhất.
• Công thứctruyhồi:
– X[1,V]=V div g
1
và F[1,V]=X[1,V]*v
1
F[
kV
]=max{F[k
1
V
x
*
g
]+
x
*
v
}
với
x
chạy
từ
0


F[
k
,
V
]=max{F[k
-
1
,
V
-
x
k
*
g
k
]+
x
k
*
v
k
}
với
x
k
chạy
từ
0
đến(Vdivg
k

)
– Sau khi xác định được F[k,V] thì X[k,V] là x
k
Phạm Thế Bảo
14/04/2008
6
• Để lưucácgiátrị trung gian trong quá trình tính
F[k,V],tadùngmộtbảng có n dòng (từ 1 đếnn)–
dòng thứ k ứng vớiloại đồ vậtk,vàW+1cột(từ
0 đếnW),cộtthứ V ứng vớitrọng lượng V, mỗi

cộtVvg

m02cộtnhỏ:cột
b
ên trái lưuF[k,V],
cộtbênphảilưu X[k,V].
• Ví dụ:có05lọai đồ vậtnhư bảng,balôcótrọng
lượng W=9.
Đồ vậtTrọng lượng(g
i
) Giá trị(v
i
)
13 3
Phạm Thế Bảo
24 5
35 6
42 3
51 1

0123456 7 8 9
1 000000 1414182 2 8 2 123
2 00000040515180 9 1 10212 0
3 00000040506180 9 0 10 0 120
4 0000314062719310 2 12 413 3
v
k
5 0011304060709010 0 12 013 0
Đồ vậtg
i
v
i
133
245
356
4
2
3
• Cách tính:
– Dòng thứ nhất, dùng công thức X[1,V]=V div g
1
và F[1,V]=X[1,V]*v
1
– Từ dòng 2 đến dòng 5 dùng công thứctruyhồi F[k,V]=max{F[k-1, V-
x
k
*g
k
]+x
k

*v
k
} vớix
k
chạytừ 0 đến (V div g
k
).
– Ví dụ: tính F[2,7] ,
có x
k
={0 div 4, 1 div 4, 2 div 4, 3 div 4, 4 div 4, 5 div 4, 6 div 4, 7 div
Phạm Thế Bảo
4
2
3
511
4}= {0,1}.
F[2,7] =Max{F[2-1,7-0*4]+0*5, F[2-1,7-1*4]+1*5}
=Max{F[1,7], F[1,3]+5} = Max{8,4+5}
=
VậyX[2,7]=1
14/04/2008
7
• Vấn đề tra bảng như thế nào để có kếtquả?
– Khởi đầutrọng lượng ba lô V=W.
– Xét các đồ vậttừ n đến1,mỗi đồ vậtkứng vớitrọng
lượng còn lạiVcủabalô,nếu X[k,V]>0 thì chọn
X[k,V] đồ vậtloại k, tính lại V=V-X[k,V]*g
k
.

• Ví dụ: V=W=9
– Xét k=5, có X[5,9]=0 Æ không chọn
– Xét k=4, có X[4,9]=3 Æ chọn3đồ vậtloại 4, tính lại
V=9-3*2=3.
– Xét k=3, có X[3,3]=0 Æ không chọn
– Xét k=2, có X[2,3]=0 Æ không chọn
– Xét k=1, có X[1,3]=1 Æ chọn1đồ vậtloại 1, tính lại
V=3-1*3=0
– Tổng trọng lượng các vật trong ba lô=
– Tổng giá trị các vật trong ba lô =
Phạm Thế Bảo
Bài tập: cài đặtchương trình
Bài toán ngườigiaohàng
• Chúng ta cũng có thể dùng quy hoạch động để
iải
ết
g
iải
quy
ết
:
– ĐặtS={x
1
,x
2
,…,x
k
}làtập con các cạnh của đồ thị
G=(V,E). Ta nói một đường đitừ v đếnwphủ lên S
nếuP={v,x

1
,x
2
,…,x
k
, w}, trong đóx
i
xuấthiện ở vị
trí bấtkỳ,chỉ mộtlần.
ế

Ví dụ: đường đitừ a đ
ế
nfphủ lên {c,d,e,g}
Phạm Thế Bảo
a
c
f
e
g
d
14/04/2008
8
– Ta định nghĩa d(v,w,S) là tổng độ dài đường đitừ v
đếnwphủ lên S. Nếu không có đường đinhư vậythì
đặt d(v,w,S)=∞.
– Một chu trình Hamilton nhỏ nhấtH
min
củaGphảicó
tổn

g
đ

dài là d
(
H
min
)
=d
(
o
,
o
,
V-
{
o
}),
vớiolàm
ột
đỉnh
g

(
min
)(
,,
{}),

nào đó trong V.

– Ta tìm H
min
như sau:
• Nếu |V |=1 (G chỉ có 1 đỉnh) thì d(H
min
)=0
• Ngượclại:
o d(v,w,{})=d(v,w)
o d(v,w,S)=min {d(v,x)+d(x,w,S-{x})}, vớimọix∈S

ế

o d(v,w) là độ dài cạnh n

ihaiđỉnhvvàw,n
ế
u không t

ntạithì
d(v,w)= ∞
• Bằng cách lưutrữ các đỉnh x theo công thức đệ quy trên,
chúng ta sẽ có một chu trình Hamilton tốithiểu.
Phạm Thế Bảo

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×