L IC
tài Nghiên c u khoa h c này là nh s
. Em xin chân thành c
ng d n và
c a gi ng viên Ts.
c a th y.
Em
t c
y cô trong khoa K thu t Công ngh thông tin
i h c Qu
n tình gi ng d y, truy
t nh ng ki n th c quý báu
và t
u ki n cho em hoàn thành báo cáo này.
M
g ng r t nhi
tài v i t t c s n l c c a b n
i nh ng thi u sót. Em r t mong nh
c s ng h
c a các th y cô và các b n.
Qu ng Bình, ngày 20 tháng 05
Sinh viên th c hi n
Ph m Tu n V
M
U .......................................................................................................1
1. Lý do ch
tài .......................................................................................1
2. M c tiêu nghiên c u ..................................................................................1
3. N i dung nghiên c u..................................................................................1
4. i
ng, ph m vi nghiên c u .................................................................1
u ...........................................................................1
1:
LÝ THUY
1.1. M t s khái ni
1.1.2. Các lo
th
TH ..............................3
th ....................................................3
th .................................................................................3
th ......................................................................................3
th b ph
th
th E
th ......................3
th b ph n....................................................................3
th .................................................................3
th n a E
th Hamilton..................................4
th
th n a Euler ..........................................................4
th Hamilton ...................................................................................8
1.4. Bi u di
th trên máy tính ................................................................8
1.4.1. Bi u di n b ng ma tr n k , ma tr n tr ng s : ......................................8
1.4.2. Danh sách c nh ....................................................................................9
1.4.3. Danh sách k ........................................................................................9
2: GI I THI U M T S THU
2.1. Thu t toán tìm ki
TH .....12
th ............................................................12
2.1.1. Tìm ki m theo chi
th ..................................................12
2.1.2. Tìm ki m theo chi u r
th ................................................12
m tra tính liên thông ..........................................14
th có tr ng s
n nh t ........................14
n nh
th không có tr ng s . .........................14
n nh t.....................................................................15
2.2.3. Thu t toán Ford Bellman ................................................................15
2.2.4. Thu t toán Dijkstra ............................................................................15
2.2.5. Thu t toán Floyd
n nh t gi a t t c các c
nh. .....16
3: LU NG C
3.1. Gi i thi u lu ng c
NG
NG D NG .................18
i........................................................................18
3.1.1. Bài toán lu ng trên m ng...................................................................18
3.1.2. Bài toán lu ng c
i trong m ng ....................................................18
3.1.3. M ng, lu ng trong m ng, bài toán lu ng c
i .............................18
3.2.
ng d ng bài toán lu ng c
i trong m ng .....................................19
3.3. M t s bài toán t
h p ng d ng t bài toán lu ng ...................25
3.3.1. Bài toán v th y l i............................................................................26
3.3.2. Bài toán v h th
i di n chung..................................................27
3.3.3. V m t bài toán t
i r c. ...........................................................27
3.4. K t lu n.................................................................................................28
4:
...............................................29
4.1. Phát bi u bài toán..................................................................................29
4.2. Yêu c u bài toán ...................................................................................30
4.3. C
...........................................................................31
..................................................................33
.....................................34
..............................................................................35
K T LU
NG PHÁT TRI N...................................................36
TÀI LI U THAM KH O ...........................................................................37
PH L C.....................................................................................................38
DANH M C T
VI T T T:
Ti ng vi t:
NNLT
Ti ng anh:
Linked Adjancency List
Strongly connected
Depth first search (DFS)
BFS
D
DANH M C HÌNH NH
Hình 1.1
th
th không liên thông.....................................4
Hình 1.2. Liên thông m nh và liên thông y u ...............................................4
Hình 1.3. B y cây c u trên sông Pregel.........................................................5
Hình 1.4
th bi u di n thành ph Konigsberg .........................................5
Hình 1.5
th
th n a Euler ....................................................6
Hình 1.6
........................................................................8
Hình 1.7
1 .....................................9
Hình 4.1. C
..................................................................31
Hình 4.2. Giao di n c a ng d ng ..............................................................32
Hình 4.3. Giao diên ch y ng d ng .............................................................32
Hình 4. 4. V
m.......................................................................................33
Hình 4.5. V
ng......................................................................................34
Hình 4.6. Các ch
...............................................35
M
U
1.
T
Hi n nay có nhi u tài li
t v lý thuy
th v i nh ng
n
giúp cho nh
i mu n nghiên c u v lý thuy
th tham
kh o. Tuy nhiên h u h t các tài li
u ch nghiên c u v lý thuy t và xây d ng các
thu t toán chung
u tài li u vi t v các ng d ng các
thu
gi i bài toán ng d ng c th .
hi n th c hóa trong vi c h c t p, gi ng
d y Tin h c
ng Trung h c ph
i h c, Cao
ng thì lu
Tì
là
3.
-
:
4.
-
.
.
5.
u lý thuy t:
+ Nghiên c u lý thuy t v
th , các thu t toán ng d ng c
+ H th ng hóa m t s ng d ng c
th .
1
th .
S d
u th c nghi m:
u lý thuy t k t h p v i nghiên c u th c nghi m:
+ Nghiên c u, tìm hi u ng d
+ Vi
tài trong th c t .
bài toán ng d ng c th .
2
1:
LÝ THUY
TH
th
:
th là m t c u trúc r i r c bao g
nh và các c nh n i các
nh c
th . Các lo
th
c phân bi t b i ki u và s
ng c nh
n
th [2].
- N u c nh u =
nh phân bi
nh k
nhau.
- N u u = (x,x) thì u là c
nh trùng nhau ta g i
t khuyên
- N u u = (x,y) mà x,y là c
nh có phân bi t th t hay có
ng t
n y thì
u là m
x là g c còn y là ng n ho
nh vào.
- Khi gi a c
nh (x, y) có nhi
t c nh thì ta nói nh ng c nh cùng c p
nh là nh ng c nh song song hay là c nh b i.
1.1.2. Các lo
th
th
ng
th
cg
th
ng n u t t c các c nh u U mà c p
nh thu
X) không phân bi t th t
th
ng là
th không có b t k m t cung nào [2].
th
ng
th
cg
th
ng n u t t c các c nh u U mà c p
nh thu
X) có
phân bi t th t
th
th mà m i u=(x, y)
u là cung [2].
th
th b ph n
th G = <X,U>
-N
th
ts
n còn l i c
th
cg
-N
th G ta b
ts c
l ic
th
cg
th b ph n c
1.2.2. Tính
th
1.2.2.1.
:
nh(cung) xu t phát t
th con c
th
nguyên
nh thì ph n còn
th G.
[2].
G: liên thông;
H: không liên thông
3
G
H
Hình 1.1.
th
th không liên thông
G=(V,E) và v
trong
G thì
[2].
1.2.2.2.
là liên thông
Hình 1.2. Liên thông m nh và liên thông y u
[2].
:
[2].
E
E
Hamilton
1.3.1.
th Euler
th n a Euler
Xét bài toán 7 cây c u Konigsberg [3]
Thành ph Konigsberg thu
c C ng hoà Litva có con sông Pregel ch y qua,
gi a sông có cù lao Kneiphof t o nên b
i
ng 7 cây c
n
t này l i v i nhau.
4
i Thu
i
xu t
có th
7 cây c u, m i c u ch
t l n r i quay tr v
c hay không?
Bài toán
a thành ph . H háo h
c r ng bài toán trên là không
gi
c.
Hình 1.3. B y cây c u trên sông Pregel
N u bi u di n m
t: A, B, C, D b
có c nh n i gi a chúng n u có c u n
i c nh c
th
t l n.
Hình 1.4.
Trong lý thuy
t p h p các c nh. T
th
nh c a m
th
ng và
vi c tìm m t
th bi u di n thành ph Konigsberg
th
ph
.
- Chu trình Euler
5
nh, E là
chu
-
Hình 1.5
T
th
th n a Euler
u ki n c
cho s t n t i c a chu trình vô
:
[2].
(
(
1 khuyên.
+
+
.
z = (b, c).
y,
y,
6
ay
= (b, c) và y = (c,
át
có chu trình Euler C1, G2 có chu trình Euler C2,
G3 có chu trình Euler C3. Ta x
(a,
(b,
(c,
z = (b, c)
G
có chu trình Euler C1, G2
y ta có chu
: Cho
k/2.
[3].
n=1
b
và P
-2
R = {u
S = {u
T = {u
d I (v )
d O (v )
=
v V
v V
d I (v ) d O ( v )
k=
th
d O ( v ) d I (v )
=
v S
d I ( v ) d O (v )
v S
V : dI(v) = dO(v)}
V : dI(v) > dO(v)}
V : dI(v) < dO(v)}
v T
d O ( v ) d I (v )
=
th Euler vì nó có chu trình Euler a - e - c - d - e - b - a.
v T
7
th
a - b, vì th
th
Euler a - c - d - e - b - cth n a Euler.
Euler.
th Hamilton
1.3.2.1. Chu trình Hamilton
Gi s G =
th
tc
m tl n.
1.3.2.2.
ng.
nh c
th , m i
ng Hamilton
th G = <X, U>
nh m
t c các
t l n.
Hình 1.6
nào
phân tíc
1.4.1. Bi u di n b ng ma tr n k , ma tr n tr ng s :
1.4.1.1.
Xét
1, 2,. . . ,n}
e2,. . .,em }
A={ ai,j : i,j=1, 2,. . . ,n}
xác
ai, j
E và
ai,j
E, i, j=1, 2,. . .,n.
8
e1 ,
Hình 1.7.
1
1.4.1.2.
e.
C= {c[i,j], i,j=1, 2,. . .,n}
E
và c[i,j]=
(i,j)
E
là:
2
1.4.2. Danh sách c nh
Chú ý: Tro
1.4.3. Danh sách k
9
: Ke(v)=
u V: (v,u) E
for u Ke(v) do. . .
trúc Forward Star):
Const
m=1000; m-so canh
n= 100; n-so dinh
var
Ke:array[1..m] of integer;
Tro:array[1..n+1] of integer;
,n,
Tro[n+1]=2m+1.
for u Ke(v) do
begin
....
end.
:
For i:=Tro[v] to Tro[v+1]-1 do
Begin
U:=Ke[i];
....
End;
(Linked
Program AdjList;
Const
maxV=100;
Type
Link=^node;
node=record
v:integer;
next:link;
End;
Var
10
j,x,y,m,n,u,v:integer;
t:link;
Ke:array[1. .Vmax] of link;
Begin
(*Khoi tao*)
for j:=1 to n do Ke[j]:=nil;
for j:=1 to m do
begin
readln(x,y);
new(t); t^.v:=x, t^.next:=Ke[y]; Ke[y]:=t;
new(t); t^.v:=y, t^.next:=Ke[x]; Ke[x]:=t;
end;
for J:=1 to m do
begin
t:=Ke[j];
while t^.next<>nil do
begin
write(t^.v:4);
t:=t^.next;
end;
end;
readln;
End.
K t lu n: Lý thuy
th là m ng r t l n n m trong toán r i r
th
trò quan tr
toán cho tin h c và có nhi u ng d ng trong th c ti n. Vì v y
vi c nghiên c
lý thuy
th là r t c n thi t giúp cho vi c ng d ng xây d ng
các thu t toán c
th . Trong ph m vi nghiên c
tài, nh ng v n
mà tôi nêu
trên là m t ph n c a lý thuy
th , nh m m
c v cho quá trình nghiên c u
11
2: GI I THI U M T S
THU
TH
2.1. Thu
2.1.1. Tìm ki m theo chi
th
Tìm ki
u sâu hay tìm ki m theo chi u sâu (DFS) là m t thu t
toán duy t ho c tìm ki m trên m t cây ho c m t
th . Thu t toán kh
ut ig c
(ho c ch n m
c) và phát tri n xa nh t có th theo m i nhánh.
ng thu t toán:
1. DFS trên
ch và m
th
ng
i m t cu n
nh s
th
u, tránh b l
i
t c a trong mê cung.
2. Ta b
ut
nh s, bu
u cu n ch vào s
u nh này
u s là nh hi n hành u.
3. Bây gi , n
c nh (u,v) b t k .
4. N u c nh (u,v) d
n nh
v, ta quay tr v u.
5. N u nh v là nh m i, ta di chuy
nv
n ch
d u v là
t v thành nh hi n hành và l p l
c.
6. Cu i cùng, ta có th
n m t nh mà t
t c các c nh k v
u
d
n các nh
quay lui b ng cách cu
c
cu n ch và quay l
n khi tr l i m t nh k v i m t c nh
c khám
phá. L i ti p t
7. Khi chúng ta tr v s và không còn c nh nào k v
khám phá là
lúc DFS d ng.
Thu t toán:
Procedure DFS(v);
(* Tìm ki m theo chi u sâu b
ut
nh v; Các bi n Chuaxet,
Ke, là toàn c c*)
Begin
Tham_dinh(v);
Chuaxet[v] := false;
for u Ke(v) do
if Chuaxet[u] then DFS(u);
t xong *)
m theo chi u sâu
th
c th c hi n nh thu t toán sau:
BEGIN (* Initialiation *)
for v V do Chuaxet[u] := true;
for v V do
if Chuaxet[v] then DFS(v);
END.
2.1.2. Tìm ki m theo chi u r
th
12
Trong lý thuy
ki
th
nh c
th
ti p theo.
1.
2. L
th , tìm ki m theo chi u r ng (BFS) là m t thu t toán tìm
c tìm ki m ch bao g
cm t
nh k v
nh v a cho vào danh sách có th
ng t i
nh g
ng t i)
i và quan sát nó
ng quá trình tìm ki m và tr v k t qu .
nh k v
nh v
N
N u không ph i thì chèn t t c
i.
3. N
i là r ng, thì t t c
nh có th
c quan sát
d ng vi c tìm ki m và tr v "không th y".
4. N
i không r ng thì quay v
c 2.
Thu t toán:
Procedure BFS(v);
(* Tìm ki m theo chi u r ng b
ut
nh v; Các bi n
Chuaxet, Ke là bi n toàn c c *)
begin
QUEUE:= ;
QUEUE:<= v; (* K t n p v vào QUEUE *)
Chuaxet[v]:= false;
While QUEUE do
Begin
p <= QUEUE; (* L y p t QUEUE *)
nh(p);
for u Ke(v) do
if Chuaxet[u] then
begin
QUEUE <= u; Chuaxet[u]:= false;
end;
end;
end;
m theo chi u r
th th c hi n nh thu t toán sau:
BEGIN (* Initialization *)
for v V do Chuaxet[v]:= true;
for v V do
if Chuaxet[v] then BFS(v);
13
END.
m tra tính liên thông
nh
Gi s
th
n t.
phân tích, th t c DFS(s) (BFS(s)) s
t tc
nh thu c cùng m t
thành ph n liên thông v i s. Sau khi th c hi n xong th t c, n u Chuaxet[t] = true,
s n t, còn n u Chuaxet[t]=false thì t thu c
cùng thành ph n liên thông v i s, hay nói m t cách khác t n t i
s n t.
ng h p t n t
n Truoc[v
ghi nh
nh
v
mt s nv
i v i th t c DFS(v) c n s a câu l nh
if
if Chuaxet[u] then
begin
Truoc[u]:=v; DFS(u);
end;
i v i th t c BFS(v) c n s
i câu l nh câu l nh if trong
if Chuaxet[u] then
begin
QUEUE u; Chuaxet[u]:= false; Truoc[u]:= p;
end;
n tìm s
c khôi ph c theo quy t c sau:
T p1:=
2.
n nh
th không có tr ng s .
th không có tr ng s
th h u h n trên các c nh không có tr ng s . Bài
n nh t gi
th không có tr ng s G=
U> là tìm
nh a, b sao cho có s các c nh là ít nh t [4].
Thu t toán
c 1: T
nh a ta ghi s
nh có c
nh a n ta ghi s 1.
Gi s
i i, t c là ta
c các t
nh là A(0) = {a}, A(1),
pt tc
nh
c ghi b i s
nh t p
b i s i + 1 là A(i+1) = {x / x X, x A(k) v i k = 0,...,i và t n t i y
A(i) sao cho t y có c nh (cung) t i x}. Do tính h u h n c
th , sau m t s h u
h
c, thu t toán d ng l i và cho k t qu là t p các nh có ch
s b i m là A(m).
c2
b
u này ch ng t
n b có m c nh
ng ng n nh
tìm t t c
ng
dài m ng n nh
t
n b, ta xu t phát t
cv
t c:
14
- Tìm t t c
nh có c nh t
c ghi s m-1, gi s
x[i,k] (k=1,2,..)
-V im
nh x[i,k] tìm t t c
nh có c nh v i x[i,k] (k=1,2...) ghi s m-2.
B ng cách lùi d n tr l
nm
nh ghi s
nh a.
T tc
c trên là
dài ng n
nh t là m c n tìm.
n nh t
Trong ph n này chúng ta ch
th
ng G=(V,E), |V| = n, |E|=m v i các
c gán tr ng s
i cung (u,v) E c
ng v i m t
s th c a(u,v) g i là tr ng s c a nó.
2.2.3. Thu t toán Ford Bellman
Procedure Ford_Bellman;
u vào:
th
ng G=(V,E) v
nh, s
nh xu t phát, a[u,v], u,
v V, ma tr n tr ng s ;
Gi thi t:
th không có chu trình âm.
u ra: Kho ng cách t
nt tc
nh còn l i d[v],
Truoc[v], ghi nh
n nh t t
n v.
Begin (* Kh i t o *)
for v V do
begin
d[v]:= a[s,v];
Truoc[v]:= s;
end;
d[s]:= 0;
for k:= 1 to n-2 do
for v V \ {s} do
for u V do
if d[v] > d[u] + a[u,v] then
begin
d[v]:= d[u] + a[u,v];
Truoc[v]:= u;
end;
end;
2.2.4. Thu t toán Dijkstra
Bài toán:
G=(V,E)
w: E
A
15
B. Th
X, Y, Z
X-Y-Z
X-Y.
d[v]
d, d[v]
d[v]
Thu t toán:
procedure Dijkstra;
u vào: th
ng G=(V,E) v
nh.
s
nh xu t phát, a[u,v],u.v V, ma tr n tr ng s ;
Gi thi t : a[u,v] 0, u,v V .
u ra: Kho ng cách t
nt tc
nh còn l i d[v,
v V. Truoc[v],v V ghi nh
n nh t t
n v*)
Begin (*kh i t o*)
for v V do
begin
d[v]:= a[s,v];
truoc[v]= s;
end;
d[s]:= 0; T:= V\{s}; (* T là t
nh có nhãn t m th i *)
while T do
begin
nh u T tho mãn d[u] = min{d[z]:z T};
T:= T\{u}; (* C
nh nhãn c
nh u *)
for v T do (* Gán l
nh trong T *)
if d[v] > d[u] + a[u,v] then
begin
d[v]:= d[u] + a[u,v];
Truoc[v]:= u;
end;
end;
end;
2.2.5. Thu t toán Floyd
n nh t gi a t t c các c p nh.
16
Cho G=(V,E) là m
th
ng, có tr ng s
ng
n nh t gi a
m ic
nh c a G, ta áp d ng thu t toán Dijkstra nhi u l n ho c áp d ng thu t toán
Gi s V={v1, v2, ..., vn} và có ma tr n tr ng s là W W0. Thu t toán Floyd xây
d ng dãy các ma tr n vuông c p n là Wk (
)
Procedure Floyd
Procedure Floyd;
d[i,j]=, i,j = 1, 2. . .,n,
p[i,j], i, j = 1, 2.. . , n,
begin
for i:=1 to n do
for j:=1 to n do
begin
d[i,j]:=a[i.j];
p[i.j]:=i;
end;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
if d[i,j]>d[i,k]+d[k,j] then
begin
d[i,j]+d[i,k]+d[k,j];
p[i,j]>p[k,j];
end;
end;
17
3: LU NG C
NG
NG D NG
3.1.1. Bài toán lu ng trên m ng.
Nhi u bài toán quy ho ch tuy n tính có th quy v bài toán làm c c ti u phí t n
v n chuy n hàng trong m t m ng (g
ng) sao
mb o
c các nhu c u m t s
t ngu n cung c p t i m t s nút khác.
c g i là các bài toán lu ng trên m ng ho c bài toán
tuy n tính. L p này bao g m các bài toán quen thu c trong th c t
v n t i, các bài toán m
n và m ng giao thông, các bài toán qu n lý và phân b
v
bài toán b nhi m, bài toán k ho
ng ng n nh t, bài
toán lu ng c
[6]
3.1.2. Bài toán lu ng c c i trong m ng
Bài toán lu ng c
i [1] trong m
t trong s nh ng bài toán t
th
c nh ng ng d ng r ng rãi trong th c t
nh ng ng d ng
thú v trong lý thuy t t h
xu
u nh
n
li n v i tên tu i c a hai nhà bác h c M là L.R.Fordvà D.R.Fulkerson. Bài toán lu ng
c
i trong m ng có nhi u ng d ng trong th c t
dòng l n nh t c a dòng v n t i gi a hai nút c a m t b
giao thông, bài toán tìm
lu ng d u l n nh t có th
tàu ch d u vào b ch a c a m t h th
ng
ng d n d
ng d ng c
gi
i vùng quê, bài toán v h th
i di n chung, bài toán phân nhóm sinh
ho t, bài toán l p l ch cho h i ngh
3.1.3. M ng, lu ng trong m ng, bài toán lu ng c
i
: M ng (Network) [1]
Ta g i m
th
ng G=(V,E)
tm
nh s không
m phát, duy nh t m
m
thu và m i cung e = (v,w)
c gán v i m t s không âm c(e) = c(v,w) g i là kh
a cung e.
Lu ng (Lu ng trong m ng)
Gi s cho m ng G=(V,E). Ta g i lu ng f trong m ng G=(V,E) là ánh x
R+ gán cho m i cung e =(v,w) E m t s th c không âm f(e) = f(v,w), g i là luông
trên cung e, tho
u ki n sau:
1. Lu ng trên m i cung e
t quá kh
u ki n cân b ng lu ng trên m
nh v b ng t ng lu
nh c a m ng : T ng lu ng trên các cung
nh v, n u v ¹ s,t:
18
:t
mà t
nh c a m ng mà t
n v, t
nh c a m ng
-
(B)) =t (W+(B)).Theo
n nó:
3.Giá tr c a lu ng f là s
Tính ch t c a lu ng.
V i t p B V, ký hi u:
W-(B) = { (a, b) E | a B,b B } W+(B) = { (a, b) E | a B,b B } -
+
(x)).
Cho m ng G=(V,E). Hãy tìm lu ng f* trong m ng v i giá tr lu ng val(f*) là l n
nh t. Lu
y ta s g i là lu ng c
i trong m ng.
y có th xu t hi n trong r t nhi u ng d ng th c t . Ch ng h n khi
c
l n nh t c a dòng v n t i gi a 2 nút c a m t b
giao thông.
Trong ví d này c a bài toán lu ng c
i x ch
t
và chúng t
h
ng v i dòng giao th
c
ch n. M t ví d khác là n
th
ng v i m t h th ng d n d
các
ng v
m phát có th có th là tàu ch d
m thu là b
ch a, còn nh
m n i gi a các ng là các nút c
th . Kh
a
ng ng v i ti t di n các ng.C n ph i tìn lu ng d u l n nh t có th
t d u vào b ch a.
Thu t toán Ford-Fulkerson [4]
Vi c ch
nh lý lu ng c
i-lát c t c c ti u ngay l p t c cho chúng ta
m t thu t toán Tìm lu ng c
i- thu t toán Ford-Fulkerson:
- Kh i t o m t lu ng b ng 0.
th
ng c
ng),
thì tìm m
, nâng lu ng d
n n a thì f là lu ng c
i.
a thu t toán Ford-Fulekerson b ng NNLT
d ng tìm ki
tìm m
th
ng.
19
Procedure Findpath(u:integer);
ng trên Gf }
Var
v:integer;
Front, rear: integer;
Begin
Trace [s]:= n+1;
For v :=1 to n do
Begin
{xét v k
f}
If (trace[v] = 0) and (c[u,v]>f[u,v]) then
Begin
Trace[v]:=u;
if v=t then {
c t thì d ng thu t toán }
Begin
path := True;
exit;
End;
findpath(v);
End;
if path =true then exit;
End;
End;
Procedure IncFlow
ng: f :=(f+ff)}
Var
Delta, u, v: Integer;
Begin
f}
Delta:= Maxint;
V :=t;
Repeat
U := trace[v];
If c[u,v] - f[u,v] < Delta then Delta := c[u,v] f[u,v] ;
V := u;
Until v = s;
{f := (f+ff)
V :=t;
Repeat
u := trace[v];
f[u,v] :=f[u,v] + Delta ;
20