Nhêi nãi ®Çu : Quy ho¹ch ®éng lµ mét ph¬ng ph¸p h÷u hiÖu ®Ó gi¶i quyÕt mét bµi to¸n tèi u. Nh÷ng bµi gi¶i b»ng QH§ ®Òu cho kÕt qu¶ tèt vÒ c¶ ®¸p sè lÉn thêi gian. Nhng ®Ó ph¸t hiÖn ra vµ cµi ®Æt tèt mét bµi quy ho¹ch ®éng lµ rÊt khã kh¨n. Thêng th× chóng ta hay tiÕp cËn víi nh÷ng bµi to¸n QH§ mµ ®äc lªn ®· cã ngay d¹ng hay ph¬ng ph¸p gi¶i, nhng nh vËy lµ cha ®ñ bëi lÏ QH§ kh«ng dõng l¹i ë ®ã. Chóng ta chØ cã thÓ gi¸c ngé t tëng ®Ó gi¶i mét bµi QH§ chø chóng ta kh«ng thÓ häc hÕt ®îc toµn bé mäi ph¬ng ph¸p quy ho¹ch. tËp bµi nµy còng vËy, cã lÏ nã còng chØ cho ta biÕt vµ h×nh dung nho nhá vÒ mét sè phu¬ng ph¸p QH§ vµ nh÷ng kinh nghiÖm khi lµm mét bµi to¸n quy ho¹ch mµ t«i rót ra qua qu¸ tr×nh häc tËp và gi¶ng d¹y. TËp QH§ nµy gåm c¸c phÇn : PhÇn 1: Mét sè kinh nghiÖm khi lµm QH§ PhÇn 2: Mét sè bµi to¸n QH§ c¬ b¶n PhÇn 3: C¸c bµi luyÖn vÒ QH§ PhÇn 4: Híng dÉn gi¶i bµi luyÖn QH§ C¸c bµi tËp mét sè thuéc qu¸ tr×nh häc tËp gi¶ng d¹y cña t«i vµ mét sè tuyÓn chän tõ mét sè s¸ch, t¹p chÝ tin häc. Ch¾c ch¾n r»ng tËp bµi nµy kh«ng thÓ hoµn thiÖn vµ kh«ng tr¸nh khái sai sãt, xin ®îc tiÕp thu ý kiÕn ®ãng gãp cña c¸c thÇy, c¸c c«. 1 PhÇn 1 : mét sè kinh nghiÖm khi lµm quy ho¹ch ®éng QH§ lµ mét ph¬ng ph¸p m¹nh ®Ó gi¶i c¸c bµi to¸n trong tin häc. QH§ ®ßi hái mét kh¶ n¨ng nh×n nhËn vµ ph©n tÝch chi tiÕt mét bµi to¸n. §Ó cã ®îc nhiÒu kinh nghiÖm gi¶i QH§ th× kh«ng mét c¸ch nµo kh¸c lµ ta ph¶i tiÕp cËn víi cµng nhiÒu cµng tèt nh÷ng bµi to¸n QH§. vµ theo t«i th× khu«n mÉu chung ®Ó lµm quy ho¹ch ®éng gåm ba bíc : * LËp hÖ thøc : dùa vµo nguyªn lÝ tèi u ®Ó chia bµi to¸n thµnh giai ®o¹n lµm viÖc. Sau ®ã t×m hÖ thøc biÓu diÔn quan hÖ gi÷a c¸c bíc ®ang xö lÝ víi c¸c bíc ®· xö lÝ tríc ®ã hoÆc t×m c¸ch ph©n r· thµnh nh÷ng bµi to¸n con nhá h¬n vµ tõ ®ã x©y dùng ®îc ph¬ng tr×nh truy to¸n(d¹ng hµm hoÆc thñ tôc ®Ö quy) * Tæ chøc d÷ liÖu vµ ch¬ng tr×nh : tæ chøc d÷ liÖu sao cho ®¹t yªu cÇu sau: + d÷ liÖu ®îc tÝnh to¸n dÇn theo tõng bíc + d÷ liÖu ®îc lu tr÷ dÓ gi¶m lîng tÝnh to¸n lÆp l¹i + kÝch thíc miÒn nhí dµnh cho lu tr÷ d÷ liÖu cµng nhá cµng tèt, kiÓu d÷ liÖu ®îc chän ph¶i phï hîp dÔ truy cËp * Lµm tèt : lµm tèt b»ng c¸ch thu hÑp hÖ thøc vµ gi¶m kh«ng gian nhí cÇn sö dông. Tuy lÝ thuyÕt quy ho¹ch ®éng rÊt ®¬n gi¶n nh vËy nhng viÖc ¸p dông nã vµo mét bµi to¸n lµ kh«ng hÒ dÔ dµng bëi lÏ víi mçi bµi to¸n ®ßi hái ta ph¶i thiÕt lËp ®uîc mét ph¬ng tr×nh truy to¸n kh¸c nhau, chÝnh ph¬ng tr×nh truy to¸n ®ã thÓ hiÖn kh¶ n¨ng t duy s¸ng t¹o cña mçi ngêi. Nãi chung quy ho¹ch ®éng lµ mét ph¬ng ph¸p ®ßi hái ta ph¶i nh×n nhËn bµi to¸n cùc k× tinh tÕ vµ biÕt c¸ch tæ chøc d÷ liÖu hîp lÝ céng víi mét phong c¸ch lËp tr×nh tèt, kh«ng lµm ®îc vËy th× viÖc gi¶i mét bµi quy ho¹ch ®éng phøc t¹p lµ v« cïng khã kh¨n. Tríc khi lµm quy ho¹ch ®éng h·y suy nghÜ thËt kÜ ®Ó t×m ra vµ x©y dùng c«ng trøc truy håi cho thËt chÝnh x¸c vµ ph¶i v¹ch ra ®îc ®êng lèi lµm viÖc ®óng ®¾n vµ th«ng suèt, cã vËy ta míi b¾t tay vµo lËp tr×nh, nÕu kh«ng chØ cÇn mét lçi nhá trong qu¸ tr×nh lËp tr×nh sÏ khiÕn ta ph¶i t duy l¹i toµn bé qu¸ tr×nh lµm viÖc vµ còng cã thÓ b¹n ph¶i quay l¹i vÞ trÝ xuÊt ph¸t vµ nh vËy ®¬ng nhiªn b¹n sÏ mÊt rÊt nhiÒu thêi gian. Cßn ®©y lµ c¸ch nh×n nhËn ph¬ng ph¸p quy ho¹ch ®éng cña b¹n Ph¹m H¶i Minh Quy hoạch động là một phương pháp rất hay và mạnh của tin học. Nhưng để giải được các bài toán bằng phương pháp quy hoạch động thật chẳng dễ dàng chút nào. Chủ yếu học sinh hiện nay sử dụng quy hoạch động theo kiểu làm từng bài cho nhớ mẫu và áp dụng vào những bài có dạng tương tự. Qua quá trình học tập và giảng dạy tôi đã tự rút ra cho mình một số kinh nghiệm về cách giải các bài toán bằng quy hoạch động, xin đưa ra để mọi người cùng tham khảo và góp ý. 1. Lí thuyết: Phương pháp quy hoạch động gồm 6 bước: - Bước 1: Chia nhỏ bài toán Lập vectơ P có các thành phần x1,x2,..,xn. Mỗi vectơ P ứng với một bài toán con của bài 2 toán. Ban đầu ta xây dựng P với 1 thành phần duy nhất. - Bước 2: Lập hệ thức quy hoạch động Xây dựng hàm f(P) là hàm tối ưu của vectơ P (hay hàm tối ưu cho mỗi bài toán con) f(P) = g(f(P1),f(P2),..,f(Pn)) g có thể là hàm Max,Min hoặc tổng tuỳ yêu cầu của bài toán là tìm Max,Min hay tính tổng. P gọi là vectơ cha P1,P2,P3,..,Pn gọi là vectơ con - Bước 3: Kiểm tra Nếu không xây dựng được hàm f thì thêm tiếp hoặc bỏ đi từng thành phần của vectơ P rồi quay lại bước 2. Nếu được thì làm tiếp bước 4. - Bước 4: Tối ưu hoá hệ thức Tối ưu vectơ P bằng cách xét từng thành phần x của vectơ P: Chọn vectơ PBest trong P1,P2,P3,..Pn chỉ khác nhau thành phần x sao cho có thể đưa PBest vào thay P1,P2,P3..,Pn trong hàm g mà không làm thay đổi giá trị của hàm g thì có thể đơn giản thành phần x của vectơ P. - Bước 5: Chọn kiểu quy hoạch động + Kiểu 1: Nếu các thành phần của vectơ con P1 luôn ≤ hay ≥ các thành phần của vectơ cha P thì ta có thể dùng các vòng lặp for lồng nhau để cài đặt. + Kiểu 2: Nếu vectơ P và vectơ P1 luôn có mối quan hệ cha con một chiều thì ta có thể dùng phương pháp đệ quy có nhớ để cài đặt. + Kiểu 3: Nếu vectơ P và vectơ P1 luôn có mối quan hệ cha con hai chiều nhưng không rõ đâu là vectơ cha , đâu là vectơ con vì còn phụ thuộc vào từng bài toán thì ta có thể dùng phương pháp repeat.. until để cài đặt. - Bước 6: Tối ưu hoá bộ nhớ (chỉ dùng cho cài đặt kiểu 1) Đơn giản vectơ P bằng cách xét từng thành phần x của vectơ P: Nếu f(P(..,x,.. ))=g(f(P1(..,x1,..)),f(P2(..,x2,..)),..,f(Pn(..,xn,..))) và x-x1, x-x2,.., x-xn≤T nào đó thì ta chỉ cần đưa vòng lặp của x lên đầu tiên và bỏ x ra khỏi vectơ P và lưu T+1 vectơ P. Tãm l¹i dï nãi thÓ nµo th× ph¬ng ph¸p nµy chñ yÕu ®ßi hái kh¶ n¨ng thiÕt lËp mét ph¬ng ¸n chia nhá vµ ph©n r· bµi to¸n cho tíi khi vÊn ®Ò cßn l¹i ta cã thÓ gi¶i quyÕt ngay tøc th×. PhÇn 2 : Mét sè bµi to¸n quy hoach ®éng c¬ b¶n: 3 Bµi1 : D·y con t¨ng dµi nhÊt : Cho d·y sè nguyªn n phÇn tö, h·y t×m d·y con t¨ng chÆt dµi nhÊt cña d·y ®· cho ( c¸c phÇn tö cña d·y con cã thÓ kh«ng liªn tiÕp nhau). D÷ liÖu vµo file DCT.INP: - dßng ®Çu tiªn ghi sè n (1[...]... số bài luyện quy hoạch động 15 Bi toỏn 1 :ngõn hng tr tin Mt ngi i ly tin mt ngõn hng Anh ta cn ly mt khon ỳng M ng Ngõn hng cú N ng tin A1, A2, , AN Hi ngõn hng cú bao nhiờu cỏch tr tin D liu vo trong file: "MONEY.INP" cú dng: + Dũng u l hai s N v M (N ... pháp quy hoạch động bạn Phạm Hải Minh Quy hoch ng l mt phng phỏp rt hay v mnh ca tin hc Nhng gii c cỏc bi toỏn bng phng phỏp quy hoch ng tht chng d dng chỳt no Ch yu hc sinh hin s dng quy hoch... : số luyện quy hoạch động 15 Bi toỏn :ngõn hng tr tin Mt ngi i ly tin mt ngõn hng Anh ta cn ly mt khon ỳng M ng Ngõn hng cú N ng tin A1, A2, , AN Hi ngõn hng cú bao nhiờu cỏch tr tin D liu vo... tong tổng số kẹo tất n gói Phơng án quy hoạch ta tìm số gói kẹo cho tổng số kẹo gần (tong div 2) Để làm đợc ta dùng mảng D mảng chiều ta quy hoạch mảng với quy ớc D[i]=0 phơng án chọn số n gói