Trong chuyên ngành khoa học máy tính, quy hoạch động là phương pháp giảm thời gian chạy của thuật toán thể hiện tính chất của các bài toán con chồng chập nhau và cấu trúc rời rạc tối ưu.
Trang 1- ĐẠI HỌC THÁI NGUYÊN `
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VA TRUYEN THONG
NGUYEN THI LINH
KHU DE QUY TRONG BAI TOAN
QUY HOACH DONG
LUAN VAN THAC Si KHOA HOC MAY TINH
Trang 2- ĐẠI HỌC THÁI NGUYÊN _ 2
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THONG TIN VA TRUYEN THONG
NGUYEN THI LINH
KHU DE QUY TRONG BAI TOAN
QUY HOACH DONG
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Người hướng dẫn khoa học: PGS TSKH Nguyễn Xuân Huy
Trang 3LOICAM ON
Tôi xin bày tô sự kính trọng và lòng biết on sâu sắc đến PGS.TSKH Nguyễn Xuân Huy - người đã tận tỉnh hướng dẫn và giúp đỡ tôi trong suốt quá trình học tập, nghiên cứu và hoàn thành luận văn, xin cảm ơn các thầy, cô giáo trong và ngoài trường
đã cung cấp kiến thức và tao điều kiện thuận lợi cho quả trình học tập và rèn luyện của
‘ban than tôi
Tôi cũng xin được bày tô lòng biết ơn chân thành đến Ban Giám hiệu, các thầy giáo, cô giáo phòng Sau đại học trường Đại học Công Nghệ Thông Tin &TruyềnThông, các thầy giáo ở Viên Công Nghệ Thông Tin 4a giing day và tạo mọi điều kiện cho tôi học tập, nghiên cứu và hoàn thành luận văn này
“Xin cảm ơn gia đình, bạn bè đã hết lòng giúp đỡ, khích lê động viên tôi để tôi hoàn thành luận văn Xin chia sé niềm vui này với bạn bè và những người thân yêu
‘Thai Nguyên, tháng 07 năm 2016
“Tác giả luận văn
Nguyễn Thị Linh
Trang 4LOICAMBOAN
Tei xin cam đoan luận văn này của tự bản thân tôi tìm hiễu, nghiên cứu Các tài liệu tham khảo được trích din và chú thích đầy đủ Nếu không đúng tôi xin hoàn toàn chịu trách nhiệm
Thái Nguyên, tháng 07 năm 2016
Tac giả luận văn
Nguyễn Thị Linh
Trang 5DANH MUC CAC KY HIEU, CAC CHU VIET TAT
Ý nghĩa
QHD | Quyhoahđông
Trang 6DANH MUC CAC BANG TRONG LUAN VAN
2.1 | $6 lin goi him CG, ) trong bai toda chỉa thưởng 16
23 | Dé dai nein ahit cba moi dung di trong a
thiG (5 dink, 9cung) | 40
Trang 7DANH MỤC CAC HINH VE TRONG LUẬN VĂN
22 | Vido tam gide Pascal vi 2-6 38
23 | BéthiG véi 5 dinh va 9 cung 40
Trang 8
DANH MỤC CÁC BẰNG TRONG LUẬN VĂN ix DANH MUC CAC HINH VE TRONG LUAN VAN v
1.2.3, BG phate tp tink toén cia gidi thuật 7
14 Nguyên lý ối ưu Belman 10 1.4 Nhận biết bài toán quy họach động " 41.4.1 Các đặc trưng cũa bài toắn quy hoạch động " 1.42 Bài toán chủa thường 2 41.4.3 Bãi tán Palindrome 4
CHƯƠNG 2 QUI TRÌNH GIẢI BÀI TOÁN QUY HOẠCH ĐỌNG 18 2.1 Sơ đồ chung giải bai oán quy hoạch động 18 2.1.1 Lập hệ tuức quy hoạch động 18 -11.2 Lập trình giải trực tiếp theo hệ duức quy hoạch động, 19 3.3 Các phương pháp lập hệ thức quy hoạch động 21 2.24 Lép hi thite QHĐ trực ấp theo đề bài 21 2.2.2 Phat trién ừ các hệ tước cơ số 2 12.2.3 Xây dựng hệ tước QHD theo lip voi tr dé 26 2.2.4 Xây dựng hệ Hước QHP theo lớp với tị cuất 2r
Trang 9243 Khi niệm về khử đệ quy
3.4 Các phương pháp khử đệ quy trong quy hoạch động
KET LUAN VA HUONG PHAT TRIEN
TÀI LIỆU THAM KHẢO
Trang 10MỞ ĐẦU
Lý do chọn đề tài
'Quy hoạch động là một phương pháp ding dé gii các bài toán trong lĩnh
vực Toán Tin Các bài toán quy hoạch động cũng chiếm vị trí khá quan trọng trong tổ chức hoạt động và sản xuất, đặc biệt 1A trong lĩnh vực tối ưu hóa
'Quy hoạch động là phương pháp toán học nhằm tìm lời giải tối ưu của quá trình nhiều bước (nhiều giai đoạn) Thuật ngữ “động ” ở đây nhằm nhấn mạnh vai trò của thời gian và sự xuất hiện đãy các quyết định trong quá trình giải bài toán,
cũng như thứ tự các phép toán có ý nghĩa quan trọng
Trong chuyên ngành khoa học máy tính, quy hoạch động là phương pháp
giảm thời gian chạy của thuật toán thể hiện tính chất của các bài toán con chồng chập nhau và cấu trúc rời rạc tối ưu Nôi đơn giản, quy hoạch động là lớp các bài toán mà quyết định ở bước thứ ¡ phụ thuộc vào quyết định ở các bước xử lý trước
hoặc sau đồ
'Quy hoạch động thường được đùng giãi các bài toán tối tu Một trong các khó khăn thường gặp là các hệ thức quy hoạch động thường có dạng đệ quy, do
đó dẫn đến hiện tượng là một hàm có thê được gọi nhiều lần với cùng một giá trị
của tham số Với dữ liệu đầu vào lớn thì đo có các lời gọi đệ qui một hàm nhiều
Trang 11lần nên thời gian xử lý chậm, ảnh hưởng đến chất lượng xử lý bài toán Do đó, học viên chọn giải pháp khử đệ quy để giải quyết vấn đề trên
trong khuôn khổ khóa luận thạc sĩ, học viên chọn đề tài:
“Khử đệ quy trong bài toán quy hoạch động
1 Đối tượng và phạm vi nghiên cứu:
Luận văn tập trung chủ yếu vào các đối tượng và phạm vỉ nghiên cứu sau: qui trình giải bài toán quy hoạch động, phương pháp khử đệ quy trong thuật toán quy hoạch động Ứng đụng: Cài đặt, thử nghiệm khử đệ quy với thuật toán quy hoạch động có nhiều ứng dụng thực tế: Bài toán Palindrome, bài toán Tam giác
ên tố
Pascal, bai toan phat trién day số ng
“Những nội dung nghiên cứu chính
Nội đung của luận văn chủ yếu tập trung vào nghiên cứu các vấn đề chính
sau đây
Chương 1 Tổng quan về thuật toán quy hoạch động
Trong chương 1 học viên trình bày về tổng quan của các bài toán, thuật
toán quy hoạch động: Giới thiệu chung về bài toán quy hoạch động, khái niệm
vu Bellman, cách nhận biết bài toán
về bài toán quy hoạch động, nguyên lý:
quy hoạch đông
Chương 2 Quy trình gidi bài toán quy hoạch động
Trong chương này, luận văn trình bay sơ đỗ chung giải bài toán quy hoạch động, các phương pháp lập hệ thức quy hoạch động, các phương pháp khử đệ
quy trong quy hoạch động trong đó tập trung vào phương pháp giảm số biến, thêm các tham số điều khiễn, đùng mãng một chiều, mnâng hai chiều và giảm số.
Trang 12chiều
Chương 3 Thiết kế chương trình cho một số bài toán quy hoạch động
Chuog 3 luận văn đưa ra tổ chức dữ liệu và chương trình ứng đụng đối với
một số bài toán quy hoạch động có ý nghĩa trong thực tiễn
2 Phương pháp nghiên cứu:
Trong quả trình làm luận văn, học viên sử đụng một số phương pháp nghiên cứu như:
Chương 1 của luận văn sử đụng phương pháp tổng hợp tải liệu nhằm hệ
thống lại các kiến thức về bài toán và thuật toán quy hoạch động, tìm hiểu các
khái niệm, cách nhận biết bài toán thuộc lớp qui hoạch động
Các kết quả được trình bày trong chương 2 của luận văn được hình thành
chủ yếu theo phương pháp suy luận toán học và toán học rời rạc nhằm nêu bật
tưu điểm của việc khử các lời gọi đệ quy trong thuật toán quy hoạch động
Các kết quả ứng đụng trong chương 3 được xử lý bằng các phương pháp
động với độ phức tạp thời gian thấp Ứng dụng phương pháp khử đệ quy với thuật toán quy hoạch động trong thiết kế thuật toán cho một nhôm các bài toán
có ý nghĩa thực tiễn trong kinh tế và kĩ thuật.
Trang 13CHUONG 1
TONG QUAN VE THUAT TOAN
QUY HỌACH ĐỘNG
1.1 Giới thiệu chung
“Trong quá trình học tập và giải quyết các công việc hàng ngày, tối ưu hóa là
một đòi hỏi thường xuyên, không thê thiếu Tối ưu hoá thuật toán yêu cầu tư đuy'
thuật toán cao, cùng khả năng sử dung thành thạo các cấu trúc dữ liệu Lớp bài
toán tối ưu thường cô nhiều nghiệm chấp nhận được và mỗi nghiệm có một giá
trị đánh giá Mục tiêu đặt ra là tìm nghiệm tối ưu, đồ là nghiệm có giá trị đánh
giá lớn nhất hoặc nhỏ nhất (tối ưu).Ví dụ, tìm đường đi ngắn nhất giữa hai đỉnh của đỗ thị, tìm chuỗi con chung đài nhất của hai chuỗi, tìm chuỗi con tăng đài nhất, Để giải quyết lớp bài toán này có thể sử đụng nhiều phương pháp:
Phương pháp nhánh cận, phương pháp tham lam, phương pháp quy hoạch động, thuật toán đệ quy [9, 12]
Tùy từng bài toán, có thê chọn một phương pháp để áp đụng nhằm đạt được
Trang 14'—iệu quả về tốc độ, bộ nhớ tốt nhất Cách đơn giản nhất để tìm nghiệm tối ưu của
một bài toán là đuyệt hết toàn bộ tập nghiệm của bãi toán đồ (vét cạn) Cách này chỉ áp dụng được khi tập nghiệm nh, kích thước vài chục byte Khi gặp những bài toán với tập nghiệm lớn thì phương pháp trên không đáp ứng được yêu cầu
về mặt thời gian tính toán
Thuật toán đệ quy cô ưu điểm đễ cài đặt, tuy nhiên các chương trình này
thường kéo theo những đòi hôi lớn về không gian bộ nhớ và một khối lượng tính
toán không lỗ mà thực tế bộ nhớ máy tính không thể thực hiện được
Quy hoạch động là phương pháp thích hợp tìm nghiệm cho các quá trình
dạng một chuỗi các quyết định tuần tự theo không gian hoặc thời gian [3],
“Thuật toán quy hoạch động là một kỹ thuật nhằm đơn giản hóa việc tính
toán các công thức truy hồi bằng cách lưu trữ toàn bộ hay một phần kết quả tinh
toán tại các bước với mục đích sử đụng lại Nếu tìm đúng hệ thức thể hiện bản
chất quy hoạch động của bài toán và khéo tô chức đữ liệu thì ta có thê xử lí được
những tập dữ liệu khá lớn [6, 8] Quy hoạch động va chia để trị là các phương
pháp giải một bài toán bằng cách tổ hợp lời giải các bài toán con của nó
Sự xuất hiện của quy hoạch động gắn liền với tên tuổi của nhà toán học
‘Mf Richard Bellman (1920 ~ 1984) đề xuất trong những năm 50 cia thé kj 20 Phương pháp này đã được áp dung dé gidi hàng loạt bài toán thực té trong các
quá trình uật công nghệ, tổ chức sản xuất, kế hoạch hóa kinh tế, [9, 10]
Tuy nhiên 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 cỡ lớn hơn, do đồ cô một số bải toán cách giải bằng quy
"hoạch động tô ra không thích hợp Nếu biết vận đụng thuật toán một cách hợp lý
có thể giải được một lớp rộng các bài toán thực tế.
Trang 151.2 Bài toán và thuật toán
cần phải trình bày rõ Input (thông tin đưa vào) và Output (thông tin cần lấy ra)
của bài toán đó và mối quan hệ giữa Input và Output
1.2.2 Thuật toán
Giả sử đã có một bài toán đã được mô tả rõ Intput và Output Nhưng vấn
đề đặt ra là: Làm thể nào để tìm ra Output?
Trong toán học cô một xu hướng nghiên cứu đó là chỉ cần chứng minh sự
tên tại của lời giải và không cần chỉ ra cách tìm lời giải đó
"Việc chỉ ra tường minh một cách tìm Oufput của bãi toán được gọi là thuật toán (Algorithm) giãi bài toán đó Thuật toán là một khái niệm cơ sở của toán học và tin hoc Việc nghiên cứu về thuật toán cô vai trò quan trọng trong khoa
học máy tính vì máy tính chỉ cô thể giải quyết được vấn đề khi đã có hướng din
giải rõ rằng và đúng Có thể định nghĩa đơn giãn thuật toán như sau:
Thuật toán dé giải một bài toán là một dây hữu hạn các thao tác được
sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao
tác dy, te Input của bài toán, ta nhận được Outuứ cần tìm
Các đặc trưng của thuật toán:
- Tính hữu hạn
Trang 161.2.3 Độ phức tạp tỉnh toán của giãi thuật
"Một bài toán có rất nhiều thuật toán để giải Chọn một giải thuật đưa ra kết
quả nhanh là một lựa chọn cần thiết Tuy nhiên, căn cứ vào đâu để kết luận được
giải thuật này nhanh hơn giải thuật kia?
Thời gian thực hiện giải thuật phụ thuộc vào rất nhiều yếu tố như kích
thước đữ liệu đưa vào Dữ liệu cảng lớn thì thời gian xử lý càng chậm Nếu goin
là kích thước đữ liệu đưa vào thì thời gian thực hiện cũa một giãi thuật có thể
'biểu điễn một cách tương đối như một hàm của n: T(n)
Phần cứng máy tính, ngôn ngữ viết chương trình và chương trình dịch
ngôn ngữ ấy đều ảnh hưởng tới thời gian thực hiện Những yếu tố này không
giống nhau trên các loại máy, vì vậy không thể đựa vào chúng dé xác định Tín)
Tức Tứn) không thể biểu điễn bằng giờ, phút, giây được Tuy nhiên, không phải
không thé so sánh được các giãi thuật về mặt tốc độ Người ta có cách đánh giá
thời gian thực hiện giải thuật độc lập với máy tính và các yếu tố liên quan tới
máy tính gọi là độ phức tạp tính toán của giải thuật
sph Cho một giải thuật thực hiện trên dỡ liệu với kích thuée n Gia sit T(a) 1a
a Các
thời gian thực hiện một giải thuật, g(n): hàm xác định đương với mọi n Khi đó,
độ phức tạp của giải thuật là
Trang 17'©(g(n)): nếu tổn tại hằng số đương c¡, cạ, và nọ sao cho c;.g(n) < Ñ(n) <
csg(n) với mọi n= np, gín): giới han chặt của hàm T(,)
O(g(n)): nếu tổn tại hằng số đương c và nọ sao cho Tín) < c.gín) với mọi n
> no, gín): giới hạn trên của hàm T(,)
©(g(n)): nếu tôn tại hằng số đương c và nạ sao cho T(n) > c.g(n) với mọi n
> nọ, gín): giới hạn đưới của hàm T(,)
Ta nói, độ phức tạp tính toán của giãi thuật là:
+ o(g(n)): nếu tổn tại hằng số đương c, tôn tai một hằng số đương nạ
sao cho T(n) <c.gín) với mọi n > nọ
+ œ(g(n)): nếu tổn tại hằng số đương c, tồn tai một hằng số đương nọ
sao cho Tặn) > c.gín) với mọi n= np
Tĩnh chất:
- Tinh bac cầu:
+ Nếu ffn) = ©(g(n)) và g(a) = O(h(a)) thi fla) = Och(a))
+ Nếu f(a) = O(g(n)) và gín) = O((n)) thì fịn) = O((n))
a Q(g{a)) va g(a) = ©(h(n)) thi f{a) = (a)
(g(a) và gín) = o(h(n)) thì Ẩn) = o(h(n)) + Nếu f(a) = (g(a) va g(a) = (h(a) thi a) = (h(a)
Trang 18+ Ấn) = O(g(n)) néu va chi néu g(a) = O(n)
Tính chuyển vị đối xứng:
“# fín) = O(g(n)) nếu và chỉ nếu g(n) = ©(fín))
“# fín) = o(ø(n)) nếu và chỉ nếu g(n) = w(f{n))
) Xúc định độ phức tạp tỉnh toán của gii thuật
Quy tắc bỏ trọng số: Nếu đoạn chương trình P có thời gian thực hiện
Tín) = O(ci.Ñn)) với c1 là một hằng số đương thì coi đoạn chương
Quy tắc nhân: Nếu đoạn chương trình P có thời gian thực hiện Tín) =
©(n)) khi đó nếu thực hiện k(n) tan đoạn chương trình P với kín)
©(gín)) thì độ phức tạp tính toán là O(gín) kín))
“Độ phức tạp tính toán với ình trạng đữ liệu vào:
“Nhiều trường hợp thời gian thực hiện giải thuật không chỉ phụ thuộc vào dỡ liệu mà còn phụ thuộc vào tỉnh trạng dữ liệu đó nữa Do đó, khi phân tích thời gian thực hiện giải thuật ta phãi xét các trường hợp sau: Trường hợp xấu nhất: Với một kích thước đữ liệu n, tìm Tín) là thời gian lớn nhất khi thực hiện giải thuật trên mọi bộ dữ liệu kích thước n
và phân tích thời gian thực hiện dựa trên hàm Tín),
Trang 19
10
- _ Trường hợp tốt nhất: Với một kích thước đữ liệu n, tm Tín) là thời gian nhỏ nhất khi thực hiện giải thuật trên mọi bộ dữ liệu kích thước n
và phân tích thời gian thực hiện dựa trên hàm Tín),
- _ Trường hợp trung bình: Giả sử rằng dữ liệu vào tuân theo một phân
'phối xác suất nào đó và tính toán giá trị kì vọng của thời gian chạy cho
mỗi kích thước n (T(n)), sau đồ phân tích thời gian thực hiện giải thuật đựa trên hàm Tín)
“hi khô khăn trong việc xác định độ phức tạp tính toán trung bình người
ta thường chỉ đánh giá độ phức tạp trong trường hợp xấu nhất
1.3 Nguyên lý tối ưu Bellman
"Nguyên lý tối ưu Bellman la nén ting, cơ sỡ của thuật toán quy hoạch động
'Trong thực tễ, ta thường gặp một số bài toán tối ưu loại sau [10, 11]
“C6 một đại lượng ƒ hình thành trong một quả trinh gồm nhiều giai đoạn và ta chỉ quan tâm đến kết quả cuối cùng là giá trị của ƒ phải lớn nhất hoặc nhỏ nhất,
ta gọi chung là giá trị tối ưu của
Giá trị của /phụ thuộc vào những đại lượng xuất hiện trong bài toán mà
mỗi bộ giá trị của chúng được gọi là một írạng ¿hái của hệ thống và cũng phụ
thuộc vào phương thức đạt được giá trị ƒ trong từng giai đoạn Mỗi cách thức
được vận đụng tại mỗi bước được gọi là một (bước) điều khiển Đại lượng ƒ' thường được gọi là hàm mục tiêu và quá trình đạt được giá trị tối ưu của ƒ được gọi là quá trình điều khiển tối tu
‘Bellman phat biéu nguyên lý tối ưu (cũng gọi là nguyên Jf Bellman) ma ¥
tưởng cơ bản là như sau:
Trang 20Chú _ÿ rằng nguyên lý này được thừa nhận mà không chứng minh:
1.4 Nhận biết bài toán quy họach động
1.4.1 Các đặc trưng cña bài toán quy hoạch động
Co thể tôm lược cách nhận biết một bài toán thuộc lớp quy hoạch động
như sau:
“Một bài toán P được xem là thuộc láp Quy hoạch động nếu
1 P là bài toán tối ưu hóa: Cần xác dinh trị tôi ưu (min hoặc max,
Trang 212
Qui hoạch dang 3.1 được gọi là gui hoạch động dang tiến: nghiệm trung
gian của mỗi bước phụ thuộc vào các bước trước
Qui hoach dang 3.2 được gọi là gui hoạch động dạng lùi: nghiệm trung
gian của mỗi bước phụ thuộc vào các bước sau
Qui hoach dang 3.3 được gọi là gui hoach déng dang hỗn họp: nghiệm
trung gian của mỗi bước phụ thuộc vào các bước trước và các bước sau
Phương pháp
1 quy hoạch động
i bài toán tối wu theo nguyên lý Beliman thường được gọi
Bài toán giải theo phương pháp quy hoạch động gọi là bài toán quy hoạch động
Dưới đây sẽ trình bày một số bài toán thuộc lớp quy hoạch động,
1.4.2 Bai todn chia thưỡng
Cần chia hết m phần thưởng cho n học sinh xếp theo thứ tự từ giỏi trở xuống Qui tắc chia là như sau: mỗi học sinh được nhận số phần thưởng không nhỏ hơn số phần thưởng của bạn đứng dưới mình
tính số phương án chia khác nhau ?
Thí dụ, với m = 7, n = 4 ta có 11 cách chia hết 7 phần thưỡng cho 4 học
Trang 22“Nhận biết dạng quy hoạch động (QHĐ)
Goi C(m, n) là số cách chia hết mm phần thưỡng cho n học sinh theo điều kiện của đề bài Ta thầy,
(1) Cứnn) là hàm 2 ngôi
(2) Cm, 0) =0: Nếu không có học sinh nào thì không cô cách chia nào
(3) C(0, n) = 1, n > 0: Nếu không có phần thưởng thì mỗi em đều nhận 0 phân thưởng Điều kiện chia của đề bài được đáp ứng
(4) Cm, ) = Cứn, m), m < n: Nếu số phần thưởng ít hơn số học sinh thì tờ
em thứ m+1 trở uống sẽ không nhận được phin thưỡng nào
(6) Xếết trường hợp m > n Ta chia các phương án chia thưởng thành hai
nhôm không giao nhau Nhóm 1 gỗi
Số phương án của nhôm 1 là Cm, n-I): Vì em cuối cùng không nhận thưỡng nên số m phẩn thưởng sẽ chia cho n-] em đứng đầu danh sách
Số phương án của nhóm 2 là C(m-n, n): Vì em cuối cùng có thưởng nên mọi
em đều có ít nhất 1 phần thưởng Ta tạm giữ riêng mỗi em 1 phần thưởng (để nhận sau) còn lại m-n phần thưởng ta chia cho n em.
Trang 23“
`Vi hai nhôm phương án không giao nhau nên ta cổ,
'Nếu m > n thì Cím, n) = Cứn, n-1)+Cứm-n, nì
Ta thấy, đễ tính Cứm, n) ta cần tính trước Cựm, n-1) và C(m-n, n), vay bai
toán Chia thưởng thuộc lop QHD dang tiền
Bài toán tổng n số hạng dưới đây là dạng phát biểu khác của bài toán chia thưỡng
"Bài toán tông n số hạng
Có bao nhiêu cách viết số nguyên không âm m dưới dạng tổng của n số hạng nguyên không âm theo trật tự giảm dần
1.4.3 Bai toán Palindrome
Một day kí tự được gọi là palindrome
“Nhận biết dạng quy hoạch động (QHĐ)
Giả sử ta cô đãy s gồm n kí tự Ta kí hiệu s[:,j] là một đoạn cũa đãy s tính
từ kí tự thứ ¡ đến kí tự thứ j, ¡ <j Như vậy, ta có s = s[1, n] Gọi Dđ;j) là chiều đài lớn nhất của palindrome thu được sau khi đã xóa một số kí tự khôi đoạn
sii]
Thi du,
s banana, n= 6.Tacd
Trang 24‘Néu s[i] = s[j] tức là hai kí tự đầu và cuối của đoạn s[¡j] giống nhau thì
chiều đài lớn nhất của palindrome trong s[ij] sẽ chính là chiều đài lớn nhất của
palindrome trong đoạn giữa s[i+1, j-1] cộng thêm 2 kí tự đã đối xứng tại hai đầu Ii]=sŨ]
Trang 2516
DG) = DG, j-1) + 2, néu sfi] = sf]
Gia sit sf] s[j] tức là hai kí tự đầu và cuối của đoạn s[Lj] khác nhau thì ta
xét hai đoạn “hụt đầu” và “hut cuéi” trong s[i,j] 18 s[i,j-1] va s[i+1,j] Trong hai đoạn này ta lấy D max
Vay, D(i,j) = max { DG+1, j), DG j-1) }, nếu s[i] # s[i]
Vậy palindrom là bài toán QHĐ dạng
Trang 26KET LUAN CHUONG 1
Quy hoạch động là một phương pháp giải các bài toán tối ưu Phương pháp quy hoạch động đựa trên tư tưởng chia để trị và nguyên lý tối ưu Bellman
Để nhận biết một bài toán quy hoạch động trước hết cần xét xem bài toán
đồ có phải là bài toán tối ưu hóa hay không Sau đó, chúng ta xem bài toán cô
một giá trị nghiệm tối ưu ban đầu hay không Cuối cùng, ta xác định trạng thái
cơ sở của bài toán, đựa vào hàm mục tiêu và một số phép biển đổi đại số cơ bản
để tìm ra công thức truy hỏi tính toán các trạng thái theo hàm mục tiêu và chứng minh tính đúng đắn của công thức Dựa vào công thức truy hồi chúng ta có thể
nhận biết được bài toán quy hoạch động thuộc lớp bài toán quy hoạch động tiễn,
lùi hay hỗn hợp
Quy hoạch động ding dé giãi một lớp bài toán tdi wu khá lớn trong tin học
và trong thực tế Tuy nhiên, không phải mọi bài toán đều có thể giải bằng phương pháp quy hoạch động Do vậy, chúng ta cần nhận biết chính xác các đặc
trưng của bài toán quy hoạch động đề đưa ra lời giải tốt nhất.
Trang 2718
CHUONG 2
QUI TRINH GIAI
BÀI TOÁN QUY HOẠCH ĐỘNG
2.1 So dé chung giải bài toán quy hoạch động
"Đổ giãi một bai toán quy hoạch đông, người ta thường thực hiện theo các
"bước sau đây [1, 6, 7]
SƠ ĐỎ CHUNG GIẢI BÀI TOÁN QUY HOẠCH ĐỘNG
“Bước 1 Lập hé thức quy hoạch động HT
Bước 2 Lập trình giải trực tiếp theo hệ thức H
Bước 3 Khử độ qui cho H
Bước 4 TỔ chức dữ liệu và lập trình
2.1.1 Lập hệ thức quy hoạch động
Thông thường khi đùng phương pháp quay lui, vét cạn cho các bài toán
Trang 289
quy hoạch động thì chỉ cô thể vét được các tập dữ liệu nhỏ, kích thước chững vài
chục byte Nếu tìm được đúng hệ thức thê hiện bản chất quy hoạch động của bài toán và khéo tổ chức đữ liệu thi ta có thê xử 1ý được những tập đữ liệu khá lớn
Dựa vào nguyên lý tối ưu tìm cách chia quá trình giãi bài toán thành từng
giai đoạn, sau đó tìm hệ thức biểu điễn tương quan quyết định của bước đang xử
ý với các bước đã xử lý trước đó Hoặc tìm cách phân rã bài toán thành các “bài toán con” tương tự có kích thước nhỏ hơn, tìm hệ thức nêu quan hệ
iữa kết quả bài toán kích thước đã cho với các kết quả của các “bài toán con” cùng kiểu có kích thước nhỏ hơn của nó dạng hàm hoặc thủ tục đệ quy [4, 5]
2.1.2 Lập trình giải trực tiếp theo hệ thức quy hoạch động
“Khi đã có hệ thức quy hoạch động chúng ta có thễ xây dung ns
giải Tuy nhiên, hệ thức này thường là các biễu thức đệ
tượng tran miễn nhớ khi ta tổ chức chương trinh trực tiếp bằng đệ quy [2, 8]
do 46 đễ gây ra hiện
Ta xét thi dụ với bài toán Chia thưởng
Theo hệ thức quy hoạch động ta biết cách tính hàm C như san:
Cem, =) = ifn =O then 0
cise ifm <n then © 2= Cla, =) else C22 Cle, not) + Clee, =
Dé tinh xem C(7.4) được gọi bao nhiêu lần ta sử dụng một măng hai chiều
s, trong đồ s[ij] cho biết hàm CGj) được gọi bao nhiêu lần
Khi đó hàm trên sẽ được cài đặt thêm chức năng đếm số lần gọi hàm:
Trang 29Sau khi gọi lời giải C(17, 6) với 17 phân thưởng và 6 học sinh ta thu được
các thông tin sau:
C7, 6) = 163 (Có 163 phương án chia 17 phần thưởng cho 6 học sinh)
Trong đó số lần goi cc ham C(ij) được ghỉ trong bang sau:
"Bảng 21 Số lân sọi hàm Cũ) trong bai todn Chia Thưởng.
Trang 30bì
"Như vậy, thay vì gọi hàm C(1,0) chia 1 phần thưởng cho 0 học sinh đúng một lần, hàm này bị gọi tới 136 lẫn
Điều này dẫn tới việc phải tổ chức Bước 3 và Bước 4 cho sơ đồ trên
Các Bước 3 và Bước 4 cho sơ dé chung nói trên sẽ được trình bày vào
cuối Chương 2
2.2 Các phương pháp lập hệ thức quy hoạch động
3.2.1 Lập hệ thức QHĐ trực tiếp theo đề bà
Một số bài toán ngay trong đề đã cung cấp các hệ thức quy hoạch động đo
đô chỉ đồi hỏi tổ chức tính toán theo các Bước 3 và Bước 4 của sơ đỗ tổng quát nhằm giảm thời gian thực hiện chương tỉnh Dưới đây liệt kê một số bải toán thuộc đạng này [6, 10, 11]
3) Cho trước giá trị g Hãy tim n dé n! = g
©) Cho trước giá trị n Hãy cho biết có bao nhiêu số 0 tận cùng của n!
4) Cho trước n và p Hãy tìm số k lớn nhất để p* là ước của n!
Số Fibonacci
_Dãy số Fibonacci ƒ được lập theo hệ thức sau:
* Ä=A=1
Trang 312
tinh ƒ, với n trong giới hạn cho trước
2) Cho trước giá trị g Hãy tìm n đỗ ƒ, = g
@) Ưới mỗi m, n hay t6 chite qui trinh tính A(m, n)
hết giá trị của hàm Ackermamm được biểu diễn dưới dang công
thức có chứa hạng tit “Igy tng”, theo kí hiệu của Kruth *a [10]
Hay viết hàm KỊP, a) tính công thức lãy tằng nói trên
Hàm Ackermann được vận đụng nhiều trong các công thức đánh giá độ phức tạp tính toán và lý thuyết máy Turing [9, 12]
Biét if, j.f, i#j và sé nguyén n Hay tinh fi?
Trang 32Ta biết một đãy (tva) Fibonacci 1a hoan toan xc dinh néu biét hai số hạng liên
tiếp của dãy
Gia sit fir =x
Ta tìm cách biểu diễn x qua các đữ liệu của giả thiết
Ta có đấy sau đây
Trang 33fost atx + (a+x)=2a+3x= a+ Cx
Ja=b
Tổng quát, vận đụng qui nạp toán học ta có thể chứng minh rằng:
đa= Cáa + Cœ đ>1
Hệ thức trên có ý nghĩa sau đây
Moi day tua Fibonacci đều có thể được biểu diễn qua day Fibonacci
Trang 34Ta cần phân biệt số chẵn với số hạng có chỉ số chẵn Trong đãy trên, nếu
ta kí hiệu cụ, cạ là các số hang của day Fibonacci, ta có:
Si] [S5] &j 8] & [Œ [& [8 [eis
3 |5 8 | 13/21/34) 55/89 các
Ta xét day Fibonacci 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, trong đồ
các số chăn được gạch đưới Ta thấy cứ sau hai số 1é sé gap mét sé chin
Goi a và b là 2 số Fibonacci lẻ liên tiếp Xét day 5 s6 Fibonacci liên tiếp a,
b, c, , e, với a và b là hai số lẽ Để lập luận ta vận đụng các mệnh đề sau đây:
Ta thấy, số Fibonacci chẵn tiếp theo sẽ là c = a = b; sau đồ là 2 số lẽ đ =
Trang 35+%
đ Với hai số lẻ liên tiếp trong đãy là a và b, ta đặt t = a + b thì t là
tiếp theo và hai số lẽ tiếp theo tsẽ là đ = b + c = b + (a ~ b) = b + tà e=
số c
c+đ=d+t Vậy ta chỉ cần tổ chức sinh các số hạng theo kĩ thuật “cm canh
nhịp 2”, tức là bỏ qua 2 số hạng mang giá trị lẽ, cộng dén số hạng thứ ba mang
giá trị chin vào tông
Để ý rằng bài này không yêu cầu về chỉ số của mỗi số hạng nên ta có thể
xây dựng đăy Fibonacci tir hai số hạng đầu tiên 1 va 1 thay vì xuất phát từ 1 và 2
2.2.3 Xây dựng hệ thức QHĐ theo lớp với trị đầu
Dựa theo đối tượng đầu tiên ta có thể phân hoạch bài toán ban đầu thành
nhiều bài toán con cô nghiệm không giao nhau Sau đồ sử đụng kết quả của các bài toán con đồ để tìm nghiệm của bài toán Chẳng hạn như bai Robot sau đây dura theo bước đầu tiên ta cô thể chia các cách bước thành nhiều nhóm không giao nhau [6]
Robot
“Một Robot có thể nhảy k> 1 bước với độ dài khác nhau (bs, bs, ,bx) trén đoạn đường thẳng Đặt Robot trên đoạn đường thẳng tại vạch xuất phát 0 Cho
biết số cách nhây đễ Robot đến được điểm m-
Thí đụ, số bước #= 2, ð: = 2, ð:= 3, đoạn đường đài „=8 Có 4 cách nhảy đề
Trang 36Hệ thức QHD
Ki hiệu mỗi cách nhãy của robot là một vector v = (4, ) có các thành phần
»¡ là mỗi bước nhảy và tổng các thành phần trong v đúng bằng N Gọi S(n) là số cách để robot vượt đoạn đường đài n Dựa theo độ đài bước nhảy đầu tiên đ
của mỗi cách nhãy ta chia toàn bộ các phương án nhãy của robot thành š nhóm
không giao nhau
Để ý rằng khi đoạn đường cần vượt cô chiều đài n = 0 thỉ robot có một
cách bước (đứng yên), do đó 5(0) = 1 Ngoài ra ta quy định S(n) = 0 nếu ø <0
"Theo quy định này thì hệ thức QHĐ còn đơn giản hơn nữa:
SO)
S(o) = EE S(n-B) | 1=1,2, , R}
2.2.4 Xdy dựng hệ thức QHĐ theo lớp với trị cuất
Ta có thé phân hoạch các nghiệm cia bai toán ban đầu theo giá trị cuối c
Theo nội đung đã trình bày tại mục 1.3.2 khi cần chia hết m phần thưởng
cho n học sinh xếp theo trật tự tí
án chia thưởng thành hai lớp không giao nhau đựa trên số phần thưởng c học
sinh cuối đanh sách được lĩnh: Lớp thứ nhất gồm các phương án c = 0, lớp thứ
õi trở xuống ta đã phân hoạch các phương
Trang 37Hệ thức QHĐ một biến
"Với các bai toán mà ta chỉ quan tâm đến một đối tượng nào đó Khi lập
công thức truy hôi chỉ phụ thuộc vào một biển
Bài toán Robot trong mục 2.2.3 cho ta hệ thức QHĐ một biến, cụ thể là S(n) là số phương án nhãy khác nhau khi robot từ vị trí 0 trên đường thẳng nhãy
tính chất này, ta thường quan tâm đặc
«Ha ham mấy ngôi (bao nhiêu biến)
* Các tình huống cận: Khi các biến nhận giá trị cận đưới, cận trên,
ngoài giới hạn
"Thí dụ, với bài toán robot ta đã phát hiện rằng
S(0
Trang 38Hệ thức QHĐ hai biến
Với các bài toán mà ta phải quan tâm đến hai đối tượng trong bài Khi lập công thức truy hôi loại này thường phụ thuộc vào hai biển Ta xét bài toán sau:
"Bài toán Ba lô
Cần chọn một số trong số n đồ vật đễ xấp vào một ba lô tải trọng m sao cho tông trọng lượng không vượt quá m và tổng giá trị là lớn nhất Biết trọng lượng của vật thứ ¡ là w[tj và giá trị của vật đó là v[tj> 0 Hãy cho biết giá trị
Trang 3930
“Xếp các đỏ vật 1, 4, 6 và 8 Khi đó trọng lượng sẽ là
$= S+3+§+7 = 23 và giá trị max khi đồ sẽ là
€= 50 + 100 + 200 + 300 = 650
Bài toán này được vận dung trong khá nhiều lĩnh vực như qui hoạch
nguyên, vận trù học, mật mã khóa công khai, giấu tin 10, 12]
"Nếu doi hoi giãi trình phương án chọn đỏ vật thì bài toán được gọi là Bài toán Ba lô 0/1 vì có thé diễn đạt nghiệm x dui dang vector 0/1, trong 46 x;
cho biết vật ¡ được chọn, x; = 0 cho biết vật ¡ không được chọn đề xếp vào ba lô
"Nghiệm 0/1 ứng với phương án 1, 4, 6, 8 là x = (1, 0,0, 1,0, 1,0, 1)
Hệ thức QHD
Gọi #(, /) là tổng giá trị c lớn nhất có thể có bằng cách chọn ¡ vật đầu tiên
{1,2 , 1} với giới hạn trọng lượng j Khi đó, đáp án của bài toán chính là giá trị lớn nhất khi chọn trong số ø vật với giới hạn trọng lượng À⁄ chính la F(n.1
'Với giới hạn trọng lượng /, việc chọn giá trị tối ưu trong số các vật {1, 2, 4- 1,7} bao gồm haikhả năng:
_ Khả năng thứ nhất: Nêu không chọn vật ¡ thì Z(¡, /) là giá trị lớn nhất có thể bằng cách chọn trong số các vật {1, 2, ¡ - 1} với giới hạn trọng
lượng la Tic 1a FU) = F- 1.)
co Kha ning thi hai: Néu cé chon vit / thi ta đã có trong tay giá trị vị] (tất
nhiền chỉ xét trường hợp này khi w[/]<), ngoài ra ta còn chọn ¡ - 1 vật đầu tiên với giới hạn trọng lượng j - w{ï] Giá trị thu được theo khả
năng này sẽ là: F./) = v[(] + # - 1,/ - w[f))
Vi theo céch xây dựng F(1/) là giá trị lớn nhất có thể, nên Z(1/) sẽ là max trong hai giá trị thu được ở trên [5],
Trang 4031
TQ, j)= max (F(1, j, v[i] + FŒ-1, j¬wfiD, j > wii]}
_Ngoài ra ta còn có,
© F(0,j)=0: không cô vật để chọn, giá trị bing 0
+ F(,0)=0: giới hạn trọng lượng 0 thỉ không chọn được vật nào
Bài toán Palindrome trình by trong mục 1.3.3 có hệ thức QHĐ hai biến
2.3 Khái niệm về khử đệ quy
Một hàm được gọi là đệ quy nếu trong định nghĩa của hàm đó có chứa lời gọi tới chính nó [2, 7, 10]
©) Ham đị, )) tính chiều đài lớn nhất cia palindrome thu được sau khi xóa
đi một số kí tự của đoạn kí tự s[¡,j] được định nghĩa đệ quy như sau:
* 4Œ0=1
® đŒ.j)=0.i>j
+ 6Œ) =đŒ*1,j-1) +2, nếu ï <j và sfi]= shi]
© d@.j) =max (40, 40 } néui <j vasti] = sf]