Quy hoạch động trong Pascal

Thứ hai - 10/08/2020 11:41
Nguyên lí “chia để trị” thường đóng vai trò chủ đạo trong việc thiết kế thuật toán: để giải quyết một bài toán lớn, chúng ta chia nó thành nhiều bài toán con có thể giải quyết được độc lập
1. Nguyên lí tối ưu của Bellman
- Trong một dãy tối ưu các lựa chọn thì mọi dây con của nó cũng tối im.
- Điều kiện tối ưu không phụ thuộc vào tiền sử của hệ điều khiển mà chỉ phụ thuộc vào trạng thái tức thời và mục tiêu cuối cùng của hệ điều khiển.

2. Kĩ thuật của qui hoạch động
- Lập chương trình qui hoạch động.
- Lập bảng lưu lại các nghiệm của bài toán con.

3. Triết lí của qui hoạch động
- Nguyên lí “chia để trị” thường đóng vai trò chủ đạo trong việc thiết kế thuật toán: để giải quyết một bài toán lớn, chúng ta chia nó thành nhiều bài toán con có thể giải quyết được độc lập.
- Trong phương pháp qui hoạch động, việc thể hiện nguyên lí này được đẩy đến cực độ.
• Khi không biết chắc cần giải quyết bài toán con nào chúng ta , giải quyết tất cả các bài toán con và lưu trữ những lời giải này với mục đích sử dụng lại chúng theo một sự phôi hợp nào đó để giải quyết các bài toán tổng quát hơn.

4. Hạn chế của phương pháp qui hoạch động
- Không phải lúc nào sự kết hợp lời giải của các bài toán con cũng cho ta lời giải của bài toán lớn hơn.
- Số lượng các bài toán con cần giải quyết và lưu trữ đáp án có thể rất lớn, không thể chấp nhận được.
■ Ví dụ 1:
Cho n đồ vật, đồ vật thứ i có thể tích là V[i] và có giá trị là p[i]. Cần phải quyết định xem nên xếp những vật nào trong n vật trên vào trong một ba lô có thể tích V sao cho tổng giá trị của đồ vật được xếp vào ba lô là cực đại.
Giải
Ta phải tìm [L1 L2, L3, Ln] với L1 {0,1} thỏa:
                    ΣLiVi ≤ V
và ΣLiPi đạt Max.
Đặt M[i,j] là giá trị lớn nhất đạt được của ba lô khi xét đến vật thứ i có thể tích còn lại là j.
Ta có phương trình qui hoạch động:
M[i,j] = Max{M[i-1,j-V[i]] + P[i] ;M[i-1,j])
Chương trình PASCAL đầy đủ như sau:
Program balo:
uses crt;
Const
      MaxVat=50 ;
      MaxKt=100 ;
Var M: Array[0..MaxVat,0..MaxKt] of word;
     v,p: Array[1..MaxVat] of byte;
     Lap: Array[l..MaxVat] of boolean;
     so vat, kt: byte;
