một số bài toán về quy hoạch động tiêu biểu

11 1.3K 4
một số bài toán về quy hoạch động tiêu biểu

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trng THPT Chuyờn Vừ Nguyờn Giỏp MT S BI TON QHD TIấU BIU 1. Khỏi nim v phng phỏp quy hoch ng: Phng phỏp quy hoch ng dựng gii bi toỏn ti u cú bn cht quy, tc l vic tỡm phng ỏn ti u cho bi toỏn ú cú th a v tỡm phng ỏn ti u ca mt s hu hn cỏc bi toỏn con. éi vi mt s bi toỏn quy, nguyờn lý chia tr (divide and conquer) thng úng vai trũ ch o vic thit k thut toỏn. é gii quyt mt bi toỏn ln, ta chia nú thnh nhiu bi toỏn cựng dng vi nú cú th gii quyt c lp. Trong phng ỏn quy hoch ng, nguyờn lý chia tr cng c th hin rừ: Khi khụng bit phi gii quyt nhng bi toỏn no, ta s i gii quyt ton b cỏc bi toỏn v lu tr nhng li gii hay ỏp s ca chỳng vi mc ớch s dng li theo mt s phi hp no ú gii quyt nhng bi toỏn tng quỏt hn. éú chớnh l im khỏc gia Quy hoch ng v phộp phõn gii quy v cng l ni dung phng phỏp quy hoch ng: - Phộp phõn gii quy bt u t bi toỏn ln phõn thnh nhiu bi toỏn v i gii tng bi toỏn ú. Vic gii tng bi toỏn li a v phộp phõn tip thnh nhiu bi toỏn nh hn v li i gii cỏc bi toỏn nh hn ú bt k nú ó c gii hay cha. - Quy hoch ng bt u t vic gii tt c cỏc bi toỏn nh nht (bi toỏn c s) t ú tng bc gii quyt nhng bi toỏn ln hn, cho ti gii c bi toỏn ln nht (bi toỏn ban u). Bi toỏn gii theo phng phỏp quy hoch ng gi l bi toỏn quy hoch ng. Cụng thc phi hp nghim ca cỏc bi toỏn cú nghim ca bi toỏn ln gi l cụng thc truy hi ca quy hoch ng. Tp cỏc bi toỏn cú li gii t ú gii quyt cỏc bi toỏn ln hn gi l c s quy hoch ng. Khụng gian lu tr li gii cỏc bi toỏn tỡm cỏch phi hp chỳng gi l bng phng ỏn ca quy hoch ng. Trc ỏp dng phng phỏp quy hoch ng ta phi xột xem phng phỏp ú cú tha nhng yờu cu di õy khụng: Giáo viên: Trần Lơng Vơng Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp - Bi toỏn ln phi phõn ró c thnh nhiu bi toỏn con, m s phi hp li gii ca cỏc bi toỏn ú cho ta li gii ca bi toỏn ln. - Vỡ quy hoch ng l i gii tt c cỏc bi toỏn con, nờn nu khụng khụng gian vt lý lu tr li gii (b nh, a, ) phi hp chỳng thỡ phng phỏp quy hoch ng cng khụng th thc hin c. - Quỏ trỡnh t bi toỏn c s tỡm li gii bi toỏn ban u phi qua hu hn bc. Cỏc bc ci t mt chng trỡnh s dng quy hoch ng: - Gii tt c cỏc bi toỏn c s (thụng thng rt d), lu cỏc li gii vo bng phng ỏn. - Dựng cụng thc truy hi phi hp nhng li gii ca cỏc bi toỏn nh ó lu bng phng ỏn tỡm li gii ca cỏc bi toỏn ln hn ri lu chỳng vo bng phng ỏn. Cho ti bi toỏn ban u tỡm c li gii. - Da vo bng phng ỏn, truy vt tỡm nghim ti u. Cho ti nay, cha cú mt nh lý no cho bit mt cỏch chớnh xỏc nhng bi toỏn no cú th gii quyt hiu qu bng quy hoch ng. Tuy nhiờn bit c bi toỏn cú th gii bng quy hoch ng hay khụng, ta cú th t cõu hi: 1. Mt nghim ti u ca bi toỏn ln cú phi l s phi hp cỏc nghim ti u ca cỏc bi toỏn hay khụng? 2. Liu cú th no lu tr c nghim cỏc bi toỏn di mt hỡnh thc no ú phi hp tỡm c ngim bi toỏn ln?. 2. Cỏc bc c bn gii mt bi toỏn quy hoch ng: Vi mi bi toỏn ng dng gii thut quy hoch ng, ta phi tr li rừ rng, chớnh xỏc cõu hi: Tờn v ý ngha cỏc bin phc v s lp, Cỏch khai bỏo cỏc bin ú, S (cụng thc) lp chuyn t mt bc sang bc tip theo, Giỏ tr u ca cỏc bin tham gia tớnh lp, Tham s iu khin lp: thay i t õu n õu, Kt qu: õu v lm th no dn xut ra. Cỏc cỏch tr li khỏc s dn n nhng gii thut khỏc c v cỏch thc hin ln phc tp. Giáo viên: Trần Lơng Vơng Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp 3. Vớ d v cỏc bi toỏn cú th gii bng phng phỏp quy hoch ng 3.1. Bi toỏn Tớnh N! GT.PAS n=0 nu n>0 n *(n 1)! Ta cú nh ngha nh sau: n! = Cho mt s nguyờn dng n (0 n 13). Yờu cu: Hóy tớnh n! bng phng phỏp quy hoch ng (lp bng phng ỏn). D liu vo: Ghi file bn GT.INP cú cu trỳc nh sau: - Dũng 1: Ghi s nguyờn dng n. D liu ra: Ghi file bn GT.OUT theo cu trỳc nh sau: - Dũng 1: Ghi giỏ tr tớnh c ca n! Vớ d: GT.INP GT.OUT Thut toỏn: Gi GT[i] l giỏ tr ca i! (0 i 13) Ta cú cụng thc quy hoch ng nh sau: GT[i] := GT[i-1]*i; Nh vy, vic tớnh n! s c thc hin bng vũng lp: GT[0] :=1; For i:=1 to n GT[i] := GT[i-1]*i; Kt qu: giỏ tr ca n! nm phn t GT[n]. 3.2. Bi toỏn Tớnh dóy Fibonaci FIBO.PAS n = or n = 1 nu n >1 F (n 1) + F (n 2) Ta cú nh ngha nh sau: F(n) = Cho mt s nguyờn dng n (0 n 50). Yờu cu: Hóy tớnh F(n) bng phng phỏp quy hoch ng (lp bng phng ỏn). D liu vo: Ghi file bn FIBO.INP cú cu trỳc nh sau: - Dũng 1: Ghi s nguyờn dng n. D liu ra: Ghi file bn FIBO.OUT theo cu trỳc nh sau: - Dũng 1: Ghi giỏ tr tớnh c ca F(n). Vớ d: FIBO.INP FIBO.OUT Giáo viên: Trần Lơng Vơng Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp Thut toỏn: Gi F[i] l giỏ tr Fibonaci ca fi (0 i 50). Ta cú cụng thc quy hoch ng nh sau: F[i] := F[i-1] + F[i-2]; Nh vy, vic tớnh fn c thc hin bng vũng lp: F[0] := 0; F[1] := 1; For i := to n F[i] := F[i-1] + F[i-2]; Kt qu: giỏ tr fn nm F[n]. 3.3. Bi toỏn Tớnh tng ca dóy s SUM.PAS Cho dóy s nguyờn gm n phn t a1, a2, , an (1 n 105) v hai s nguyờn dng p v q (1 p q n). Yờu cu: Hóy tớnh tng ca cỏc phn t liờn tip t ap aq bng phng phỏp quy hoch ng (lp bng phng ỏn). D liu vo: Ghi file bn SUM.INP cú cu trỳc nh sau: - Dũng 1: Ghi s nguyờn dng n v k, hai s c ghi cỏch mt du cỏch. - Dũng 2: Ghi n s nguyờn a1, a2, , an, cỏc s c ghi cỏch ớt nht mt du cỏch (-32000 32000). - Dũng th i k dũng tip theo: Mi dũng ghi hai s nguyờn dng pi v qi, hai s c ghi cỏch mt du cỏch (1 pi qi n). D liu ra: Ghi file bn SUM.OUT theo cu trỳc nh sau: - D liu c ghi trờn k dũng: Dũng th i ghi mt s nguyờn l tng giỏ tr ca cỏc phn t on a p .aq i i Vớ d: SUM.INP 2 -3 Giáo viên: Trần Lơng Vơng SUM.OUT 21 Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp Thut toỏn: Gi A[i] l giỏ tr ca phn t th i dóy s a1, a2, , an. Gi T[i] l tng giỏ tr cỏc phn t a1, a2, , (1 i n). Ta cú cụng thc quy hoch ng tớnh T[i] nh sau: T[i] := T[i - 1] + A[i]; Nh vy, vic tớnh T[n] c thc hin bng vũng lp: T[0] := 0; For i:=1 to n T[i] := T[i - 1] + A[i]; Kt qu: Tng cỏc phn t liờn tip t ap n aq c tớnh theo cụng thc: Sum := A[q] - A[p-1]; 3.4. TRIANGLE PASCAL (Tam giỏc Pascal) TRIANPAS.PAS Tam giỏc Pascal l mt mụ hỡnh dựng a cỏc h s ca khai trin nh N thc Newton bc N (x+1) . 2 3 Vớ d: khai trin (x+1) = x + 2x +1 1 cú cỏc h s l 1 1 0 Trong khai trin (x+1)3 = x3 + 3x2 + 3x + cú cỏc h s l 3 Yờu cu: Hóy tỡm cỏc h s khai trin nh thc Newton (x + 1)N. D liu vo: Cho file bn TRIANPAS.INP cú cu trỳc nh sau: Dũng 1: Ghi s nguyờn dng N (1 N 100). D liu ra: Ghi file bn TRIANNUM.OUT theo cu trỳc: Dũng 1: Ghi cỏc s nguyờn dng ln lt l cỏc h s khai trin nh thc Newton (x + 1)N, cỏc s c ghi cỏch mt du cỏch. Vớ d: TRIANPAS.INP TRIANPAS.OUT 5 10 10 Thut toỏn: + Ta xõy dng mng hai chiu cú kớch thc [0 100, 101] + S dng phng phỏp quy hoch ng vi cụng thc nh sau: Giáo viên: Trần Lơng Vơng Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp Dũng th i c tớnh thụng qua dũng i-1 L[i, j] = L[i-1, j-1] + L[i-1, j] + Thut toỏn c th nh sau: L[0,1] = 1; L[1,1] = 1; L[1,2] = 1; For i:= to N Begin L[i, 1] :=1; For j:=2 to i+1 L[i, j] = L[i-1, j-1] + L[i-1, j]; End; + Kt qu c lu tr dũng N, c th: L[N, 1], L[N, 2], L[N, 3], ., L[N, N], L[N,N+1] 3.5. TRIANGLE NUMBER (Tam giỏc s) TRIANNUM.PAS Cho tam giỏc s nh hỡnh v. Ta nh ngha mt ng i tam giỏc s l ng i xut phỏt t hỡnh thoi nh tam giỏc v i n c cỏc hỡnh thoi cú 6 chung cnh vi nú, ng i kt thỳc gp mt hỡnh thoi ỏy tam giỏc. Yờu cu: Hóy tỡm mt ng i tam giỏc s cho tng giỏ tr ca cỏc ụ ng i cú giỏ tr ln nht. D liu vo: Cho file bn TRIANNUM.INP cú cu trỳc nh sau: Dũng 1: Ghi s nguyờn dng N l s hng ca tam giỏc (1 N 100). Dũng th i N dũng tip theo: Ghi i s nguyờn dng ln lt l giỏ tr ca cỏc ụ trờn dũng th i tng ng tam giỏc (Cỏc s cú giỏ tr khụng quỏ 32000). Cỏc s c ghi cỏch mt du cỏch. D liu ra: Ghi file bn TRIANNUM.OUT theo cu trỳc: Dũng 1: Ghi s nguyờn dng S l tng giỏ tr ca ng i tỡm c. Vớ d: TRIANNUM.INP Giáo viên: Trần Lơng Vơng TRIANNUM.OUT Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp 7 48 6 Thut toỏn: + Ta xõy dng mng hai chiu cú kớch thc [1 100, 101] + S dng phng phỏp quy hoch ng vi cụng thc nh sau: Dũng th i c tớnh thụng qua dũng i-1 L[i, j] = Max(L[i-1, j-1] + L[i-1, j]) + A[i, j] + Thut toỏn c th nh sau: L[1, 1] = A[1, 1]; For i:= to N Begin For j:=1 to i L[i, j] = Max(L[i-1, j-1] + L[i-1, j]) + A[i, j]; End; + Kt qu c lu tr dũng N, c th: Tong: = L[N, 1] For j:= to N if (L[N, j] > Tong) then Tong := L[N, j]; 4. Cỏc bi nõng cao ỏp dng phng phỏp quy hoch ng gii 4.1. Bi toỏn C t DUMBBELL.??? Rốn luyn th lc bng cỏch nõng t thu hỳt c s chỳ ý ca rt nhiu bn tr. T l mt trc cú gn hai u cỏc a t. B a t phũng bao gm cỏc loi 1kg, 2kg, 5kg, 10kg, 15kg v 20kg vi s lng mi loi l nhiu. Cỏc a t hai u c gn i xng Giáo viên: Trần Lơng Vơng Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp m bo t c cõn. Mi ngi, tựy theo th lc ca mỡnh, lp cỏc a t cú trng lng phự hp. iu chnh trng lng, ngi ta thỏo cỏc a ngoi cựng, lp cỏc a mi vo. Do tớnh i xng ca t, ta ch xột cỏc thao tỏc iu chnh mt u. Hin ti mt u ang cú n a t gn vo trc (1 n 10), tớnh t ngoi a th i cú trng lng pi. Bn cn cú t vi trng lng mt u l w (0 w 100). Vớ d, hin ti n = v cỏc a t l (2, 2, 1, 20), bn cn iu ch trng lng thnh 14kg. Bn s phi thc hin thao tỏc thỏo lp: thỏo a 20kg, thỏo a 1kg v lp a 10kg. Yờu cu: Cho n, pi, i = ữ n, w. Hóy xỏc nh s thao tỏc ớt nht cn thc hin. D liu vo: Cho file bn DUMBBELL.INP cú cu trỳc nh sau - Dũng 1: Ghi s nguyờn n. - Dũng 2: Ghi n s nguyờn p1, p2, . . ., pn, cỏc s c ghi cỏch ớt nht mt du cỏch. - Dũng 3: Ghi s nguyờn w. D liu ra: Ghi file bn DUMBBELL.OUT theo cu trỳc nh sau: - Dũng 1: Ghi s thao tỏc cn thc hin. Vớ d: DUMBBELL.INP DUMBBELL.OUT 2 20 14 Thut toỏn: Ta to bng phng ỏn B, Bi xỏc nh s ln lp a ti thiu lm tng trng lng lờn i kg. Var b:array[0 100] of byte; Vic xỏc nh Bi (i = ữ 100) khỏ n gin: t := i div 20; j := i mod 20; t := t + j div 15; j := j mod 15; t := t+j div 10; j := j mod 10; t:= t+j div 5; j := j mod 5; Giáo viên: Trần Lơng Vơng Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp t:= t+j div 2; j := j mod 2; B[i]:= t+j ; Nu s dng mng hng C vi Ci l s ln lp a ti thiu lm tng trng lng lờn i kg (i = ữ 19). C :array[0 19] of byte; = (0, 1, 1, 2, 2, 1, 2, 2, 3, 3, 1, 2, 2, 3, 3, 1, 2, 2, 3, 3); Vic tớnh Bi (i:= ữ 100) lỳc ny ch cn s dng vũng lp: For i:=0 to 19 B[i]:=C[i]; For i:= 20 to 100 B[i]:= i div 20 + B[i mod 20]; Li gii ca bi toỏn cú th nhn c bng cỏch duyt tt c cỏc cỏch thỏo ln lt a t n, n-1, n-2, . . ., 2, 1. Bng phng ỏn cũn l cụng c sc bộn vi cỏc loi bi toỏn liờn quan ti phỏt hin, nhn dng chu trỡnh. Nú giỳp ta t c hiu qu O(n) v nhiu trng hp O(1)! 4.2. Bi toỏn Th nht c rt CARROT.??? Cỏc thỳ nuụi chung bỏch thỳ thng ớt cú iu kin ng. iu ny va cú hi cho sc khe ca thỳ nuụi, va lm lm gim hng thỳ ca khỏch tham quan. khc phc iu ú, Ban giỏm c cho t mt cỏi thang cú n bc chung th. n gi cho n ngi ta t c rt - th khoỏi khu nht ca th, lờn bc trờn cựng ca thang. Th phi nhy theo cỏc bc thang ly c rt. Mi bc nhy th cú th vt c k bc (1 k n 300). Cú th cú nhiu cỏch nhy ly c rt. Hai cỏch nhy gi l khỏc nu tn ti mt bc th ti c mt cỏch nhy v b b qua cỏch kia. Vớ d, vi n = v k = cú tt c cỏch ly c rt khỏc nhau: 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2, 1+3, 3+1. Yờu cu: Cho k v n. Hóy xỏc nh s cỏch khỏc th cú th thc hin ly c rt. D liu vo: Ghi file bn CARROT.INP cú cu trỳc nh sau: - Dũng 1: Ghi s nguyờn dng t l s lng cp k v n (1 t 50). - Dũng th i t dũng tip theo: Mi dũng ghi s nguyờn k v n. Giáo viên: Trần Lơng Vơng Trang Trng THPT Chuyờn Vừ Nguyờn Giỏp D liu ra:: Ghi file bn CARROT.OUT, kt qu mi test a trờn mt dũng di dng s nguyờn. Vớ d: CARROT.INP CARROT.OUT 13 21 27 274 10 Thut toỏn: õy l bi toỏn ỏp dng s tớnh lp tớch ly kt qu. Loi s ny cú bn cht rt gn vi gii thut quy hoch ng nờn nhiu ngi ta cng gp nú vo bi toỏn cú thut gii quy hoch ng. Ta cú thut toỏn nh sau: a) Gi fi l s cỏch m th cú th nhy ti bc th i ca thang, i b) Cụng thc lp (cỏch tớnh fi): fi = f j =i k j For i:=1 to n For j:= i - k to i F[i] := F[i] + F[j]; c) Giỏ tr u: Cn cú k giỏ tr ban u trin khai cụng thc lp. Cú th chn mt hai cỏch: i 1. Tớnh riờng fi (i = ữ k) theo cụng thc f0=1, fi = f j =1 j F[0] := 1; For i:=1 to k For j:=1 to i-1 F[i] := F[i] + F[j]; Lỳc ny ta cú th tc tớnh nh sau: Procedure Process; Var i, j:Longint; Begin F[0] := 1; For i:=1 to k Giáo viên: Trần Lơng Vơng Trang 10 Trng THPT Chuyờn Vừ Nguyờn Giỏp For j:=1 to i-1 F[i] := F[i] + F[j]; For i:=k+1 to n For j:= i - k to i F[i] := F[i] + F[j]; End; 2. Cho f0 = 1, fi = 0, i = -k+1 ữ -1, d) Khai bỏo: Nu ỏp dng cỏch chun b giỏ tr u th thỡ cn khai bỏo: Var f:array[-300 300] of int64; Procedure Process; Var i, j:Longint; Begin F[0] := 1; For i:=-k+1 to -1 F[i] := 0; For i:= to n For j:= i - k to i F[i] := F[i] + F[j]; End; e) Nu s dng cỏch chun b giỏ tr u th thỡ phi tớnh vi i = ữ n, f) Kt qu: giỏ tr fn. Lu ý: - Bi toỏn ny cú th ỏp dng gii thut tỡm kim quay lui (Back Tracking). - Kiu d liu õy cha tht quan trng, nú s c xỏc nh chớnh xỏc quỏ trỡnh hiu chnh chng trỡnh, th nghim vi k = n =300. Trn Lng Vng Giáo viên: Trần Lơng Vơng Trang 11 [...]... to -1 do F[i] := 0; For i:= 1 to n do For j:= i - k to i – 1 do F[i] := F[i] + F[j]; End; e) Nếu sử dụng cách chuẩn bị giá trị đầu thứ 2 thì phải tính với i = 1 ÷ n, f) Kết quả: giá trị fn Lưu ý: - Bài toán này có thể áp dụng giải thuật tìm kiếm quay lui (Back Tracking) - Kiểu dữ liệu ở đây chưa thật quan trọng, nó sẽ được xác định chính xác trong quá trình hiệu chỉnh chương trình, khi thử nghiệm với . Giáp - Bài toán lớn phải phân rã được thành nhiều bài toán con, mà sự phối hợp lời giải của các bài toán con đó cho ta lời giải của bài toán lớn. - Vì quy hoạch động là đi giải tất cả các bài toán. một cách chính xác những bài toán nào có thể giải quy t hiệu quả bằng quy hoạch động. Tuy nhiên để biết được bài toán có thể giải bằng quy hoạch động hay không, ta có thể đặt câu hỏi: 1. Một. thức nào đó để phối hợp tìm được ngiệm bài toán lớn?”. 2. Các bước cơ bản để giải một bài toán quy hoạch động: Với mỗi bài toán ứng dụng giải thuật quy hoạch động, ta vẫn phải trả lời rõ ràng,

Ngày đăng: 27/09/2015, 06:08

Từ khóa liên quan

Mục lục

  • 2. Các bước cơ bản để giải một bài toán quy hoạch động:

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

Tài liệu liên quan