Tải bản đầy đủ (.pdf) (76 trang)

Chương 4: Độ phức tạp của các giải thuật đồ thị pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.92 MB, 76 trang )

1
Ch ng4
ph c t p c acácgi ithu t th
2
N idung
1. Cácgi ithu t th c n b n
2. th có tr ng s
3. th có h ng
3
1.Cácgi ithu t th c nb n
Cónhi ubàitoán c nhngh atheo it ngvàcác
k
tn igi acác it ng y.
M t th là m t it ngtoánh cmàmôt nh ngbài
toánnh
v y.
Các
ngd ngtrongcácl nhv c:
Giaothông
Vi
nthông
i nl c
M
ngmáytính
C
s d li u
Trìnhbiênd
ch
Cách
i uhành
Lý thuy


t th
4
M tthí d
A
B GC
F
D E
L M
KJ
IH
Hình M t th thí d
5
Thu tng
M t th là m tt pcác nh và các c nh.Các nhlà
nh
ng it ng nmàcóth có tênvàcóm ts tính
ch
tkhácvàc nhlà ngk tn igi ahai nh.
M t l i i t x nytrongm t th là m tdanhsách
nh
ng nhmành ng nhk ti pnhau ck tn inh
vàonh ngc nhtrên th .
M
t th là liênthông n ucóm tl i it m inút n
m
tnútkháctrong th . M t th mà khôngliênthông
thì baog
mnhi u thànhph nliênthông.
M
t l i i n là m tl i imàtrên ó khôngcó nhnào

l
pl i.
6
Thu tng (tt
M t chutrình cycle àm tl i i nngo itr nh u
tiênvà
nhcu icùngtrùngnhau tl i it m t nh
quay v
chínhnó).
M
t th khôngcóchutrình cg ilàcây(tree). M t
nhómcáccâykhôngliênthông
cg ilàr ng ( forest ).
Câybaotrùm c am t th là m t th conmàch at tc
các nhtrongcâynh ngm ts c nh ch m nm i nh.
G
is nhtrongm t th là V, s c nhlàE, s c nhc a
th có th có t 0 nV(V-1)/2.(Ch ngminhtruych ng).
th có t tc m ic nhhi ndi ngi am ic p nh c
g ilà th y (complete graphs).
7
Thu tng (tt
Các th v is c nht ng i ít cg ilà th th a;
các
th v ich m ts ítc nhm t i cg ilà th dày.
Các
th mô t cho ngi là nh ng th vô h ng
undirected graphs .Trongcác th có tr ngs weighted
graphs
, nh nggiá tr s (tr ngs ) cg nvàom ic nh

di nt thí d kho ngcáchhay chi phí.
Trong
th có h ng (directedgraphs) cácc nhl m t
chi
u : m tc nh it xsang y ch khôngph i it ysang x.
Các
th có h ng,cótr ngs còn cg ilàcácm ng
(networks).
8
Cáchbi udi n th
Ta ph i ánhx cáctên nh thànhnh ng s nguyên trong
t
mtr gi a1 và V.
Gi
s có t nt ihaihàm:
-hàmindex: chuy
n it tên nhthànhs nguyên
-hàmname: chuy
n is nguyênthànhtên nh.
Có haicáchbi
udi n th :
-dùngmatr
nk c n
-dùngt
pdanhsáchk c n
9
Cáchbi udi nmatr nk c n
A B C DEFGH I J KL M
A 11 1001 1 000 00 0
B 11 0000 0 00 0 0 0 0

C 10 1000 0 00 0 0 0 0
D 00 0111 0 00 0 0 0 0
E 00 0111 1 00 0 0 0 0
F 10 0111 0 00 0 00 0
G1 0 0010 100 00 0 0
H 00 0000 011 00 0 0
I 00 0 000 011 00 0 0
J0 0 000 0 0 00 1 1 1 1
K 00 0000 0 00 1 1 0 0
L0 00000 0 00 1 01 1
M0 0 0000 0 00 1 01 1
M
tmatr nV
hàngV c
tch a
cácgiá tr
Boolean
mà a[x,y] là true if
n
ut nt im t
c
nht nh x n
nh y và false n u
ng
cl i.
Hình4.1b: Ma tr
nk
c nc a th hình
4.1a
10

Ghichú v cáchbi udi nmatr nk c n
M ic nht ng ngv i bittrongmatr n: m i
c
nhn igi a x và y cbi udi nb nggiá tr true
t
ic a[x, y] và a[y,x].
ti nl igi nhr ngcót nt im tc nhn im i
nhv chínhnó.
L
ibi udi nnàych thíchh pkhicác th là d y.
11
Gi ithu t
program adjmatrix(input,output);
const maxV=50;
var j,x,y,V, E:integer;
a: array[1 maxV,1 maxV] of boolean;
begin
readln(V, E);
for x:=1to V do /*initializethematrix*/
for y: =1to V do a[x,y]:=false;
for x:=1to V do a[x,y]:=true;
for j:=1to Edo
begin
readln(v1,v2);
x:=index(v1);y:=index(v2);
a[x,y]:=true;a[y,x]:=true
end;
end.
12
Cáchbi udi nb ngt pdanhsáchk c n

Trongcáchbi udi nnày, m i nhmàn it im t
nh ck tthànhm tdanhsáchk c n
(adjacency list )cho nh ó.
program adjlist(input, output);
const maxV= 100;
type link=↑node
node=record v: integer; next:link end;
var j,x, y,V,E: integer;
t,x:link;
adj: array[1 maxV] of link;
13
begin
readln(V,E);
new(z); z↑.next:=z;
for j:=1to V do adj[j]:=z;
for j: 1 to E do
begin
readln(v1, v2);
x:= index(v1); y:=index(v2);
new(t); t↑.v:=x; t↑.next:=adj[y];
adj[y]:=t; /*insert xtothefirst element of
y’sadjacencylist*/
new(t); t↑.v= y; t↑.next:=adj[x];
adj[x]:=t; /*insert ytothefirstelementof
x’sadjacencylist */
end;
end.
14
a bc d e f g h i j k l m
f

c
b
g
a a f g a e i h k j j j
e f e a l
m
m l
d d
Hình4.1c:Bi udi nb ngt pdanh
sáchk
c nc a th hình4.1
15
Cácph ngphápduy t th
thaytìmki mtrên th :vi ngm i nh/nút
trong
th m tcáchcóh th ng.
Có haicáchchính
duy t th :
-duy
ttheochi usâutr c(depth irst search )
-duy
ttheochi ur ngtr c(breadt irst search).
16
Duy ttheochi usâutr c – gi ithu t quy
procedure
procedure (
begin
n thereadystack;
while thereadystack isnotempty do
get avertexfrom thestack,processit,

andadd any neighbor vertexthat has not been processed
tothestack.
if a vertex hasalreadyappearedinthestack,thereis no
needto push
ittothestack,butitismoved tothetopof thestack.
end;
begin
Initializestatus;
for eachvertex,say n, inthegraph do
if thestatusof nis “notyetvisited” then visit(n)
end;
17
T mki mtheochi usâutr c – bi udi n
danhsáchk
c n
procedure
var , k:integer;
val: array[1 maxV] of integer;
procedure visit(k:integer);
var t:link;
begin
id:= id+ 1; val[k]:= id;/*change thestatus of k
to “visited” */
t:= adj[k]; / * findtheneighborsofthevertexk */
while t<> z do
begin
if val[t ↑.v]= 0 then visit(t↑.v);
t:= t↑.next
end
end;

18
begin
0;
for k:=1to V do val[k]:= 0;/initialize
thestatusofallvetices*/
for k:=1to V do
if val[k]= 0 then visit(k)
end;
Ghichú
: M ng val[ V] ch a tr ngthái c acác nh.
val[k] = 0 n
u nh k ch ah cvi ng( not yetvisited ),
val[k]
0 n u nh k cvi ng.
val[k]: =jngh
alà nh jthmà cvi ngtrongquá trình
duy
tlà nh k.
19
A A
F
A
F
A
F
E
A
F
E
G

A
F
E
G
A
F
E
G
A
F
E
G
A
F
E
G
A
F
E
G
A
F
G
E
A
G
E
A
G
E

C
A
G
E
C
A
G
E
C
B
F F F
F
A
G
E
C
B
F
Hình4.2Duy ttheochi usâutr c
20
Nh v yk tqu c agi ithu tduy t FStrên th cho
hình4.1a v it pdanhsáchk c ncho hình4.1clà
AFE G D C G
L
u ý:th t c acác nhtrongcácdanhsáchk c ncó nh
h
ng nth t duy tc acác nhkhi ápd ngDFS.
21
ph ct pc aduy ttheochi usâutr c
Tínhch t .1.1 uy ttheochi usâutr cm t

th bi udi nb ngcácdanhsáchk c n òih ith i
giant
l V E.
Ch ngminh:Chúngtaph igántr chom iph n
t
c am ng val (do ó t l v iO(V)),vàxétm i
núttrongcácdanhsáchk
tc nbi udi n th (do
ó t l v iO(E)).
22
ttheochi usâutr c bi udi nb ngma
tr
nk c n
Cùngm tph ngphápcóth c ápd ngcho
th cbi udi nb ngmatr nk c nb ng
cáchdùngth
t c visit sau ây:
procedure
(
var
begin
id+ 1; val[k]:= id;
for t:=1to V do
if a[k,t] then
if val[t]= 0 then visit(t)
end;
23
ph ct pc aduy ttheochi usâutr c –
bi
udi nmatr n

Tínhch t .1.2 uy ttheochi usâutr cm t
th bi udi nb ngmatr nk c nt l v iV.
Ch
ngminh: B ivìm ibittrongmatr nk c n
c
a th uph iki mtra.
24
Duy ttheochi usâutr c – không quy
procedure list-dfs;
var id,k: integer;val: array[1 maxV]of integer;
procedure visit(k: integer);
var t: link;
begin
push(k);
repeat
k:=pop; id:= id+1;val[k]:= id; /*change thestatusofk to “visited” */
t=:adj[k]; /* findtheneighborsof thevertexk*/.
while t<>zdo
begin
if val[t↑.v]=0then
begin
push(t↑.v);val[t↑.v]:=-1 /*change thestatusof t↑.v to “ready” */
end
else if val[t↑.v]=-1 then shift t↑.v to thetopof thestack;
t:= t↑.next
end
until stackempty
end;
25
begin

0; stackinit;
for k:= 1 to V do val[k]:=0;/* initialize the
status of allvertices*/
for k:= 1 to V do
if val[k]= 0 then visit(k)
end;
V
igi ithu tkhông quy,tac ndùngm tstack cg i

readystack.
Ghichú
:
val[k] = 0 n
u nh k l ch a cvi ngth m ,
val[k] = -1 n
u nh k ang trongreadystack
val[k] là m
ttr d ngn u nh k cvi ngth m.

×