TNU Journal of Science and Technology
228(02): 70 - 77
http://jst.tnu.edu.vn 70 Email: jst@tnu.edu.vn
DYNAMIC PROGRAMMING METHOD USING FORMULATING TECHNIQUE
TO SOLVE SOME TYPICAL PROBLEM IN GRAPH THEORY
Nguyen Van Nui1*, Nguyen Thi Hang2
1TNU - University of Information and Communication Technology, 2Xuan Giang High School, Ha Noi
ARTICLE INFO
ABSTRACT
Received:
18/10/2022
Dynamic programming has been proven to be an effective method to
solve class of optimization problems in the recent years. The study of
specific techniques of dynamic programming to solve optimization
problems is a really necessary issue. In this paper, we present a
dynamic programming method using formulating technique to solve
some typical problems in graph theory. Detailed steps of formulating
technique have been studied and synthesized to effectively solve a class
of typical problems in graph theory. The analysis in oder to select
suitable data structure and establish the optimal formula to effectively
solve the problem is also presented. Besides, the experiments using
python programming language has been conducted for visualizing the
results of dynamic programing method with three typical problems in
graph theory: shortest path finding, minimum spanning tree finding,
maximum network flow finding. The obtained results show that the
dynamic programming method using the formulating technique helps to
solve some typical problems of graph theory effectively.
Revised:
26/12/2022
Published:
26/12/2022
KEYWORDS
Optimization
Dynamic programming
Formulating technique
Optimal solution
Graph theory
PHƢƠNG PHÁP QUY HOẠCH ĐỘNG S DNG K THUT LP H THC
GII MT S BÀI TOÁN TIÊU BIỂU TRONG LÝ THUYẾT ĐỒ TH
Nguyễn Văn Núi1*, Nguyn Th Hng2
1Trường Đại học Công ngh Thông tin và Truyền thông – ĐH Thái Nguyên
2Trường Trung hc ph thông Xuân Giang – Hà Nội
THÔNG TIN BÀI BÁO
TÓM TẮT
Ngày nhận bài:
18/10/2022
Quy hoạch động đã được chứng minh một phương pháp hiệu qu để
giải các lớp bài toán tối ưu trong những năm gần đây. Việc nghiên cứu
các kỹ thut c th ca quy hoạch động để giải các bài toán tối ưu
mt vấn đề thc s cn thiết. Trong bài báo này, chúng tôi trình bày
phương pháp quy hoạch động s dng k thut lp h thức để gii mt
s bài toán điển nh trong lý thuyết đồ thị. Các bước chi tiết ca k
thut lập ng thức đã được nghiên cứu tổng hợp đ gii mt lớp bài
toán điển hình trong thuyết đồ th một cách hiệu qu. Phần phân tích
nhm la chn cấu trúc dữ liệu phù hợp thiết lập công thức ti ưu đ
giải bài toán một cách hiu qu cũng được trình y. Bên cạnh đó, các
thc nghim s dng ngôn ngữ lập trình python đã đưc tiến hành đ
trực quan hóa kết qu phương pháp quy hoạch đng với 3 bài toán điển
hình trong lý thuyết đồ thị: tìm đường đi ngắn nhất, tìm cây khung nhỏ
nhất, m luồng cực đại. Kết qu thu được cho thy phương pháp quy
hoạch động s dng k thut lập ng thức giúp giải hiu qu mt s
bài toán điển hình của lý thuyết đồ th.
Ngày hoàn thiện:
26/12/2022
Ngày đăng:
26/12/2022
T KHÓA
Tối ưu hóa
Quy hoạch động
K thut lp h thc
Nghim tối ưu
Lý thuyết đồ th
DOI: https://doi.org/10.34238/tnu-jst.6715
* Corresponding author. Email: nvnui@ictu.edu.vn
TNU Journal of Science and Technology
228(02): 70 - 77
http://jst.tnu.edu.vn 71 Email: jst@tnu.edu.vn
1. Gii thiu chung
Bài toán tối ưu là bài toán thường có nhiều phương án chấp nhận được và mỗi nghiệm một
giá trị đánh giá. Mục tiêu đặt ra ca bài toán là tìm kiếm li gii tt nht, tối ưu nhất.
Phương pháp quy hoạch động dùng để giải bài toán tối ưu tính chất đệ quy, tức việc tìm
phương án tối ưu cho bài toán đó thể đưa về tìm phương án tối ưu của mt s hu hạn các bài
toán con [1] [5]. Đối vi nhiu thuật toán đệ quy, nguyên chia để tr (divide and conquer)
thường đóng vai trò chủ đạo trong vic thiết kế thuật toán. Để gii quyết một i toán lớn, ta chia
nó thành nhiều bài toán con cùng dạng với nó để có thể gii quyết độc lp. Trong phương pháp quy
hoạch động, nguyên lý này càng được th hiện rõ: Ti mỗi bước, bài toán cn gii hoặc có lời gii
ngay, hoc s được chia thành nhiều i toán con nhỏ hơn, vì vậy, vic gii bài toán này chính
gii tp c bài toán con của . Tuy nhiên, khi không biết chính xác cn phi gii nhng bài toán
con c th nào, ta sẽ đi giải quyết tt c các bài toán con lưu trữ nhng li giải hay đáp số ca
chúng vi mc đích sử dng li theo mt s phi hợp o đó đ gii quyết những bài toán tổng quát
hơn. Đó cnh điểm kc nhau giữa Quy hoạch động và phép đệ quy và cũng là nội dung phương
pháp quy hoạch động. Phép đệ quy bắt đầu t i toán lớn phân thành nhiều bài toán con đi
gii từng bài toán con đó. Việc gii từng bài toán con lại đưa về pp phân tiếp thành nhiều i
toán con nhỏ hơn và lại đi giải quyết bài toán nhỏ n đó bất k nó đã được giải hay chưa. Quy
hoạch động bắt đu t vic gii tt c các bài tn nhỏ nht (bài toán cơ sở) đ t đó từngc gii
quyết nhng i toán lớn hơn, cho tới khi gii được bài tn lớn nht (bài toán ban đu).
S xut hin của phương pháp quy hoạch động gn lin với tên tui của nhà bác học người
M, R.Bellman [6], [7] trong những năm 50 của thế k này đã áp dụng thành công cho lớp
các bài toán tối ưu. Chính nhờ s đơn giản tường minh của nguyên tắc này phương pháp
quy hoch động t ra đặc bit hp dẫn và phù hợp cho vic giải các lớp bài toán tối ưu, trong đó
có một s bài toán tiêu biểu của lý thuyết đồ th.
Hình 1 thể hiện ý tưởng của Nguyên tối ưu R. Bellman. Tối ưu bước th n bằng cách tối
ưu tất cả con đường tiến đến bước n-1 và chọn con đường có tổng chi phí từ bước 1 đến bước n-1
và từ n-1 đến n là thấp nhất (nhiều nhất) .
Hình 1. Sơ đ nguyên lý của quy hoạch động
Nguyên lý R. Bellman cũng th được phát biểu theo một cách khác như sau: Với mỗi quá
trình điều khin tối ưu, bắt đầu t trạng thái A0. Khi xây dựng trạng thái Ak bt k trong quá trình
đó từ trạng thái Ak-1, nếu Ak-1 tối ưu thì Ak xây dựng được s tối ưu. Vậy trạng thái An cui
cùng sẽ là tối ưu .
Ưu điểm ca phương pháp quy hoạch động: Chương trình, thuật toán được gii bng quy
hoạch động chy nhanh hơn so với phương pháp giải thông thường không s dng quy hoch
động [3], [5], [7] [14]. Tác giả Nguyễn Xuân Huy [5] đã trình bày v mt s vấn đề tư duy sáng
to trong thuật toán và lập trình. Trong bài báo này, tác giả đã chỉ ra rằng phương pháp quy hoạch
động một trong những phương pháp nhanh hiệu qu nhất để gii quyết các bài toán tối ưu
do việc lưu trữ các kết qu đã giải trước đó để làm cơ sở h tr cho việc xác định li gii tối ưu ở
bước tiếp theo. Nhóm tác giả Nguyễn Xuân My, Hồ Đàm, Trần Đỗ Hưng, Quang [7]
TNU Journal of Science and Technology
228(02): 70 - 77
http://jst.tnu.edu.vn 72 Email: jst@tnu.edu.vn
cũng đã hệ thng mt s bài toán chọn lc trong tin học phương pháp giải chúng, trong đó
nhn mạnh đến phương pháp quy hoạch động hiu qu nhất đối vi lớp các bài toán tối ưu
bài toán giải gần đúng. Trong [11], [12], các tác giả đã chứng t s phù hợp hiệu qu ca
phương pháp quy hoạch động trong gii quyết các bài toán tiêu biểu của lý thuyết đồ th.
Bên cạnh những ưu điểm, phương pháp quy hoạch động vn tn ti mt s hn chế nhất định
trong những trường hp sau đây: (i) Không tìm được công thức truy hi; (ii) Việc tìm công thức,
phương trình truy toán hoặc tìm cách phân bài toán nhiu khi rt tốn kèm, dễ b sai sót. Đồng
thời, không phải lúc nào cũng thể kết hp vic giải bài toán con đều cho kết qu của bài toán
lớn hơn. (iii) Có thể tốn không gian bộ nh do cn phải dùng thêm mt biến trung gian lưu trữ g
tr, li gii của các bài toán con.
T những phân tích trên thể thy rằng, phương pháp quy hoạch động là một trong nhng
phương pháp hiệu qu cao trong vic gii quyết nhiều bài toán thực tế, đặc biệt lớp các bài
toán tối ưu các bài toán tiêu biểu của thuyết đồ th. Việc nghiên cứu các phương pháp, kỹ
thuật để gii quyết nhng hn chế trên, từ đó hệ thống hóa được một cách có hệ thng vic gii
bài toán bằng phương pháp quy hoạch động một vấn đề thc s cn thiết. Trong nghiên cứu
này, nhóm tác giả s nghiên cứu và trình bày phương pháp quy hoạch động s dng k thut lp
h thức để gii mt s bài toán tiêu biểu của lý thuyết đồ thị. Các kết qu nghiên cứu thc nghim
cũng được trình bày và mô phỏng cho s hiu qu, trc quan ca quy hoạch động trong vic gii
quyết mt s bài toán tiêu biểu của lý thuyết đồ th.
2. Phƣơng pháp nghiên cứu
2.1. K thut lp h thức và kỹ thut t chc d liu trong giải bài toán bằng quy hoạch động
2.1.1. K thut lp h thc
Lp h thức kỹ thut biu th s tương quan quyết định của bước đang xử với các bước
đã xử lý trước đó. H thức này là hàm đệ quy hoặc công thức truy hi.
Da 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 thc biu diễn tương quan quyết đnh của bước đang x với cácớc đã x trước đó. Hoặc
tìm cách phân rã bài toán thành cáci toán con tương tự có kích thước nh hơn, tìm hệ thức nêu
quan h gia kết qu i toán ch thước đã cho với kết qu ca các bài toán con ng kiểu
ch thước nh hơn của nó nhằm xây dựng phương trình truy toán (dạng hàm hoặc th tục đệ quy).
2.1.2. K thut t chc d liu
Phương pháp quy hoạch động lưu giữ kết qu đã tìm kiếm được vào một Bảng phương án làm
gi thiết cho việc tìm kiếm nhng kết qu của trường hợp sau. Bảng phương án sẽ được làm đầy
giá trị bi kết qu ca những trưng hợp trước đã được gii. Như vậy phương pháp quy hoạch đng
chính điền o Bng phương án những kết qu li gii của bài toán con đã gii vi mục đích
tránh khỏi việc tính toán thừa. Vic s dng k thut t chc d liu và cấu trúc phù hợp cho Bng
phương án nàynh cht quan trng trong gii quyết bài toán quy hoạch động.
Trong lập trình, Bảng phương án” này thường được biu din bng mng hai chiều để lưu
tr giá trị của các phương án trước đó. Để thu hp s chiu quy hoạch động, mt trong nhng k
thut ph biến đưc s dụng đó kỹ thut chng mng. K thuật này giúp đưa thuật toán quy
hoạch động hai chiu v quy hoạch động mt chiu. Bảng phương án (hay hàm quy hoạch động,
hàm mục tiêu) được tính theo cột (hoặc hàng) cột sau (hàng sau) xác định ch thông qua một
ct liền trước (hàng trước).
2.2. ng dng quy hoạch động gii mt s bài toán tiêu biểu trong lý thuyết đồ th
2.2.1. Bài toán Tìm các đường ngn nht
Bài toán: Cho một đồ th hướng gồm n đỉnh, s t 1..n với các cung (u, v) ớng đi
t đỉnh u đến đỉnh v và có chiều dài thể hiện đường đi nối t đỉnh u đến đỉnh v. Tìm mọi đường đi
ngn nht t một đỉnh s cho trước ti các đỉnh còn lại của đồ th.
TNU Journal of Science and Technology
228(02): 70 - 77
http://jst.tnu.edu.vn 73 Email: jst@tnu.edu.vn
Phương pháp Quy hoạch động
Phương pháp quy hoạch động được trình bày trên cơ sở thuật toán Dijkstra, bản cht ca thut
toán là sửa đỉnh, chính xác là sửa trng s ca mi đỉnh.
Đối tượng ta quan tâm đây với đỉnh i nào đó (i s) thì đường đi ngắn nht t đỉnh s
đến đỉnh i bao nhiêu.
Theo sơ đồ giải các bài toán quy hoạch động trưc hết ta xây dựng h thức cho bài toán.
Gi p(i) độ dài đường ngn nht t đỉnh s đến đỉnh i, 1 i n. Ta thấy, hàm p(i) phi tho
mãn các tính chất sau:
a) p(s) = 0: đưng ngn nht t đỉnh xut phát s đến chính đỉnh đó có chiều dài 0.
b) Vi i s, muốn đến được đỉnh i ta phải đến được một trong các đỉnh sát trước đỉnh i. Nếu j
là một đỉnh sát trước đỉnh i, theo điều kin của đầu bài ta phải có: a[j,i ] > 0, trong đó a[j, i] chính
là chiều dài cung (j i).
Trong s các đỉnh j sát trước đỉnh i ta cn chọn đỉnh nào?
hiu path(x, y) đường đi ngắn nhất qua các đỉnh, xuất phát từ đỉnh t x kết thúc tại
đỉnh y x. Khi đó đường t s đến i s đưc chia làm hai đoạn, đường t s đến j và cung (j i):
path(s,i) = path(s,j)+ path(j,i) (1)
trong đó path(j, i) ch gm mt cung: path(j,i) = (j → i)
Do p(i) p(j) phải là ngắn nht, tức là phải đạt các trị min, ta suy ra điều kiện để chọn đỉnh j
sát trước đỉnh i tổng chiều dài đường t s đến j chiều dài cung
(j i) là ngắn nhất. Ta thu được h thc sau:
( ) * ( ) , - , - + (2)
Để ý rằng điều kin a[j, i] > 0 cho biết j là đỉnh sát trước đỉnh i.
Điều tài tình Dijkstra đã cung cp thuật toán tính đồng thi mọi đường đi ngắn nht t đỉnh
s đến các đỉnh còn li của đồ th.
Thuật toán thực hin n ln lp, mi ln lp ta chọn và xử lí một đỉnh của đồ th. Ti ln lp th
k ta khảo sát phn của đồ th gm k đỉnh với các cung liên quan đến k đỉnh được chn trong phn
đồ th đó. Ta gọi phần này đồ th con thu được tại bước x thứ k của đồ th ban đầu
hiệu G(k). Với đồ th y ta hoàn tất bài giải tìm mọi đường đi ngắn nht t đỉnh xuất phát s
đến mọi đỉnh còn lại ca G(k). Chiều dài thu được ta gán cho mỗi đỉnh i như một trng s p[i].
Ngoài ra, để chun b cho bước tiếp theo ta đánh giá lại trng s cho mọi đỉnh k sau của các
đỉnh trong G(k).
Khi trị: Gán trọng s p[i] = ∞ cho mọi đỉnh, tr đỉnh xuất phát s, gán trị p[s] = 0.
Ý nghĩa của thao tác này khi mới đứng đỉnh xuất phát s của đồ th con G(0), ta coi như
chưa thăm mảnh nào của đồ th nên ta chưa có thông tin về đường đi từ s đến các đỉnh còn lại ca
đồ th ban đầu. Nói cách khác ta coi như chưa có đường đi từ s đến các đỉnh khác s do đó, đ
dài đường đi từ s đến các đỉnh đó là ∞.
Giá trị ∞ được chọn trong chương trình là: init = 1e7
Tại bước lp th k ta thc hiện các thao tác sau:
+ Trong s các đỉnh chưa xử lí, tìm đỉnh i có trọng s min.
+ Vi mỗi đỉnh j chưa x kề sau với đỉnh i, ta chnh li trng s p[j] của đỉnh đó theo
tiêu chuẩn sau:
Nếu p[i] + a[i, j] < p[j] thì gán cho p[j] giá trị mi: p[j]=p[i]+a[i,j]
Ý nghĩa của thao tác này là: nếu độ dài đường đi path(s, j) trong đồ th con G(k - 1) không qua
đỉnh i mà lớn hơn độ dài đường đi mới path(s, j) có qua đỉnh i thì cập nht lại theo đường mới đó.
+ Sau khi cp nht ta cần lưu lại vết cp nhật đó bằng lệnh gán before[i] = j với ý nghĩa là,
đường ngn nht t đỉnh s tới đỉnh j cần đi qua đỉnh i.
+ Đánh dấu đỉnh i là đã xử lí.
Mảng p[i] lưu giữ kết qu của bài toán, độ dài đường đi ngắn nht t đỉnh s, tới đỉnh i (i =1,n)
Độ phc tp: O(n2) [7]
TNU Journal of Science and Technology
228(02): 70 - 77
http://jst.tnu.edu.vn 74 Email: jst@tnu.edu.vn
Như vậy, ta đồ gii quyết bài toán tìm đường đi ngắn nhất trên đ th áp dụng phương
pháp quy hoạch động s dng k thut lp h thức như sau.
c 1. Lp h thc quy hoạch động
( ) * ( ) , - , - + (3)
c 2. T chc d liu: S dng mng mt chiều p[i] để lưu kết qu ca bài toán
2.2. Bài toán Tìm cây khung nhỏ nht
Bài toán: Cho G=(V, E) đ th hướng, liên thông. Với mi cnh e E người ta cho
tương ứng vi mt s w(e) gọi là trọng s.
Yêu cầu: Tìm cây khung có trọng s nh nht trong s các cây khung của đồ th G.
2.2.1. Thuật toán Prim
- c 1: Chn cnh bt k có trọng s nh nhất, đặt nó vào cây.
- ớc 2: Ghép vào cây cạnh trọng s nh nhất liên thuộc vi một đỉnh của cây không
tạo ra chu trình trong cây.
- c 3: Nếu (n-1) cạnh được ghép vào cây thì thuật toán dừng, nếu chưa thì quay li tiếp tc
bước 2.
2.2.2. Thuật toán Kruskal
- c 1: Chn cnh bt k có trọng s nh nhất ghép vào cây.
- ớc 2: Ghép cạnh có trng s ti thiểu vào cây và không tạo thành chu trình.
- c 3: Nếu (n-1) cạnh được ghép vào cây thì thuật toán dừng, nếu chưa thì quay li tiếp tc
bước 2.
2.2.3. Phương pháp Quy hoạch
c 1: Lp h thc.
Gọi T(k) (k=1, 2, ...,n), đ th nhận được trong vòng lặp th k, một đồ th con của cây
khung nh nht ca G, do đó T(n) chính là một cây khung nhỏ nht ca G.
T(1) ch gồm đỉnh v* của G, do đó T(1) đồ th con ca mọi cây khung của G. Gi s T(i)
(1≤i<n) là một đồ th con ca một cây khung nhỏ nht ca G. ET(1)=
Theo thuật toán Prim và Karuskal ta có cùng mt h thc truy hi:
ET(i+1)=ET(i)
{ei+1}, i=
1,1 n
(4)
(Vi ei+1 cạnh ngn nht trong tt c các cạnh một đầu mút thuộc VT(i), đầu mút kia
không thuộc VT(i). Nói cách khác ei+1= (u,v) thì u
VT(i) v
VT(i) T - Theo thuật toán Karuskal,
ei+1 là cạnh ngn nht trong tt c các cạnh Theo thuật toán Prim).
Khi đó: T(i+1) = T(i)
{u,v}
c 2: T chc d liu: Ta s dng mảng T[i] để lưu kết qu bài toán.
2.3. Bài toán Tìm luồng cực đại trong mng
2.3.1. Mt s định nghĩa
Định nghĩa 1. Ta gi mạng đồ th hướng G=(V,E), trong đó duy nhất một đỉnh s
không có cung đi vào gọi điểm phát, duy nhất một đỉnh t không cung đi ra, gọi đim thu
mỗi cung e=(v,w) E được gán với mt s không âm c(e)= c(v,w) gọi khả năng thông qua
ca cung e.
Định nghĩa 2. Gi s cho mng G=(V,E), ta gi lung f trong mạng G=(V,E) ánh xạ f:
E gán cho mỗi cung e=(v,w) E mt s thực không âm f(e)=f(v,w), gọi lung trên cung
e thỏa mãn các điu kin sau:
1) Luồng trên mỗi cung e không vượt quá khả năng thông qua của nó.