Chap3new 110820045955 Phpapp01 - 2

You might also like

You are on page 1of 47

1

Chng 3

Chin lc gim--tr
(Decrease-and-conquer)
2
Ni dung
1. Chin lc gim--tr
2. Sp th t bng phng php chn
3. Cc gii thut duyt th
4. Sp xp tp
5. Gii thut sinh cc hon v t mt tp


3
1. Chin lc thit k gii thut gim--tr
(Decrease-and-conquer)
K thut thit k gii thut gim--tr li dng
mi lin h gia li gii cho mt th hin ca
mt bi ton v li gii cho mt th hin nh
hn ca cng mt bi ton.
C ba bin th ca chin lc ny.
Gim bi mt hng s (decrease by a constant)
Gim bi mt h s (decrease by a factor)
Gim kch thc ca bin (variable size decrease)
Sp th t bng phng php chn (insertion
sort) l mt th d in hnh ca chin lc
gim--tr.
4
Chin lc thit k gii thut gim--tr (tt.)
Gii thut tm c s chung ln nht ca 2 s theo cng
thc gcd(m,n) = gcd(n, m mod n) cng l th d ca chin
lc gim--tr theo li gim kch thc ca bin.

Algorithm Euclid(m,n)
/* m,n : two nonnegative
integers m and n */
while n<>0 do
r := m mod n;
m:= n;
n:= r
endwhile
return m;


Th d: m = 60 v n = 24
1) m = 60 v n = 24
2) m = 24 v n = 12
3) m = 12 v n = 0
Vy 12 l c s chung ln nht
5
Chin lc thit k gii thut gim--tr (tt.)
Ti mi bc ca gii thut duyt th theo
chiu su trc (DFS) hay duyt theo b rng
trc (BFS), gii thut nh du nh c
ving v tin sang xt cc nh k cn ca nh
.
Hai gii thut duyt th ny p dng k
thut gim-bt-mt (decrease-by-one), mt trong
3 dng chnh ca chin lc Gim--tr.

6
2. Sp th t bng phng php chn
tng :
Xt mt ng dng ca k thut gim tr vo vic sp
th t mt mng a[0..n-1]. Theo tinh thn ca k thut, ta
gi s rng bi ton nh hn: sp th t mt mng a[0..n-2]
c thc hin. Vn l phi chn phn t a[n-1] vo
mng con c th t a[0..n-2].
C hai cch thc hin iu ny.
- Mt l ta duyt mng con c th t t tri sang phi cho
n khi tm thy phn t u tin ln hn hay bng vi phn
t a[n-1] v chn phn t a[n-1] vo bn tri phn t ny.
- Hai l ta duyt mng con c th t t phi sang tri cho
n khi tm thy phn t u tin nh hn hay bng vi phn
t a[n-1] v chn phn t a[n-1] vo bn phi phn t ny.
7
2. Sp th t bng phng php chn (tt.)
Cch th hai thng c chn:

a[0] a[j] < a[j+1] a[i-1] | a[i] a[n-1]
390 205 182 45 45
205 390 205 182 182
182 182 390 205 205
45 45 45 390 235
235 235 235 235 390
8
Gii thut sp th t bng phng php chn
procedure insertion;
var i; j; v:integer;
begin
for i:=2 to N do
begin
v:=a[i]; j:= i;
while a[j-1]> v do
begin
a[j] := a[j-1]; // pull down
j:= j-1 end;
a[j]:=v;
end;
end;
9
Nhng l v gii thut insertion sort
1. Chng ta dng mt tr kha cm canh (sentinel) ti
a[0], lm cho n nh hn phn t nh nht trong mng.

2. Vng lp ngoi ca gii thut c thc thi N-1 ln.
Trng hp xu nht xy ra khi mng c th t o
ngc. Khi , vng lp trong c thc thi vi tng s
ln sau y:
(N-1) + (N-2) + ... + 1 =N(N-1)/2
=O(N
2
)
S bc chuyn = N(N-1)/2 S so snh = N(N-1)/2

3. Trung bnh c khong chng (i-1)/2 so snh c thc
thi trong vng lp trong. Do , trong trng hp trung
bnh, tng s ln so snh l:
(N-1)/2 + (N-2)/2 + ... + 1/2 =N(N-1)/4
=O(N
2
)
10
phc tp ca sp th t bng phng php
chn
Tnh cht 1.2: Sp th t bng phng php chn
thc thi khong N
2
/2 so snh v N
2
/4 hon v trong
trng hp xu nht.
Tnh cht 1.3: Sp th t bng phng php chn
thc thi khong N
2
/4 so snh v N
2
/8 hon v trong
trng hp trung bnh.
Tnh cht 1.4: Sp th t bng phng php chn c
phc tp tuyn tnh i vi mt mng gn c
th t.
11
3. Cc gii thut duyt th
C nhiu bi ton c nh ngha theo i tng v cc kt ni
gia cc i tng y.

Mt th l mt i tng ton hc m m t nhng bi ton
nh vy.
Cc ng dng trong cc lnh vc:

Giao thng
Vin thng
in lc
Mng my tnh
C s d liu
Trnh bin dch
Cc h iu hnh
L thuyt th
12
Mt th d
A
B G C
F
D E
L M
K J
I H
Hnh 3.1a Mt th th d
13
Cch biu din th
Ta phi nh x cc tn nh thnh nhng s nguyn trong
tm tr gia 1 v V.

Gi s c tn ti hai hm:
- hm index: chuyn i t tn nh thnh s nguyn
- hm name: chuyn i s nguyn thnh tn nh.

C hai cch biu din th:
- dng ma trn k cn
- dng tp danh sch k cn
14
Cch biu din ma trn k cn
A B C D E F G H I J K L M
A 1 1 1 0 0 1 1 0 0 0 0 0 0
B 1 1 0 0 0 0 0 0 0 0 0 0 0
C 1 0 1 0 0 0 0 0 0 0 0 0 0
D 0 0 0 1 1 1 0 0 0 0 0 0 0
E 0 0 0 1 1 1 1 0 0 0 0 0 0
F 1 0 0 1 1 1 0 0 0 0 0 0 0
G 1 0 0 0 1 0 1 0 0 0 0 0 0
H 0 0 0 0 0 0 0 1 1 0 0 0 0
I 0 0 0 0 0 0 0 1 1 0 0 0 0
J 0 0 0 0 0 0 0 0 0 1 1 1 1
K 0 0 0 0 0 0 0 0 0 1 1 0 0
L 0 0 0 0 0 0 0 0 0 1 0 1 1
M 0 0 0 0 0 0 0 0 0 1 0 1 1
Mt ma trn V
hng V ct cha
cc gi tr Boolean
m a[x, y] l true if
nu tn ti mt
cnh t nh x n
nh y v false nu
ngc li.
Hnh 3.1b: Ma trn k
cn ca th hnh
3.1a
15
Gii thut
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: = 1 to V do /*initialize the matrix */
for y: = 1 to V do a[x, y]: = false;
for x: = 1 to V do a[x, x]: = true;
for j: = 1 to E do
begin
readln (v1, v2);
x := index(v1); y := index(v2);
a[x, y] := true; a[y, x] := true
end;
end.
Lu : Mi cnh tng
ng vi 2 bit trong ma
trn: mi cnh ni gia
x v y c biu din
bng gi tr true ti c
a[x, y] v a[y, x].
tin li gi nh rng
c tn ti mt cnh ni
mi nh v chnh n.
16
Cch biu din bng tp danh sch k cn
Trong cch biu din ny, mi nh m ni ti mt
nh c kt thnh mt danh sch k cn
(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;
17
begin
readln(V, E);
new(z); z.next: = z;
for j: = 1 to 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 x to the first element of
ys adjacency list */
new(t); t.v = y; t.next: = adj[x];
adj[x]:= t; /* insert y to the first element of
xs adjacency list */
end;
end.
Lu : Mi cnh trong
th tng ng vi hai nt
trong tp danh sch k cn.
S nt trong tp danh sch
k cn bng 2|E|.
18
a b c 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
Hnh 3.1c: Biu din bng tp danh
sch k cn ca th hnh 3.1
19
So snh hai cch biu din th
Nu biu din th bng tp danh sch k cn, vic
kim tra xem c tn ti mt cnh gia hai nh u v v s
c phc tp thi gian O(V) v c th c O(V) nh ti
danh sch k cn ca nh u.
Nu biu din th bng ma trn k cn, vic kim tra
xem c tn ti mt cnh gia hai nh u v v s c
phc tp thi gian O(1) v ch cn xem xt phn t ti v
tr (u,v) ca ma trn.
Biu din th bng ma trn k cn gy lng ph ch
b nh khi th l mt th tha (khng c nhiu
cnh trong th, do s v tr mang gi tr 1 l rt t)
20
Cc phng php duyt th
Duyt hay tm kim trn th: ving mi nh/nt
trong th mt cch c h thng.

C hai cch chnh duyt th:
- duyt theo chiu su trc (depth-first-search )
- duyt theo chiu rng trc (breadth-first-search).
21
Duyt theo chiu su trc
procedure dfs;
procedure visit(n:vertex);
begin
add n to the ready stack;
while the ready stack is not empty do
get a vertex from the stack, process it,
and add any neighbor vertex that has not been processed
to the stack.
if a vertex has already appeared in the stack, there is no
need to push it to the stack.
end;
begin
Initialize status;
for each vertex, say n, in the graph do
if the status of n is not yet visited then visit(n)
end;
22
Tm kim theo chiu su trc biu din
danh sch k cn (gii thut quy)
procedure list-dfs;
var id, k: integer;
val: array[1..maxV] of integer;
procedure visit (k: integer);
var t: link;
begin
id: = id + 1; val[k]: = id; /* change the status of k
to visited */
t: = adj[k]; / * find the neighbors of the vertex k */
while t <> z do
begin
if val[t .v] = 0 then visit(t.v);
t: = t.next
end
end;
23
begin
id: = 0;
for k: = 1 to V do val[k]: = 0; /initialize
the status of all vetices */
for k: = 1 to V do
if val[k] = 0 then visit(k)
end;
Ghi ch: Mng val[1..V] cha trng thi ca ccnh.
val[k] = 0 nu nh k cha h c ving (not yet visited),
val[k] 0 nu nh k c ving.
val[k]: = j ngha l nh jth m c ving trong qu trnh
duyt l nh k.
24
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
D
A
F
E
G
D
A
F
G
E D
A
G
E D
A
G
E D
C
A
G
E D
C
A
G
E D
C
B
F F F
F
A
G
E D
C
B
F
Hnh 3.2 Duyt theo chiu su trc
25
Nh vy kt qu ca DFS trn
th cho hnh 3.1a vi
tp danh sch k cn cho
hnh 3.1c l
A F E G D C B
Lu : th t ca cc nh
trong cc danh sch k cn
c nh hng n th t
duyt ca cc nh khi p
dng DFS.
Tnh cht 3.1.1 Duyt theo
chiu su trc mt
th biu din bng cc
danh sch k cn i hi
thi gian t l V+ E.

Chng minh: Chng ta
phi gn tr cho mi phn
t ca mng val (do t
l vi O(V)), v xt mi nt
trong cc danh sch kt
cn biu din th (do
t l vi O(E)).

phc tp ca DFS
26
DFS biu din bng ma trn k cn
Cng mt phng php c th c p dng cho th
c biu din bng ma trn k cn bng cch dng th tc
visit sau y:
procedure visit(k: integer);
var t: integer;
begin
id: = id + 1; val[k]: = id;
for t: = 1 to V do
if a[k, t] then
if val[t] = 0 then visit(t)
end;

Tnh cht 3.1.2 Duyt theo
chiu su trc mt th biu
din bng ma trn k cn t l
vi V
2
.

Chng minh: Bi v mi bit
trong ma trn k cn ca th
u phi kim tra.

27
Duyt theo chiu rng trc
Khi duyt th nu ta dng mt queue thay v mt stack, ta s
i n mt gii thut duyt theo chiu rng trc (breadth-first-
search).

procedure bfs;
procedure visit(n: vertex);
begin
add n to the ready queue;
while the ready queue is not empty do
get a vertex from the queue, process it, and add any neighbor
vertex that has not been processed to the queue and
change their status to ready.
end;
begin
Initialize status;
for each vertex, say n, in the graph
if the status of n is not yet visited then visit(n)
end;
28
procedure list-bfs;
var id, k: integer; val: array[1..max V] of integer;
procedure visit(k: integer);
var t: link;
begin
put(k); /* put a vertex to the queue */
repeat
k: = get; /* get a vertex from the queue */
id: = id + 1; val[k]: = id; /* change the status of k to visited */
t: = adj[k]; /* find the neighbors of the vertex k */
while t <> z do
begin
if val[t .v] = 0 then
begin
put(t.v); val [t.v]: = -1 /* change the vertex t.v to ready */
end;
t: = t.next
end
until queueempty
end;
29
begin
id: = 0; queue-initialze;
for k: = 1 to V do val[k]: = 0; /initialize the
status of all vertices */
for k: = 1 to V do
if val[k] = 0 then visit(k)
end;

Duyt theo chiu su trc v duyt theo chiu rng trc
ch khc nhau ch gii thut u dng stack v gii thut
sau dng hng i. Do , phc tp tnh ton ca DFS v
BFS l nh nhau.
30
A
Hnh 3.3 Ni dung ca hng i khi thc hin BFS
C
F
C
B B B
G G G
K
G
D
L
D D D D
E E E
M
L
M
J
H
I
E
M
31
4. Xp th t tp
Cc th c hng l cc th trong cc cnh ni vi
cc nt c hng.
A
B G C
F
D E
L M
K J
I H
Hnh 3.4. Mt th d v th c hng
32
Thng th hng ca cc cnh biu th mi lin h trc
sau (precedence relationship) trong ng dng c m hnh
ha.

Th d, th c hng c th c dng m hnh ha
mt ng dy sn xut (assembly line).

Trong phn ny, chng ta xem xt gii thut sp th t topo
(topological sorting)
33
Lu v cch biu din th c hng
Nu ta biu din th c hng bng tp danh
sch k cn, mi cnh trong th tng ng vi
mt nt trong tp danh sch k cn. (mi cnh ni t
x n y c biu din bng mt nt c nhn y
c a vo danh sch k cn ca nh x)
S nt trong tp danh sch k cn bng vi s cnh |E|

Nu ta biu din th c hng bng ma trn k
cn, mi cnh trong th tng ng vi mt bit 1
trong ma trn k cn. (mi cnh ni t x n y c
biu din bng gi tr true ti a[x, y]).


34
Xp th t tp
th c hng khng chu trnh (Directed Acyclic Graph)
th c hng m khng c chu trnh c gi l cc
th c hng khng chu trnh (dags).

Tp th t ring phn v xp th t tp

Cho G l mt th c hng khng chu trnh. Xt quan
h th t < c nh ngha nh sau:
u < v nu c mt li i t u n v trong G.

Quan h ny c 3 tnh cht:
(1) Vi mi nh trong V[G], not (u < u). (khng phn x)
(2) nu u < v, th not( v < u) . (khng i xng)
(3) nu u < v v v < w, th u < w. (Truyn)
Quan h < l mt quan h th t ring phn.
35
Xp th t tp
Cho G l mt th c hng khng chu trnh. Mt
th t tp (topological sort)T ca G l mt th t
tuyn tnh m bo ton th t ring phn ban u
trong tp nh V[G].

Ngha l: nu u < v trong V (tc l nu c mt li i
t u n v trong G), th u xut hin trc v trong th
t tuyn tnh T.
36
A
B G C
F
D E
L M
K J
I H
Cc nt trong th hnh trn c th c sp th t tp
theo th t sau:
J K L M A G H I F E D B C
37
Phng php 1 sp xp tp
Phng php ny thc hin theo kiu tm kim theo chiu
su trc v thm mt nt vo danh sch mi khi cn thit
ly mt nt ra khi stack tip tc. Khi gp mt nt
khng c nt i sau th ta s ly ra (pop) mt phn t t
nh stack. Lp li qu trnh ny cho n khi stack rng.
o ngc danh sch ny ta s c th t tp.


Algorithm:
Start with nodes with no predecessor, put them in the stack.
while the stack is not empty do
if the node at top of the stack has some successors
then
push all its successors onto the stack
else pop it from the stack and add it to the list.
38
1
6
3
2
1
0
4
8
5
9
7
8 6
5 5 5 4 4 4
3 3 3 3 3 10 10 10 10
2 2 2 2 2 2 2 2 2 2 2
1 1 1 1 1 1 1 1 1 1 1 1 1 9
7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
Hnh 3.5 Sp th t tp
39
phc tp ca gii thut sp xp t p
phng php 1
Tnh cht: phc tp tnh ton ca gii thut sp
xp t p l O(|E|+|V|) nu th c din t bng
tp danh sch k cn.

Chng minh: iu ny hin nhin v thn ca vng
lp while c thc hin ti a 1 ln cho mi cnh.
V tc v khi to stack th t l vi s nh ca
th
40
Phng php 2 sp th t t p
tng: Lin tip nhn din mt nt l nt ngun
(nt khng c nt i sau) v tho g n ra khi
th cng vi cc cnh i ra t n. Qu trnh lp s
dng li khi khng cn nt trong th. Th t ca
cc nt b xa b s to thnh mt li gii ca bi
ton sp th t t p.
Gii thut ny th hin rt r chin lc gim (mt)-
-tr.
41

d
a
e
b
d
c
c
c
e
d
b
d
e
e
e
Th t t p l a, b, c, d, e
g a g b
g c
g d
g e
42
Gii thut ca phng php 2
Algorithm:
Start with nodes with no predecessor, put them in the queue.
while the queue is not empty do
remove the front node N of the queue
for each neighbor node M of node N do
delete the edge from N to M
if the node M has no successor then
add M to the rear of the queue
endfor
endwhile

phc tp ca gii thut ny l bao nhiu?

43
5. Gii thut sinh cc hon v
Cho mt tp n phn t A= {a
1
,a
2
,,a
n
}. Ta mun sinh ra
tt c n! hon v ca tp y.
Chin lc Gim--tr c th c gi g v gii thut
sinh tt c cc hon v ca mt tp n phn t?
Bi ton nh hn mt bc l sinh ra tt c (n-1)! hon v
cho mt tp con n -1 phn t ca tp A ni trn. Gi s
bi ton ny c gii xong, ta c th gii bi ton
nguyn thy bng cch chn phn t cn li vo ti mi
v tr trong n v tr kh hu ca cc phn t trong tng
hon v ca tp n -1 phn t sinh.
Tt c cc hon v t c bng cch ny s khc bit
nhau.
44
Th d
khi u 1
thm 2 12 21
right to left
thm 3 123 132 312 213 231 321
right to left right to left

n gin, gi s tp A l mt tp hp cc s nguyn t
1 n n. Chng c th c hiu nh l tp cc ch s
ca tp n phn t {a
1
,a
2
,,a
n
}.
45
Gii thut PERM
1. Set j:= 1 and write down the permutation <1>
2. set j:= j+1
3. for each permutation <a
1
a
2
a
j-1
> on j-1 elements do
4. create and list P:=< a
1
a
2
a
j-1
j>
5. for i:= j-1 downto 1 do
6. set P:= P with the values assigned to positions i
and i+1 switched and list P
// end for loop at step 3
7. if j < n, then go to step 2 else stop.
46
phc tp ca gii thut PERM
Tnh cht: phc tp ca gii thut PERM sinh ra tt c
cc hon v ca tp n phn t l n!
Chng minh:
Thao tc cn bn: thao tc chn phn t cn li vo mt
hon v c.
Vi mi hon v t tp con n-1 phn t (gm tt c (n-1)!
cc hon v ny), ta a phn t cn li vo n v tr kh
hu. Nh vy tng cng c n.(n-1)! thao tc chn phn
t cn li vo mt hon v c.
Do : C(n) = O(n!)
Nhn xt: V n! tng rt nhanh nn vi n ch hi ln (10
tr ln), gii thut cho ra kt qu cc k chm.
47
Cng thc Stirling
n! xp x bng vi hm


n 2
(n/e)
n
vi e l c s logarit t nhin (e = 2.71828)

You might also like