tạp chí khoa học: PHƯƠNG PHÁP QUY HOẠCH ĐỘNG TRONG VIỆC GIẢI MỘT LỚP “CÁC BÀI TOÁN TỐI ƯU ”

9 537 6
tạp chí khoa học: PHƯƠNG PHÁP QUY HOẠCH ĐỘNG TRONG VIỆC  GIẢI MỘT LỚP “CÁC BÀI TOÁN TỐI ƯU ”

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

Thông tin tài liệu

   ( * )  Phương pháp quy hoạch động là một kĩ thuật được áp dụng để giải các bài toán tìm phương án tối ưu . Vậy ý tưởng của phương pháp quy hoạch động thật đơn giản : Để tránh việc tính lại mọi thứ hai lần , ta lưu giữ kết quả đã tìm được vào một mảng làm giả thiết cho việc tìm kiếm những kết quả cho trường hợp sau . Chúng ta sẽ làm đầy dần giá trị của bảng này . Bởi các kết quả của những trường hợp trước đã được giải quyết . Kết quả cuối cùng cũng chính là kết quả cần giải . Quy hoạch động là dùng kĩ thuật đi từ dưới lên . Xuất phát từ trường hợp đơn giản nhất , có thể tìm ngay ra nghiệm bằng cách kết hợp nghiệm của chúng , ta nhận được nghiệm của bài toán cỡ lớn hơn . Cứ như thế ta nhận được đủ nghiệm của bài toán cần tìm .Trong quá trình đi “ Từ dưới lên “ chúng ta sẽ sử dụng một bảng lưu giữ lời giải của các bài toán con đã được giải. Khi giải một bài toán cần đến nghiệm của những bài toán nhỏ hơn ta chỉ việc tìm kiếm trong bảng . Chính vì vậy mà thuật toán “ Quy hoạch động “ là rất có hiệu quả . ABSTRACT Dynamic programming is the method of solving complex problems for optimal solutions. The ideas behind Dynamic programming are very simple: In order to avoid recalculating everything, we store the solutions to the subproblems in a table which is used as a fundamental theory to solve new problems. We will build up the values of the table by adding the solved results of the previous problems. Therefore, the solution to a given optimal problem can be obtained by the combination of optimal solutions to its subproblems. In another word, Dynamic programming holds the strengths of the “divide and rule” principle to high esteem. Dynamic programming applies the Bottom-up approach. On solving the simpler problems, we can use the solutions to build on and arrive at solutions to bigger problems. Hence, we can formulate a complex calculation as a recursive series of simpler calculations. In this approach, we can refer to a tabular form of the results of the solved subproblems. When we have to find out the solutions to the simpler subproblems ,we just look them up in the table. That is why Dynamic programming algorithm is very efficient.  m     ( * ) Th.S,   1 , A 2  n i  .     i 7 8 10 : 1 2 4 6 7                . Nói cách khác     ).                                    . Chính hu. 2.1.  -  2. - . - Các bài toán c. 2.3.   - . -  phân t k    -  í  . -  , tí    -1)  .  BEGIN {Chương trình chính}    END. 4.  4. 4. í í .  quy  .     v , ta có -1) là t(n--1) là d(n-1), -1)--2) và d(n- - thành bài toán. F k , giá t G k . Thì: F k =F k-1 + G k Hay là : F k (t(k))=Max{ G k (t(k),d(k))+F k-1 (t(k-1))} (*)  d(k) 4.3.  - i. .   -   -  k  -  con . F 1 (t(1)) = Max{ G 1 (t(1),d(1))+F 0 (t(0))}  d(1) -   -  -   4.       h   m   : Cho trong  HOA.INP  : -  -  :1 K,j :1 N ; 1KN100.  :  HOA.OUT  -   -  Thí dụ: HOA.INP HOA.OUT 4 6 1 1 6 4 3 10 9 1 4 7 2 7 7 2 6 10 2 3 6 10 7 1 3 9 24 1 3 4 6 Hướng giải:  Ta tiến hành như sau: 5.: Gọi b[i][j] là giá trị thẫm mĩ khi cắm i bó hoa vào j lọ, ta thấy: 5.1.1. No . 5.1.2. N 5.1.3. T.    - -  : b[i-1][j-1]+ V[i][j]. ào (j-  : b[i][j-1]  b[i][j] =Maxb[i -1][j -1]+V[i][j],b[i][j -1]. 5.  Coät j -1 Coät j Doøng i-1 [i -1][j -1] Doøng i [i][j -1] [i][j]  . L[i][j]  ,  -1][j-1]+V[i][j]>b[i][j- -1][j-1]+V[i][j]  -1][j-u : - L[i][j]=L[i-1][j-1]  b[i-1][j-1]+V[i][j]<=b[i][j-1] - án [i][j-1] 5.    - tác : - - -  -      #include<stdio.h> #include<conio.h> #define max 100 #define fi "CAMHOA.INP" #define fo "CAMHOA.OUT" int k,n,v[max][max],b[max][max],kq,vt[max]; // // b[i][j] là giá trị thẩm mỹ khi cắm i bó hoa vào j lọ // void doc(){ FILE *f =fopen(fi,"rt"); fscanf(f,"%d%d",&k,&n); inti=0,j=0; for(i=1;i<=k;i++) for(j=1;j<=n;j++) fscanf(f,"%d",&v[i][j]); fclose(f); } int getmax(int i,int j) { if(i>j) return i; return j; } / void taobang(){ for(int i=1;i<=k;i++) for(int j=i;j<=n-(k-i);j++) b[i][j] = getmax( b[i][j-1] , (b[i1][j1] ) // void trabang(){ int i=k;j=n; kq=b[i][j]; do { while(b[i][j]==b[i][j-1]) j ; vt[i]=j; i ;j ;} while (i>-1); } // void xuat(){ FILE *f=fopen(fo,"wt"); if(kq==-1) fprintf(f,"1"); else { trabang(); fprintf(f,"%d\n",kq); for(inti=1;i<=k;i++) fprintf(f,"%5d",vt[i]); } fclose(f); } // void main(){ doc(); if(n>=k) taobang() ; else kq=-1; xuat();} Bài toán ba lô 2: : Cho N món hàng (N b    D: Cho trong File BALO2.INP  -  -   cách.  Ghi vào File BALO2.OUT  -  -   Hướng giải: Gọi F x ba    If v>=A[k] then F x [k][v]= Max(F x [k-1][v-A[k]]+B[k],F x [k-1][v]) Else F x [k][v]= F x [k-1][v].  x  v k 1 2 3 4 5 6 7 8 9 10 11 12 13 1 0 0 4 4 4 4 4 4 4 4 4 4 4 2 0 0 4 5 5 5 9 9 9 9 9 9 9 3 0 0 4 5 6 6 9 10 11 11 11 15 15 4 0 3 4 5 7 8 9 10 12 13 14 15 15 5 1 3 4 5 7 8 9 10 12 13 14 15 16 Ta có chương trình sau: #include<stdio.h> #include<conio.h> #define max 100 #define fi "BALO2.INP" #define fo "BALO2.OUT" int k,n,a[max],gt[max],b[max][max],vt[max],w,kq; void doc() {  BALO2.INP BALO2.OUT 4 13 3 4 4 5 5 6 2 3 1 1 16 1(3,4) 2(4,5) 3(5,6) 5(1,1) FILE *f=fopen(fi,"rt"); fscanf(f,"%d%d",&n,&w); for(int i=1;i<=n;i++) fscanf(f,"%d%d",&a[i],&gt[i]);fclose(f); } int getmax(int i,int j){ if(i>j)return i; return j; } void taobang(){ int i,j; for(j=1;j<=w;j++) if(a[1]>j) b[1][j]=0; else b[1][j]=gt[1]; for(i=2;i<=n;i++) for(j=1;j<=w;j++) if(j>=a[i]) b[i][j] =getmax(b[i-1][j],(b[i-1][j-a[i]]+gt[i]) ); else b[i][j]=b[i-1][j]; } void trabang(){ int d=n,c=w,tam; kq=tam=b[d][c]; do{ while(b[d][c]==b[d-1][c]) d ; while(b[d][c]==b[d][c-1]) c ; vt[d]=1;c-=a[d]; }while(c>0); } void xuat(){ FILE *f=fopen(fo,"wt"); trabang(); fprintf(f,"%d",kq); for(int i=1;i<=n;i++) if(vt[i]) fprintf(f,"\n %3d (%d,%d)",i,a[i],gt[i]); fclose(f); } void main(){ doc(); taobang(); xuat();   ày.  1. Niclaus Wirth (1981), Bản dịch Algorithms+Data structure 2.  (1996), Cấu Trúc dữ liệu và giải thuật 3.  , Giáo trình cấu trúc dữ liệuhiên. 4. (1995), Cấu trúc dữ liệu + Giải Thuật = Chương Trình, . 5. Tin học và nhà trường 6 năm (1999-2005) .  Thí dụ: HOA.INP HOA.OUT 4 6 1 1 6 4 3 10 9 1 4 7 2 7 7 2 6 10 2 3 6 10 7 1 3 9 24 1 3 4 6 Hướng giải:  Ta

Ngày đăng: 18/01/2015, 00:47

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan