Access over 20 million homework & study documents

COLLEGE OF CO-OPERATION BANKING & MANAGEMENT

Content type
User Generated
Type
Study Guide
Rating
Showing Page:
1/13
1
I. Bài tập 1. Bài toán cái túi.
Một nhà thám hiểm cần đem theo một cái túi trọng lượng không quá B. N đồ
vật cần đem theo. Đồ vật thứ i trọng lượng a
i
, giá trị sử dụng c
i
(i=1, 2, .., N; a
i
,
c
i
Z
+
). Hãy tìm cách đưa đồ vật vào túi cho nhà thám hiểm sao cho tổng giá trị sử
dụng các đồ vật trong túi là lớn nhất
Tập phương án của bài toán: Mỗi phương án của bài toán một xâu nhị phân
độ dài N. Trong đó, x
i
=1 tương ứng với đồ vật i được đưa vào i, x
i
=0 tương ứng
với đồ vật i không được đưa vào túi. Tập các xâu nhị phân X =(x
1
,..,x
N
) còn phải thỏa
mãn điều kiện tổng trọng lượng không vượt quá B. Nói cách khác, tập phương án D
của bài toán được xác định như công thức dưới đây.
Hàm mục tiêu của bài toán: Ứng với mỗi phương án X =(x
1
,..,x
N
)D, ta cần tìm
phương án X* =(x*
1
,..,x*
N
) sao cho tổng giá trị sử dụng các đồ vật trong túi lớn
nhất. Do vậy, hàm mục tiêu của bài toán được xác định như sau:
a) Thuật toán sinh
void Next_Bit_String(void) {
int i = n;
while(i > 0 && X[i]) {
X[i] = 0;
i--;
}
if (i > 0) X[i] = 1;
else OK = 0;
}
int Test(void) {
int i, s = 0, p = 0;
for(i = 1; i <= n; i++) {
s = s + A[i]*X[i];
p = p + C[i]*X[i];
}
if (s <= B) return(p);
N
i
iiiN
xBxaXgxxxXD
1
21
1,0;)(:,..,,
max
1
N
i
ii
xcXf

Sign up to view the full document!

lock_open Sign Up
Showing Page:
2/13
2
return(0);
}
void Update_Test(void) {
int p = Test(), i;
if (p > FOPT) {
FOPT = p;
for (i = 1; i <= n; i++)
{ XOPT[i] = X[i];}
}
}
b) Thuật toán quay lui
void update(){
int i;
if(cost>fopt) {
fopt=cost;
for(i=1; i<=n; i++) xopt[i]=x[i];
}
}
void Try(int i){
int j,t;
t=(int) ((w-weight)/a[i]);
for(j=t; j>=0; j--){
x[i]=j;
weight=weight+a[i]*x[i];
cost=cost+c[i]*x[i];
if (i==n) update();
else Try(i+1);
weight=weight-a[i]*x[i];
cost=cost-c[i]*x[i];
}
}

Sign up to view the full document!

lock_open Sign Up
Showing Page:
3/13

Sign up to view the full document!

lock_open Sign Up
End of Preview - Want to read all 13 pages?
Access Now
Unformatted Attachment Preview
I. Bài tập 1. Bài toán cái túi. Một nhà thám hiểm cần đem theo một cái túi trọng lượng không quá B. Có N đồ vật cần đem theo. Đồ vật thứ i có trọng lượng ai, có giá trị sử dụng ci (i=1, 2, .., N; ai, ciZ+). Hãy tìm cách đưa đồ vật vào túi cho nhà thám hiểm sao cho tổng giá trị sử dụng các đồ vật trong túi là lớn nhất Tập phương án của bài toán: Mỗi phương án của bài toán là một xâu nhị phân có độ dài N. Trong đó, xi =1 tương ứng với đồ vật i được đưa vào túi, xi =0 tương ứng với đồ vật i không được đưa vào túi. Tập các xâu nhị phân X =(x1,..,xN) còn phải thỏa mãn điều kiện tổng trọng lượng không vượt quá B. Nói cách khác, tập phương án D của bài toán được xác định như công thức dưới đây. Hàm mục tiêu của bài toán: Ứng với mỗi phương án X =(x1,..,xN)D, ta cần tìm phương án X* =(x*1,..,x*N ) sao cho tổng giá trị sử dụng các đồ vật trong túi là lớn nhất. Do vậy, hàm mục tiêu của bài toán được xác định như sau: a) Thuật toán sinh void Next_Bit_String(void) { int i = n; while(i > 0 && X[i]) { X[i] = 0; i--; } if (i > 0) X[i] = 1; else OK = 0; } int Test(void) { int i, s = 0, p = 0; for(i = 1; i ...
Purchase document to see full attachment
User generated content is uploaded by users for the purposes of learning and should be used following Studypool's honor code & terms of service.

Anonymous
Really helpful material, saved me a great deal of time.

Studypool
4.7
Trustpilot
4.5
Sitejabber
4.4