Procedure Nhap;
var i: byte;
Begin
    clrscr;
    Writeln(‘CHUONG TRINH XEP BALO') ;
    Writeln(‘…………………………………’);
    fillchar(p,sizeof(p),0);
    fillchar(p,sizeof(v),0);
    Write(Nhap so do vat can xep [1..'<MaxVat,'] :    ') ;
    Readln(sovat);
    Write(‘Nhap the tich balo [1..',MaxKt,’] : ').;readln(Kt);
    For i: = 1 to sovat do
    Begin
             Write(‘Nhap vat thu',i,'[V-$] : ');
              readln(v[i],p[i]) ;
     End;
             Writeln(‘Solving...’);delay(100);
End;
Function GetMax(a,b: word) : Word;
Begin
     if a > b then GetMax : = a else GetMax: = b;
end;
Procedure Taobang;
var i,j : byte;
Begin
     Fillchar(M,Sizeof(m),0) ;
     fillchar(lay,sizeof(lay),false);
     For i : = 1 to sovat do
     For j : = kt down to 1 do
     Begin
          If j - V[i] >= 0 then M[i,j] : = GetMax(M[i-1,j-v[i]] + p[i],
          M[i-1,j])
          Else M[i,j] : = M[i-1,j];
      End;
End;
Procedure InBang;
var i,j : byte;
Begin
     for i: = 0 to sovat do
     Begin
          for j : = 0 to Kt do
          Write(M[i,j] : 3);
          Writeln;
     end;
end;
Procedure TruyHoi;
Var i,1 : byte;
      max : word;
Begin
      Max : = 0;
      for i : = 1 to Kt do
      If Max <- M[sovat,i] then
          Begin
              Max : = M[sovat,i] ;1: = i
          end;
          For i : = sovat down to 1 do
          Begin
               If M[i,1] < > M[i-1,1] then
               Begin
                    Lay [i] : = true;
                    1 : = 1-V[i];
               End;
          End;
    writeln;
    write!('Lay cac vat :’) ;
    For i : = 1 to sovat do
    If lay[i] then write(i: 3);
    Write(‘Gia tri tong cong: ’,Max);
    readln;
end;
Begin
     Nhap;
    Taobang;
    {InBang;}
    Truyhoi;
end.

■ Ví dụ 2: Cho G = (V,E) là đồ thị có hướng. V là tập đỉnh. E là tập cạnh. Mỗi cạnh có độ dài dương, cần tìm đường đi ngắn nhất nối mỗi cặp đỉnh.
Giải
Theo nguyên lí tối ưu của qui hoạch động:
Nếu đường đi ngắn nhất từ i đến j có đi qua k thì phần của đường đi đó từ i đến k và từ k đến j cũng phải ngắn nhất.
Đặt A[i,j] là độ dài đường đi ngắn nhất từ i đến j. Ta xây dựng A như sau:
- Lúc đầu A: = D;
- Sau đó lặp n lần, sau lần lặp thứ k, A sẽ cho độ dài các đường đi ngắn nhất trong các đỉnh |1,2,...,k]. Ta có phương trình qui hoạch động để tính A ở bước k:
Ak[i,j] = Min {Ak-1[i,j], Ak-1[i,k] + Ak-1[k,j]}
Chương trình PASCAL đầy đủ như sau:
           uses crt;
const maxn = 100;
var a: array[1..maxn,1..maxn] of word;
      c: array[1..maxn,1..maxn] of byte;
      dinh dau,dinh cuoi: byte;
      n: byte;
      found: boolean;
      m: byte;
      d: word;
procedure floydbellman;
      var i,j,k : byte;
       begin
           for k: = 1 to n do
           for i: = 1 to n do
           for j: = 1 to n do
                if (a[i,k]+a[k,j]<a[i,j]) then
                     begin
                         a[i,j] : = a[i,k]+a[k,j]
                         a[i,j] : = a[i,j];
                         c[i,j] : = k;
                         c[j,i]: = c[i,j];
                     end;
      end;
Procedure find(i j : byte);
begin
     if (c[i,j] = 0) then
          begin
               if a[i,j] = maxint then found : = false
                esle if moi then write(i: 2,'->');
           end;
    else
        begin
            Find(i,c[i,j]) ;
            Find(c[i,j],j) ;
            Write(j : 2,'->’)
             M : = j;
        end;
Procedure Nhap;
      var i,j : byte;
      d: word;
      f: text;
Begin
      Assign(f,'d: \tp5\Fb.inp');
      Reset(f);
      Readln(f,n);
      For i : = 1 to n do
           Begin
               For j : = 1 to n do
               Read(f,n);
               If d< >0 then A[i,j] : = d;
               Readln(f);
           End;
      Closet (f);
End;
Procedure Xuat;
      Begin
          Repeat
          Writeln;
          Write(‘Nhap dinh dau :');
          Readln(dinh_dau);
          Write(‘Nhap dinh cuoi :’);
          Readln(dinh_cuoi);
          found : = true;
      m : = maxn+1;
fin(dinh_dau,dinh_cuoi);
if not found then writeln(‘khong co duong di tu',dinh_dau,'den',dinh_cuoi,'.')
      else
           begin
               GotoXY(Where-2,Wherey);
               Writeln(‘ ')
           end;
           Write(‘tiep tuc (C/K) ?');
           Until Upcase (readkey) < > 'c';
      end;
Procedure Khoitao;
      var i,j: byte;
      begin
          For i : = 1 to maxn do
          For j : = 1 to maxn do a[i,j] : = maxint
          For i : = 1 to maxn do a[i,i] : = 0;
          FillChar(c,Sizeof(c),0);
      end;
BEGIN
     khoitao;
     Nhap;
     Floydbellman;
     Xuat;
END.
Bản quyền bài viết thuộc về Sachgiai.com. Ghi nguồn Sách giải.com khi đăng lại bài viết này.

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí
Kênh
90Phut TV full HD ⇔ 888new
69VN ⇔ HM88 ⇔ F168 ⇔ 123b ⇔ 566

Vmax ⇔ 78Win ⇔ https://xn88.bio/
GK88 ⇔ SHBET ⇔ 78win ⇔ u888 ⇔ 66b
fo88vic88 ⇔ u888 ⇔ 888p ⇔ 69vn
BL555 ⇔ 99OK ⇔ f168 ⇔ Link MB66
mv66af88 ⇔ 8x bet ⇔ 88AA
789BET ⇔ LC88 ⇔ BL555 ⇔ 789f
999slot ⇔ 789F ⇔ MB66 ⇔ 8xbet
https://789betcom0.com/ ⇔ https://hi88.baby/
789BET ⇔ au88 ⇔ go8 ⇔ https://xx88.ink/
zo88 ⇔ ev99 ⇔ 888b ⇔ go88 ⇔ kèo nhà cái
cm88 ⇔ 88aa ⇔ Kkwin ⇔ tv88 ⇔ 89bet
mb66.racing ⇔ 88go ⇔ FO88 ⇔ 88xx
188v ⇔ f168 ⇔ QQ88 ⇔ bk8 ⇔ bk8
99ok ⇔ f168 ⇔ iwinclub ⇔ vn88 ⇔ 69vn
m88 ⇔ 56win ⇔ P3 ⇔ 8s ⇔ RWIN
vn23 ⇔ SHBET ⇔ kubet ⇔ 888new
BL555 ⇔ hi88 ⇔ https://fun88.social/
thabet ⇔ SV88 ⇔ https://vnalo789c.com/
https://qq88.fun/ ⇔  ⇔ 888New ⇔ QQ88
daga ⇔ SHBET ⇔ keo nha cai ⇔ bl-555.site
https://bshbet.com/ ⇔ https://uk88.rocks
kkwin ⇔ KUWIN ⇔ 8xbet ⇔ RR88 ⇔ 188v
mb6678win ⇔ https://hello8880.net/
tv88UU88 ⇔ HM88 ⇔ mb 66 ⇔ TV88
NOHU ⇔ 77ball ⇔ 32win ⇔ Kuwin
ek333 ⇔ xoso66 ⇔ nổ hũ ⇔ SUN WIN
X88 ⇔ 78win ⇔ Jun88 ⇔ uu88 ⇔ 6FF
88i ⇔ KINGFUN ⇔ https://789club24.com/
https://98winlive.com/ ⇔ Game bài đổi thưởng
https://bet88yk.com/ ⇔ https://alo789apk.app/
https://33win100.com/ ⇔ https://u888ny.com/
alo789 ⇔ OK8386 ⇔ x88 ⇔ SHBET
https://hi88.voyage/ ⇔ https://79kings.blue/
https://dom88.jp.net/ ⇔ https://hello880.net/
https://789club60.com/ ⇔ https://blc88.net/
23win ⇔ 6ff ⇔ uu88 ⇔ xoso66 ⇔ bomwin
nhatvip ⇔ https://789club24.com/ ⇔ 789 bet
dola789 ⇔ 8xbet ⇔ 78win ⇔ QQ88
XX88 ⇔ ev99 ⇔ 69vn ⇔ rr88 ⇔ rr88
Uu88 ⇔ win456 ⇔ Tài xỉu online ⇔ XN88
https://33win101.com/ ⇔ oxbet ⇔ Slot365
78wind.com ⇔ bet88 ⇔ XX88
VN88 ⇔ 789BET ⇔ OKFUN ⇔ ee88 ⇔ 12bet
hitclub ⇔ Kkwin ⇔ VankhanhTV ⇔ XN88
3WIN ⇔ WIN678 ⇔ KUWIN ⇔ 58WIN
68 game bàiEE88 ⇔ https://taixiu88.pro/
888new.lol ⇔ ok9 football ⇔ K8CC
https://hi88o.com/ ⇔ https://hi88.gives/
https://qq88.co.com/ ⇔ 68 game bài
8xbet ⇔ https://shbetk.net/ ⇔ RIKVIP ⇔ rikvip
https://mm88.us.com/ ⇔ 79king
ww88 ⇔ https://78win.bot/ ⇔ https://13win.vegas/
https://lc88o.com/ ⇔ https://hi88.uno/
https://58win1.info/ ⇔ j88 ⇔ j88 ⇔ 69vn
Slot365 ⇔ alo88 ⇔ UU88 ⇔ 32 win
888TO ⇔ wstar77 ⇔ 73bet ⇔ 888b
11uu ⇔ 123B ⇔ 78win ⇔ Slot365
789f ⇔ mv88 ⇔ 789f ⇔ Bsport
888New ⇔ EV99 ⇔ u88 ⇔ sunwin
tỷ lệ kèo nhà cái hôm nay ⇔ BIN88
https://f8bet0.world ⇔ https://qq88.studio/
https://nh8811.com/ ⇔ Leo88 ⇔ 78win
EV99 ⇔ 3win ⇔ https://cakhiatv88.net/
7m ⇔ i9 Bet ⇔ Tv88 ⇔ hi88 ⇔ 888To
789pu.comhi88 ⇔ au88 ⇔ VN168
EV99 ⇔ socolive ⇔ bet88 ⇔ 555WIN
https://au88.black/ ⇔ trực tiếp bóng đá
https://king88clb.com/ ⇔ https://f168hi.com/
sv66ax88 ⇔ 88clb ⇔ Nn88
https://32win.vc/ ⇔ 888new ⇔ PG88 ⇔ PG88
EE88 ⇔ SanClub ⇔ F168 ⇔ QQ88
hb88 ⇔ Vin777 ⇔ SV388 ⇔ MV66 ⇔ 23WIN
https://vankhanhtvv.com/ ⇔ Nhà Cái LC88
https://789fnew.com/ ⇔ https://u888lm.com/
https://sv66.coupons/ ⇔ https://f168.tech/
https://8kbetbh.com/ ⇔ https://ta88club.kim/
socolivemv88 ⇔ https://rr88.com.se/
https://bet168.com.co/ ⇔ https://8kbet.co/
https://888b-link.cc/ ⇔ https://sunwinn.deal/
88gokingfun ⇔ https://bong88vn.wiki/
SHBET ⇔ https://shbet.racing/
RR99 ⇔ U888 ⇔ OK8386 ⇔ Mv88
MM88 ⇔ 33win ⇔ BL555 ⇔ 69vn
hi88com ⇔ https://w88link1.com/
xocdia88 ⇔ 77ball ⇔ vuabet88 ⇔ betvisa
https://fun88link0.com/ ⇔ https://fun88link1.com/
https://188betlink0.com/ ⇔ https://188betlink1.com/
https://188betlink2.com/ ⇔ https://w88link0.com/
thabet ⇔ 888P ⇔ 11UU ⇔ EV88 ⇔ 789F
69vn77win ⇔ xx88 ⇔ 78win
https://okfun.bz/ ⇔ https://daga88.beer/
QQ88 ⇔ https://i9betz4.com/ ⇔ Kuwin
w88link2.com ⇔ w88link3.com ⇔ 32WIN
https://8dayvip.mobi/ ⇔ https://8dayvip.com/
86bet ⇔ t88 ⇔ af88 ⇔ U888 ⇔ 86bet
https://pg99yk.com/ ⇔ https://u888wl.com/
89bet ⇔ 888new ⇔ 88AA ⇔ GK88
78win01 ⇔ GO99 ⇔ BET88 ⇔ 99win ⇔ TT88
https://8kbettt.com/ ⇔ https://86bet.tech/
https://789betca.com/ ⇔ https://fly88.gifts/
lc88 ⇔ VN88 ⇔ 69vn ⇔ nh88 ⇔ vn88
Tv88 ⇔ 88vv ⇔ sv388 ⇔ KWIN
tỷ lệ kèo nhà cái 88 ⇔ PG66 ⇔ 68win
BL555 ⇔  ⇔ SV388 ⇔ SHBET ⇔ hitclub
MAX79 ⇔ UU88 ⇔ HM88 ⇔ TV88
https://bet88.ventures/ ⇔ bongdalu22.com
zx88 ⇔ ev99 ⇔ 8s ⇔ bet8s ⇔ QQ88
https://f168.name/ ⇔ https://13wincom.io/
Nhà cái vn88 ⇔ Nhà Cái QQ88
https://fb888.in.net/ ⇔ https://kjc.ac/
https://onbet.in.net/ ⇔ link vn88 ⇔ HZ88
http://58win.trading/ ⇔ https://qq88.gives/
bong88 ⇔ sky88 ⇔ Cổng game rikvip ⇔ ev99
79KING ⇔ Bet88 ⇔ XN88 ⇔ i9bet ⇔ VN23
https://kkwin.fan/ ⇔ https://555win.bike/
https://f8bet.courses/ ⇔ https://go8play.com/
https://lc88.bar/ ⇔ 789f ⇔ abc8 ⇔ good88
789win ⇔ Hitclub ⇔ https://f8bet80.one/
lương sơn tv ⇔ vwin ⇔ sut88 ⇔ vua88
hb88 ⇔ https://okfun.center/ ⇔ 68win
LC88 ⇔ 79king ⇔ https://hi88.tours/
https://ok9.charity/ ⇔ https://kkwin68.info/
https://ee88com.me/ ⇔ https://new88blog.org
nổ hũ ⇔ https://uu88vn.com ⇔ nhà cái LC88
nohu ⇔ lc88 com ⇔ 69VN ⇔ Ok365 ⇔ 6FF
Nohu90 ⇔ go8 ⇔ 22vip ⇔ af88 ⇔ 86bet
five88 ⇔ 68win ⇔ 11uu ⇔ https://go8.beer/
đánh bài tiến lên ⇔ sin88 ⇔ 9win ⇔ 88i
https://u888.ac/ ⇔ https://king88com.uk.net/
https://shbet.gg/ ⇔ LC88 ⇔ OKKING
13win ⇔ https://88fc0.com/ ⇔ abc8 ⇔ U888
https://s666.garden ⇔ https://fly88.select/
https://bk8co.net/ ⇔ bet88 ⇔ F168
https://qq8876.net/ ⇔ hi88s com ⇔ f168
https://88xx.mobi/ ⇔ bet88 ⇔ 88clb
GO8 ⇔ https://qq88.social/ ⇔ LC88
https://j88vm.com/ ⇔ https://78winvina.com/
https://luongson161.tv/ ⇔ https://savinovineyards.com/
https://okfun.cfd/ ⇔ https://keonhacai.deals/
https://j88com.today/ ⇔ 28bet ⇔ MB66
https://mk8th.net/ ⇔ https://58win.faith/
Jun88 ⇔ 188v ⇔ https://s8.surf/
https://jun88.school/ ⇔ https://qq887p.com/
https://hi88.biz/ ⇔
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây