1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập lớn: Sử dụng phương pháp qui hoạch động giải bài toán cái túi

10 213 6

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 483,18 KB

Nội dung

Bài tập lớn Sử dụng phương pháp qui hoạch động giải bài toán cái túi để giải bài toán cái túi, chúng ta cần dùng phương pháp nào để đạt hiệu quả cao nhất, sử dụng phương pháp quy hoạch động làm tăng hiệu suất trong các thao tác xử lý. Mời các bạn cùng tham khảo!

Trang 1

TR ƯỜ NG Đ I H C H NG Đ C Ạ Ọ Ồ Ứ

KHOA: CNTT & TT

MÔN: PHÂN TÍCH VÀ THI T K  THU T TOÁN Ế Ế Ậ

Đ  TÀI: “S  D NG PH Ề Ử Ụ ƯƠ NG PHÁP QUI HO CH Đ NG GI I Ạ Ộ Ả

BÀI TOÁN CÁI TÚI”

        

       H  và tên       :   Đ  Vi t Vũ ọ ỗ ế

       Mã S  Viên        :   1561030049

       L p       :  K18 –ĐHCNTT

    Giáo viên HD     :  Tr nh Th  Phú ị ị

1

Trang 2

M C L CỤ Ụ

L i m  đ uờ ở ầ

 

    Cùng v i s  phát tri n c a khoa h c kĩ thu t, công ngh  thông tin nói chung vàớ ự ể ủ ọ ậ ệ  

b  môn phân tích và thi t k  thu t toán nói riêng ngày càng độ ế ế ậ ượ ức  ng d ng r ngụ ộ   rãi trong nhi u lĩnh v c. V i m t c  s  d  li u kh ng l , vi c  đ a ra m tề ự ớ ộ ơ ở ữ ệ ổ ồ ệ ư ộ  

phương pháp nh m gi i quy t v n đ  tìm ki m d  li u có hi u qu  và nhanhằ ả ế ấ ề ế ữ ệ ệ ả   chóng nh t luôn đấ ược s  quan tâm c a các nhà phát tri n ph n m m. Thôngự ủ ể ầ ề  

thường có r t nhi u phấ ề ương pháp đ  gi i quy t m t bài toán. Vi c truy su t dể ả ế ộ ệ ấ ữ 

li u ch a đ t hi u qu  cao. S  d ng phệ ư ạ ệ ả ử ụ ương pháp quy ho ch đ ng là m t gi iạ ộ ộ ả   pháp làm tăng hi u su t trong các thao tác x  lý. ệ ấ ử

     V n đ  đ t ra : đ  gi i bài toán cái túi, chúng ta c n dùng phấ ề ặ ể ả ầ ương pháp nào 

đ  đ t hi u qu  cao nh t. Đ  gi i quy t v n đ  trên ta cùng tìm hi u phể ạ ệ ả ấ ể ả ế ấ ề ể ươ  ng pháp quy ho ch đ ng.ạ ộ

Trang 3

I. C  S  LÝ THUY T  Ơ Ở Ế  

1. Khái ni m   

­ Quy ho ch đ ngạ ộ  là m t phộ ương pháp gi m th i gian ch y c a các thu t ả ờ ạ ủ ậ toán th  hi n các tínhể ệ  ch t c a cácấ ủ  bài toán con g i nhauố  (overlapping  subproblem) và c u trúc con t i  uấ ố ư  (optimal substructure). 

2. C   ách ti p c n  ế ậ  

- Top­down (T  trên xu ng): Bài toán đừ ố ược chia thành các bài toán con, các  bài toán con này được gi i và l i gi i đả ờ ả ược ghi nh  đ  phòng trớ ể ường h pợ  

c n dùng l i chúng. Đây là đ  quy và l u tr  đầ ạ ệ ư ữ ược k t h p v i nhau.ế ợ ớ

- Bottom­up (T  dừ ưới lên): T t c  các bài toán con có th  c n đ n đ u đấ ả ể ầ ế ề ượ  c

gi i trả ước, sau đó được dùng đ  xây d ng l i gi i cho các bài toán l n h n.ể ự ờ ả ớ ơ   Cách ti p c n này h i t t h n v  không gian b  nh  dùng cho ngăn x p vàế ậ ơ ố ơ ề ộ ớ ế  

s  l i g i hàm. Tuy nhiên, đôi khi vi c xác đ nh t t c  các bài toán con c nố ờ ọ ệ ị ấ ả ầ   thi t cho vi c gi i quy t bài toán cho trế ệ ả ế ước không được tr c giác l m.ự ắ

3. Các b  ước gi i  m t bài toán v i c u trúc con t i  u  ộ ớ ấ ố ư 

- Chia bài toán thành các bài toán con nh  h n.ỏ ơ

- Gi i các bài toán này m t cách t i  u b ng cách s  d ng đ  quyả ộ ố ư ằ ử ụ ệ  

- S  d ng các k t qu  t i  uử ụ ế ả ố ư  xây d ng m t l i gi i t i  u cho bài toán ban ự ộ ờ ả ố ư

đ u.ầ  

4. Các b  ước gi i m t bài toán quy ho ch đ ngả ộ ạ ộ  

- Tên và ý nghĩa các bi n ph c v  s  đ  l p.ế ụ ụ ơ ồ ặ

- Cách khai báo các bi n đó.ế

- S  đ  (công th c) l p chuy n t  m t bơ ồ ứ ặ ể ừ ộ ước sang bước ti p theo.ế

3

Trang 4

- Giá tr  đ u c a các bi n tham gia tính l p.ị ầ ủ ế ặ

- Tham s  đi u khi n l p: thay đ i t  đâu đ n đâu.ố ề ể ặ ổ ừ ế

- K t qu :   đâu và làm th  nào đ  d n xu t ra.ế ả ở ế ể ẫ ấ

II. BÀI TOÁN CÁI TÚI   

1. Mô hình bài toán   

   Bài toán x p cái túi (hay là bài toán ba lô)ế  là m t bài toán t i  u hóa ộ ố ư  tổ h p. Bàiợ   toán được đ t tên t  v n đ  ch n nh ng gì quan tr ng có th  bặ ừ ấ ề ọ ữ ọ ể ỏ v a vào trongừ  

m t cái túi (v i gi i h n kh i lộ ớ ớ ạ ố ượng) đ  mang theo trong m tể ộ  chuy n đi. Các bàiế   toán tương t  thự ường xu t hi n trong kinh doanh, toán tấ ệ ổ h p, lý thuy t đ  ph cợ ế ộ ứ  

t p tính toán, m t mã h c và toán  ng d ng.ạ ậ ọ ứ ụ

2. Xây d ng h  ự ướng gi i 

a. Nh p và xu t d  li u  ậ ấ ữ ệ  

- Ch n phọ ương án khai báo bi n toàn c c.ế ụ

- Ch n cách nh p d  li u t  bàn phím và xu t b ng tính ra màn hình.ọ ậ ữ ệ ừ ấ ả

b. Xây d ng b ng tính b ng ph  ụ ả ằ ương pháp qui ho ch đ ngạ ộ  

- Hàm m c tiêu f: t ng giá tr  c a cái túi (vali).ụ ổ ị ủ

- Nh n xét: giá tr  c a cái túi ph  thu c vào hai y u t , đó là giá tr  c a cáiậ ị ủ ụ ộ ế ố ị ủ   túi và tr ng lọ ượng c a các đ  v t. Do đó ta có th  dùng m ng hai chi u đủ ồ ậ ể ả ề ể 

l u tr  F[i][j]: là t ng giá tr  l n nh t c a cái túi khi xét t  v t th  1 đ nư ữ ổ ị ớ ấ ủ ừ ậ ứ ế  

v t th  i và tr ng lậ ứ ọ ượng không vượt quá j

- Khi xét đ n f[i][j] thì các giá tr  trên b ng phế ị ả ương án đ u đề ượ ố ư t i  u

Trang 5

- Tính f[i][j] có 3 kh  năng x y ra:ả ả

N u f[i][0] = 0 và f[0][j] = 0.ế

N u a[i] > j thì f[i][j]=f[i­1][j].ế

N u a[i] <= j thì f[i][j ]= max (f[i­1][j],f[i­1][j­a[i]] + c[i]).ế

c. Xây d ng hàm tìm giá tr  l n nh t  ự ị ớ ấ 

- Xây d ng hàm b ng cách so sáng hai giá tr  (hai s ) và đ a ra giá tr  l n ự ằ ị ố ư ị ớ

h n (s  l n h n). ơ ố ớ ơ

d. Xây d ng hàm truy v t tìm ra k t qu  ự ế ế ả 

- Xét t  cu i b ng:ừ ố ả

N u f[i][j] != f[i­1][j] thì xu t giá tr  đó ra.ế ấ ị

III. CH  ƯƠNG TRÌNH BÀI TOÁN CÁI TÚI S  D NGỬ Ụ  

      PHƯƠNG PHÁP QUI HO CH Đ NGẠ Ộ

1. Ch  ương trình 

 #include"stdio.h"

#include"conio.h"

int a[100],W, c[100], f[100][100];

int n,i,j,GT;

// nhap du lieu dau vao

void nhap( ){

printf("\nNhap so luong do vat = "); scanf("%d", &n);

printf("\nNhap khoi luong gioi han do vat = "); 

scanf("%d", &W);

     for( int i = 1; i<= n; i++ ){

printf("\nNhap khoi luong do vat thu %d = ",i);

 scanf("%d", &a[i]);

} for( int i = 1; i<= n; i++ ){

5

Trang 6

printf("\nNhap vao so cong dung cua do vat thu %d = ",i);  scanf("%d", &c[i]);

}

}

// xuat bang tinh

void xuat(){

printf("\n\n       **** BANG TINH****\n");

for(i=1;i<=n;i++){

for(j=0;j<=W;j++){

printf("%5d", f[i][j]);

}

printf("\n");

}

}

// tìm gia tri lon nhat

int max(int a, int b){

return (a>b)?a:b;

}

// hàm tinh gia tri cua bang

int bangphuongan(){

    for(i=0;i<=n;i++){

         f[i][0]=0;

     }

    for(j=0;j<=W;j++){ 

         f[0][j]=0;

     }

    for(i=1;i<=n;i++){

     for(j=1;j<=W;j++){

      if (a[i]<=j){

Trang 7

       f[i][j]=max(f[i­1][j],f[i­1][j­a[i]]+c[i]);

   }

   else{

    f[i][j]=f[i­1][j];

 }

   }

}

}

// hàm tìm ket qua cua bai toan

int truyvet(){

i=n;

j=W;

while ((i!=0)&&(j!=0)){

if (f[i][j]!=f[i­1][j]){

printf("%2d ",i);

GT+=c[i];

j­=a[i];

}

i­­;

  }

}

int main(){

nhap();

printf("\n ****** CAC GIA TRI SAU KHI NHAP*****");

printf("\n Trong luong gioi han cua tui la = %d\n",W);

printf("\n trong luong cua do vat : \n");

  for(i=1;i<=n;i++){

    printf("%4d", c[i]);

}

7

Trang 8

  for(i=1;i<=n;i++){

printf("%4d", a[i]);

} bangphuongan();

xuat();

printf("\n\n Cac do vat duoc cho vao tui la: ", i);

truyvet();

printf("\n\n Tong gia tri toi da cua tui la = %d",W);

    printf("\n\n Tong trong luong cua do vat duoc cho vao tui la= %d", GT);     getch();

    return 0; }

2. Yêu c u khi ch y  ầ ạ 

- Xu t ra đấ ược b ng tính.ả

- Hàm tìm ki m có th  tìm ra đế ể ược k t qu ế ả

IV. DEMO C A BÀI TOÁN CÁI TÚI   

1. D  li u đ u vào  ữ ệ ầ  

Tr ng lọ ượng gi i h nớ ạ W = 10

   S  đ  v t gi i h n ố ồ ậ ớ ạ n = 4

      Giá trị

     Đ  v tồ ậ

Tr ng lọ ượng 

c a đ  v tủ ồ ậ

    Công d ng

        đ  v tồ ậ

Đ  v t th  1ồ ậ ứ 7 9

Đ  v t th  2ồ ậ ứ 4 4

Đ  v t th  3ồ ậ ứ 3 3

Đ  v t th  4ồ ậ ứ 2 1

2. K t qu  ế ả 

a. B ng tính s  d ng ph  ả ử ụ ương pháp QHĐ 

Trang 9

0 0 0 0 0 0 0 9 9 9 9

0 0 1 3 4 4 5 9 9 10 12

b. K t qu  bài toán  ế ả  

      Giá tr  đị ược in    

      Giá tr  c n in       ị ầ

Giá tr  in ra   màn hình

T ng giá tr  t i đa có th  cho vào túi.ổ ị ố ể 10

Đ  v t đồ ậ ược cho vào túi là đ  v t th ồ ậ ứ 3    1

T ng công d ng (tr ng lổ ụ ọ ượng) c a các đ  v tủ ồ ậ  

được cho vào túi 12

V K T LU N  Ế Ậ  

    Sau m t th i gian tìm hi u, nghiên c u và th c hi n đ  tài. Các yêu c u chínhộ ờ ể ứ ự ệ ề ầ  

c a đ  tài c  b n đã hoàn t t v i các n i dung sau:ủ ề ơ ả ấ ớ ộ

1 Ư  u đi m  

Xây d ng đự ược chương trình “ bài toán cái túi” s  d ng ử ụ phương pháp qui 

ho ch đ ng đ  gi i.ạ ộ ể ả

Chương trình s  lý nhanh và tử ương đ i chính xác.ố

2 Khuy t đi m  ế ể  

M c dù r t c  g ng nh ng trong th i gian ng n, kinh nghi m còn h nặ ấ ố ắ ư ờ ắ ệ ạ  

ch  nên k t qu  còn thi u sót c n ti p t c đế ế ả ế ầ ế ụ ược hoàn thi n đ  có thệ ể ể 

gi i đả ược các yêu c u ph c t p h n.ầ ứ ạ ơ

9

Trang 10

Chương trình còn nhi u l i nh : v  v n đ  x   lý hay thu t toán truy v tề ỗ ư ề ấ ề ử ậ ế   (tìm ki m k t qu ) ch a t i  u …ế ế ả ư ố ư

3 H  ướng phát tri n  

Xây d ng hoàn thi n các ch c năng giúp ngự ệ ứ ườ ử ụi s  d ng d  dàng h n,ễ ơ  

phương pháp qui ho ch đ ng tạ ộ ương đ i t i  u và hi u qu  h n.ố ố ư ệ ả ơ

Có th  s  d ng phể ử ụ ương pháp đ  gi i m t s  bài toán tể ả ộ ố ương t ự

    Trên đây là k t qu  đ t đế ả ạ ược cũng nh  còn m t s  t n t i, hư ộ ố ồ ạ ướng phát tri nể  

c a đ  tài.ủ ề

Sinh viên th c hi n.ự ệ

      Đ  Vi t Vũỗ ế

TÀI LI U THAM KH OỆ Ả

1. C m nang thu t toán – cu n 1 – Robert Sedgewich – Tr n Đan Th ẩ ậ ố ầ ư

2.  L p trình = Thu t toán + CTDL, N. Wirth.ậ ậ

Ngày đăng: 15/01/2020, 11:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w