- Trang Chủ
- Cơ sở dữ liệu
- Ứng dụng thuật toán tìm đường đi nhanh nhất tìm luồng cực đại đa phương tiện tuyến tính đồng thời chi phí cực tiểu trên mạng giao thông mở rộng
Xem mẫu
- TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 10(71).2013
ỨNG DỤNG THUẬT TOÁN TÌM ĐƯỜNG ĐI NHANH NHẤT
TÌM LUỒNG CỰC ĐẠI ĐA PHƯƠNG TIỆN TUYẾN TÍNH
ĐỒNG THỜI CHI PHÍ CỰC TIỂU TRÊN MẠNG GIAO THÔNG MỞ RỘNG
APPLICATION OF THE FASTEST PATH ALGORITHM TO FINDING MAXIMUM
CONCURENT MULTICOMMODITY LINEAR FLOW WITH MINIMAL COST
ON EXTENDED TRAFFIC NETWORK
Trần Quốc Chiến
Trường Đại học Sư phạm, Đại học Đà Nẵng
Email: tqchien@dce.udn.vn
TÓM TẮT
Đồ thị và mạng mở rộng là công cụ toán học hữu ích ứng dụng trong nhiều lĩnh vực như giao thông, truyền
thông, công nghệ thông tin, kinh tế, …. [7]. Kết quả chính của bài báo là nghiên cứu thuật toán tìm luồng cực đại đa
phương tiện tuyến tính đồng thời chi phí cực tiểu trên mạng giao thông mở rộng, sử dụng thuật toán tìm đường đi
nhanh nhất trên mạng giao thông mở rộng [6]. Trên sơ sở bài toán đối ngẫu trong [7], tác giả xây dựng thuật toán
đưa tỉ lệ hàm mục tiêu hai bài toán đối ngẫu này tiến đến 1, và từ đó suy ra luồng cực đại đồng thời chi phí cực tiểu.
Đây là thuật toán tính gần đúng với tỉ lệ xấp xỉ là (1+) với dương nhỏ tùy ý. Bài báo phân tích, chứng minh các
kết quả và đánh giá độ phức tạp của thuật toán. Chương trình thuật toán được viết bằng ngôn ngữ Java với cơ sở
dữ liệu mạng mở rộng cài đặt trong hệ quản trị cơ sở dữ liệu MySQL cho kết quả chính xác.
Từ khóa: đồ thị; mạng; luồng đa phương tiện; tối ưu; xấp xỉ
ABSTRACT
Extended graph and network is a powerful mathematical tool applied in many fields such as transportation,
communication, informatics, economy, … [7]. The main result of this paper is to design a Maximum Concurent
Multicommodity Flow with Minimal Cost algorithm on extended traffic networks using the algorithm to find shortest
paths on extended networks [6]. On the basis of the dual linear programming problem studied in [7], the author
designs the algorithm to reduce the ratio of objective values of the dual and the primal problems down to 1. Then,
it follows the concurent maximal flow with minimal cost of the origin problem. This algorithm is an approximate
algorithm with a (1+)-approximation ratio, where is an arbitrary positive. The paper analyses, proves obtained
results, as well as evaluates the running time. The algorithm is coded in the programming language Java with
extended network database in the database management system MySQL and gives exact result.
Key words: Graph; Network; Multicommodity Flow; Optimization; Approximation
1. Đặt vấn đề đa phương tiện đồng thời chi phí cực tiểu trên
Bài toán tìm luồng cực đại đa phương tiện mạng giao thông mở rộng, để có thể áp dụng bài
tuyến tính đồng thời chi phí cực tiểu trên mạng toán này cho các bài toán thực tế phức tạp. Bài
giao thông mở rộng là dạng bài toán quy hoạch viết này sử dụng các khái niệm, ký hiệu, mô hình
tuyến tính được xây dựng ở công trình [7]. Tuy và kết quả trong công trình [7].
nhiên, sử dụng các phương pháp truyền thống 2. Thuật toán
trong quy hoạch tuyến tính sẽ gặp nhiều khó
Ký hiệu fej(a) là luồng phương tiện j đi
khăn nếu bài toán có nhiều loại phương tiện,
qua cạnh a, j = 1,...,k, aE, fvj(u,a,a‘) là luồng
nhiều ràng buộc về chi phí, về khả năng thông
phương tiện j đi trên cạnh a vào nút u ra cạnh a‘,
hành, … Lý thuyết đồ thị mô hình hóa bài toán
này thành bài toán tìm luồng trên mạng. Ứng j = 1,..., k, uV, a,a‘Eu.
dụng này làm cho việc giải bài toán trở nên đơn Thuật toán tìm luồng
giản và hiệu quả hơn. Vấn đề đặt ra là cần xây F ={fej(a), fvj(u,e,e‘)| aE, (e,u,e‘)Bảng bV,
dựng một thuật toán tổng quát tìm luồng cực đại j=1,...,k}
85
- TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 10(71).2013
Luồng F có thể vi phạm ràng buộc về khả
năng thông qua cũng như ràng buộc về chi phí.
D leis, j , lvis, j , is, j = le s
i , j (e).c E (e) +
eE
Tuy nhiên, theo mục 3, từ luồng F ta nhận được
luồng tối ưu sau khi chia nó cho một hằng số. lv
vV
s
i , j (v).cV (v) +B. i, j
s
= le
eE
s 1
i , j (e).c E (e) +.
Khởi tạo: fej(a)=0 aE, fvj(u,e,e‘)=0
(e,u,e‘)Bảng bV, j=1,...,k le s 1 s
i , j (e). f i , j + lv s 1
i , j (v).cV (v) +.
e pis, j vV
Chọn > 0 và > 0 (giá trị và xác
định ở phần phân tích sau). lv s 1
i, j (v). f i ,sj
vpis, j
Thuật toán được thực hiện bởi một số giai
+B. i , j +. i , j .b(
đoạn, mỗi giai đoạn gồm k vòng lặp (k là số s 1 s 1
pis, j ). f i ,sj =
phương tiện). Ở vòng lặp thứ j, j = 1,..., k, của
giai đoạn thứ i ta chuyển d(j) đơn vị phương tiện
D leis,j1, lvis,j1, is, j 1 +. f i ,sj le s 1
i , j ( e) +. f i ,sj
thứ j qua luồng. Việc này được thực hiện trong e pis, j
một số bước.
Xét bước thứ s. Ký hiệu length s 1
là hàm
lv s 1
i , j (v) +. f i ,sj .b( pis, j ). is, j 1
i, j v pis, j
độ dài ở đầu bước thứ s (định nghĩa theo biểu
thức (2)) và p s
là đường đi ngắn nhất từ sj đến
= D lei , j , lvi , j , i , j +.
s 1 s 1 s 1
f i ,sj .
i, j
s
dist j leis,j1, lvis,j1,is, j 1 (1)
tj theo hàm này. Nghĩa là p i, j có độ dài là
Vòng lặp thứ j của giai đoạn i kết thúc
length s 1
i, j p . Đặt
s
i, j
f s
i, j = min{c, d s 1
i , j }, B s
i, j sau q(i,j) bước, khi mà d iq, (ji , j ) = 0. Tổng luồng
= b( pis, j ). f i ,sj , trong đó c là khả năng thông gửi qua mạng ở mỗi vòng lặp không vượt quá
d(j) và chi phí ở mỗi bước không vượt quá B.
qua nhỏ nhất của các cạnh và nút trên pis, j , Giai đoạn i kết thúc, khi vòng lặp thứ k của giai
đoạn i kết thúc.
d is, j 1 là lượng phương tiện thứ j còn lại cần
Hàm đối ngẫu le và lv được tính như sau:
chuyển qua (trong số d(j) đơn vị cần chuyển qua
- Hàm đối ngẫu ban đầu:
s
trong vòng lặp này). Nếu Bi , j > B, thì ta gán lại
le10,0 = /cE(e),e E, lv10, 0 = /cV(v), v V.
s s s s s
f i, j = f i, j .B/ B i, j và B i, j = B. Chuyển f i, j
- Hàm đối ngẫu ở đầu vòng lặp đầu tiên
s
đơn vị phương tiện thứ j dọc theo p i, j . của mỗi giai đoạn i bằng hàm đối ngẫu ở cuối
giai đoạn trước (i1) :
Luồng của phương tiện j sẽ được thay đổi
như sau: lei0, 0 = leiq(1i,k1, k ) , lv i0, 0 = lviq(1i,k1, k ) .
fej(a) = fej(a) + f i ,sj a pis, j & - Hàm đối ngẫu ở đầu mỗi vòng lặp tiếp
theo j của giai đoạn i có giá trị bằng hàm đối
fvj(u,e,e‘) = fvj(u,e,e‘) + f i ,sj (e,u,e‘) pis, j ngẫu ở cuối vòng lặp trước (j1) của giai đoạn i:
Sau đó ta hiệu chỉnh lại các đại lượng lei0, j = leiq, (ji,1j 1) , lv i0, j = lviq, (ji,1j 1) .
khác như sau:
Tương tự,
d is, j = d is, j 1 f i ,sj , i,s j = is, j1 .(1+. Bis, j /B),
10, 0 = /B, i0,0 = iq(1i,k1, k ) , i0, j = iq, (ji,1j 1) .
leis, j (e) = leis,j1 (e) (1+. f i ,s j /cE(e)),e pis, j ,
Suy ra
lvis, j (v) = lvis,j1 (v) (1+. f i ,sj /cV(v)),v pis, j ,
86
- TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 10(71).2013
D le10,0 , lv10,0 , 10,0 = le 0
1,0 (e).c E (e) + D(i) D(i1) + .(i) (2)
eE Tiếp theo, ta có
lv10,0 (v).cV (v) + B.
0
1, 0 D(i) D (i )
vV
(i) (i)
= c
eE E ( e)
c E ( e) + c
vV V (v )
cV (v) + B./B Thế vào (2) ta nhận được
D(i 1)
= m. + n. + = (m+n+1) D(i) D(i1)+ D(i)/ D(i)
1 /
với m là số cạnh, n là số nút của mạng. D(i 2) D(0)
...
Ký hiệu lei, lvi, i, D(i), (i) là hàm giá trị 1 / 2
1 / i
các đại lượng ở cuối mỗi giai đoạn i. Thuật toán
Thế D(0) = (m+n+1). và giả thiết 1,
dừng sau giai đoạn t, khi mà D(t) 1.
với mọi i 1 ta có
3. Phân tích thuật toán i 1
m n 1. = m n 1. . 1
1 /
leiq, (ji , j ) D(i)
Để đơn giản, ký hiệu lei,j thay cho 1 / i
, lvi,j thay cho lviq, (ji , j ) , i,j thay cho iq, (ji , j ) . Do (i 1) (i 1)
m n 1. e m n 1. e
các biến le, lv và luôn tăng sau mỗi bước của 1 / 1
mỗi vòng lặp nên tại bước thứ s (s > 0) của vòng
Kết hợp điều kiện dừng của thuật toán là
lặp ta có (sử dụng (1))
D(t) 1, ta có
D leis, j , lvis, j , is, j = Dle s 1
i, j , lvis,j1 , is, j1 + (t 1)
m n 1. e
. f i ,sj . dist j leis,j1, lvis,j1,is, j1 1 D(t)
1
D leis,j1 , lvis,j1 , is, j1 +. f s
i, j .distj(lei,j,lvi,j, i,j).
Suy ra
Mặt khác, do tổng luồng trong q(i,j) bước (3)
t 1 1
thực hiện ở vòng lặp j là d(j), bằng truy hồi suy 1 ln
ra
m n 1
D lei, j , lvi , j , i, j
D lei, j , lvi , j , i, j
0 0 0
+
Nhận xét: Trong (t1) giai đoạn thực
hiện thuật toán trên, j = 1,.., k, ta đã chuyển
.d(j).distj(lei,j, lvi,j, i,j) = (t1).d(j) đơn vị phương tiện qua luồng. Tuy
D lei, j 1 , lvi, j 1 ,i, j 1 +.d(j).distj(lei,j,lvi,j,i,j) nhiên, luồng đã chuyển có thể vượt quá khả năng
thông qua của các cạnh và nút. Bổ đề sau đây
D lei, j 1 , lvi, j 1 ,i, j 1 +.d(j).dist (le j
i,k,lvi,k, i,k)
giải quyết vấn đề trên.
t 1
Xét tổng truy hồi k vòng lặp trong giai Bổ đề 1. > .
log1 (1 / )
đoạn thứ i, ta có
Chứng minh. Ban đầu, le0 = /cE(e), e
D lei, k , lvi, k , i, k
D lei,0 , lvi,0 , i,0 + . E, lv 0 = /cV(v), v V. Sau (t1) giai đoạn
k
d ( j).dist (le j i,k , lvi , k ,i , k ) được thực hiện, ta có D(t1) < 1, tức là
j 1
le t 1 (e).c E (e) + lv t 1 (v).cV (v) + B.t-1 < 1.
=
D lei 1, k , lvi 1, k , i 1, k + . eE vV
k Suy ra let1(e) < 1/cE(e) e E và lvt-1(v)
d ( j).dist (le
j 1
j i ,k , lvi ,k , i ,k ) < 1/cV(v) vV.
87
- TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 10(71).2013
Gọi fe(e) là tổng phương tiện qua cạnh Ở trên ta phân tích thấy sau (t1) giai đoạn
eE và fv(v) là tổng phương tiện qua nút vV thực hiện, j = 1,.., k, ta đã chuyển (t1).d(j) đơn
trong (t1) giai đoạn thực hiện. vị phương tiện qua luồng. Tuy nhiên để luồng
Xét cạnh eE. Giả sử trong quá trình xây chấp nhận, ta phải chia luồng chuyển qua mạng
dựng luồng fe(e) có cE(e) đơn vị của luồng được 1
cho lượng log1 . Vậy, j = 1,.., k, ta chuyển
chuyển qua e qua r bước, mỗi bước chuyển gs
phương tiện, g s = cE(e). Qua mỗi bước le(e) t 1
d(j), thì luồng qua mỗi cạnh eE sẽ
s
log1 (1 / )
tăng lên thừa số (1+.gs/cE(e)). Vậy qua r bước
không lớn hơn cE(e) và luồng qua mỗi nút vV sẽ
le(e) tăng lên thừa số 1 .g
s
s / c E (e) > (1+. không lớn hơn cV(v). Vậy,theo bài toán đặt ra ban
t 1
đầu, ta có >
g
s
s / cE(e)) = (1+). log1 (1 / )
.
Bổ đề 2. Cho > 0. Khi đó tồn tại và
Ta thấy, với mọi cạnh eE, cứ mỗi cE(e)
đơn vị của luồng được chuyển qua e, thì le(e) sao cho luồng tìm được của thuật toán, sau khi
tăng lên ít nhất một thừa số (1+). chia cho log1 (1 / ) , là luồng cực đại đồng
Tương tự, với mọi nút vV, cứ mỗi cV(v) thời chi phí cực tiểu với tỉ lệ xấp xỉ là (1+).
đơn vị của luồng được chuyển qua v, thì lv(v) 1
tăng lên ít nhất một thừa số (1+ ). Chứng minh: Đặt = log1 .
t 1
Mặt khác, số lần để gửi cE(e) đơn vị của
luồng qua mỗi cạnh eE ít nhất là fe(e)/cE(e) và Theo bổ đề 1 ta có > /. Thay từ (3) vào
t 1
số lần để gửi cV(v) đơn vị của luồng qua mỗi nút
biểu thức ta được
vV ít nhất là fv(v)/cV(v).
1
Lúc này, hàm cạnh le và hàm nút lv sẽ . log1
< =
thỏa bất đẳng thức sau: 1
(1 ) ln
let-1(e) le0(e). 1
fe ( e ) / c E ( e )
e E và lvt- m n 1.
1
lv0(v). 1 v V.
fv ( v ) / cV ( v ) ln
1(v)
Suy ra (1 ) ln(1 ) ln 1
m n 1.
let 1 (e)
fe(e) cE(e). log1 <
1
le0 (e) m n 1
Chọn = , thì tỉ số
1
1 / c E ( e) 1
cE(e). log1 = cE(e). log1 e E 1
/ c E (e ) ln
= (1)1, và suy ra
và 1
ln
m n 1.
lvt 1 (v)
fv(v) cV(v). log1 <
lv0 (v)
<
(1 ) ln(1 )
2
(1 ) ( 2 / 2)
2
1 / cV (v) 1
cV(v). log1 = cV(v). log1 v V. (1)3
/ cV (v)
Mặt khác theo định lý đối ngẫu yếu, ta có
Chia fe(e) cho lượng log1 (1 / ) e 1. Để /
- TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 10(71).2013
(1)3 1+ 1 3
1
. Khi đó, giá D (l )
c(e).l (e)
1 Nhìn lại, = minl = eE
(l ) k
trị =
t 1
là trị xấp xỉ cực đại với tỉ lệ
d ( j).dist (l )
j 1
j
log1 (1 / )
. Ta có thể tăng hoặc giảm bởi một thừa số r
(1+). bằng cách nhân các c(e) hoặc các d(j) lên một
Bổ đề 3. Tổng chi phí luồng trong (t1) thừa số r tương ứng (mà việc nhân này sẽ không
vòng lặp không vượt quá B. log1 (1 / ) . Nghĩa ảnh hưởng đến kết quả của bài toán, vì sau đó ta
là, tổng chi phí của luồng sau khi chia cho có thể giảm hoặc tăng bởi thừa số r).
log1 (1/ ) không vượt quá B. Gọi zi là luồng cực đại của phương tiện i, i
= 1, …, k. Đặt z = minizi/d(i). Khi đó z chính là
Chứng minh. Ta có 1,0 = /B. Sau (t1) giai phân số của các yêu cầu cần vận chuyển các
đoạn được thực hiện, ta có D(t1) < 1, tức là phương tiện một cách độc lập. Từ = , suy ra z/k
le
eE
t 1 (e).cE (e) + lvt 1 (v).cV (v) + B.t-1 < 1.
vV
z. Ta có thể chia các c(e) hoặc các d(j) cho
một số sao cho z/k = 1, để thỏa mãn giả thuyết đưa
Suy ra t1 < 1/B. Hơn nữa, mỗi khi ra ban đầu là 1. Lúc này ta cũng có k.
chuyển luồng qua mạng mà tổng chi phí tăng lên 1
Đặt T = 2. log1 tương ứng với
B, thì tăng lên một thừa số không nhỏ hơn
(1+). Vì vậy, gọi x là số lần thuật toán làm tăng 2. Nếu thuật toán không dừng lại ở T giai
chi phí lên B đơn vị, ta có 1,0.(1+)x t1 1/B đoạn thực hiện, thì chúng ta nhân đôi tất cả các
x log1 (1 / ) . d(j), (tương đương với chia đôi , nhưng vẫn
Vậy tổng chi phí của quá trình thực hiện là thỏa 1), rồi thực hiện thuật toán tiếp T giai
B. log1 (1 / ) . Khi chia luồng đạt được cho đoạn nữa. Nếu thuật toán vẫn chưa dừng, ta tiếp
tục giải pháp trên đến khi thuật toán dừng và lưu
log1 (1/ ) , ta đồng thời có tổng chi phí giảm ý lúc này vẫn thỏa 1 .
đi thừa số log1 (1 / ) , thỏa mãn yêu cầu đặt ra Ta thấy mỗi khi thực hiện T giai đoạn thì
của bài toán. giảm đi một nữa. Nếu x là số lần thực hiện T
Độ phức tạp thuật toán được trình bày giai đoạn, thì giảm đi một thừa số 2x. Ta có
và chứng minh trong mệnh đề sau.
1 /2x 2x k x log2k
Định lí. Thuật toán tính được luồng xấp
xỉ cực đại với tỉ lệ (1+) có độ phức tạp là 1
Vậy t = T.x = 2.log2k. log1 .
O(2.(2k.log2k+m).log2m.n3).
Trong đó k là số phương tiện, m là số
1
m
cạnh, n là số nút của mạng. Thay = vào ta được
1
Chứng minh. Trước tiên, chúng ta tìm số
giai đoạn mà thuật toán đã thực hiện. Theo bổ đề 1 m
t = 2.logk. log1
1 1
1 và do = , ta có 1 = log1 t
t 1 Mặt khác, mỗi giai đoạn ta thực hiện k
1 1 vòng lặp, nên số vòng lặp là k.t. Hơn thế, ở mỗi
1 + . log1 t = . log1 ,
vòng lặp, ta thực hiện một số bước. Tiếp theo, ta
đi tìm tổng số bước thực hiện của thuật toán. Ở
trong đó, và phụ thuộc vào . Ngoài mỗi bước, trừ bước sau cùng của mỗi vòng lặp, ta
ra, t còn phụ thuộc vào . tăng độ dài của ít nhất một cạnh lên (1+) lần. Xét
cạnh e bất kì, ta có l0(e)=/c(e) và lt(e)
- TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 10(71).2013
D(t1)
- TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 10(71).2013
ngôn ngữ Java với cơ sở dữ liệu mạng mở rộng
cài đặt trong hệ quản trị cơ sở dữ liệu MySQL.
Chương trình cho kết quả phân luồng cực đại
như sau:
Hệ số cực đại = 0.8723167523
Chi phí thực tế là: 594.3263411978 Hình 4.
Số phương tiện được phân luồng cho mỗi
5. Kết luận
cặp nguồn đích là 8.72.
Thuật toán tìm luồng cực đại đa phương
Phân luồng cho phương tiện đi từ nguồn 1
tiện đồng thời chi phí cực tiểu trên mạng mở
đến đích 5, nguồn 2 đến đích 4 và nguồn 3 đến
rộng trình bày ở trên có thể áp dụng giải quyết
đích 6 cho tương ứng ở hình 2, hình 3 và hình 4.
nhiều vấn đề thực tế có thể đưa về dạng bài toán
tối ưu trên mạng đa phương tiện mở rộng, ví dụ
như bài toán phân luồng giao thông, vận tải hàng
hóa, phân luồng trên mạng internet, lưu hành
phương tiện, … Chương trình thuật toán được
viết bằng ngôn ngữ Java với cơ sở dữ liệu mạng
mở rộng cài đặt trong hệ quản trị cơ sở dữ liệu
Hình 2. MySQL cho kết quả chính xác.
Hình 3.
TÀI LIỆU THAM KHẢO
[1] Naveen Garg, Jochen Könemann: Faster and Simpler Algorithms for Multicommodity Flow and
Other Fractional Packing Problems, SIAM J. Comput, Canada, 37(2), 2007, pp. 630-652.
[2] Trần Quốc Chiến: Bài toán mạng giao thông đa phương tiện tuyến tính, Đề tài NCKH cấp Bộ,
mã số B2010DN-03-52.
[3] Trần Quốc Chiến, Trần Thị Mỹ Dung: Ứng dụng thuật toán tìm đường đi ngắn nhất tìm luồng
cực đại đa hàng hóa. Tạp chí Khoa học & Công nghệ, Đại học Đà Nẵng, 3(44)2011.
[4] Trần Quốc Chiến: Ứng dụng thuật toán tìm đường đi ngắn nhất đa nguồn đích tìm luồng cực đại
đa hàng hóa đồng thời. Tạp chí Khoa học & Công nghệ, Đại học Đà Nẵng, 4(53)2012.
[5] Trần Quốc Chiến: Ứng dụng thuật toán tìm đường đi ngắn nhất đa nguồn đích tìm luồng cực đại
đa hàng hóa đồng thời chi phí cực tiểu. Tạp chí Khoa học & Công nghệ, Đại học Đà Nẵng,
5(54)2012.
[6] Trần Quốc Chiến: Thuật toán tìm đường đi ngắn nhất trên đồ thị tổng quát, Tạp chí Khoa học &
Công nghệ, Đại học Đà Nẵng, 12(61)/2012, 16-21.
[7] Trần Quốc Chiến: Mạng giao thông mở rộng và bài toán phân luồng giao thông đa phương tiện
tuyến tính, Tạp chí Khoa học & Công nghệ, Đại học Đà Nẵng. Submitted.
(BBT nhận bài: 27/07/2013, phản biện xong: 25/09/2013)
91
nguon tai.lieu . vn