Professional Documents
Culture Documents
V THUT TON
CHNG 1: CC KHI NIM
C BN
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
NI DUNG
1.1. V d m u
1.2. Thut ton v phc tp
1.3. K hiu tim cn
1.4. Gi ngn ng
1.5. Mt s k thut phn tch thut ton
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d m u
Bi ton tm dy con ln nht:
Cho dy s
a
1
, a
2
, , a
n
Dy s a
i
, a
i+1
, , a
j
vi 1 i j n c gi l dy con ca dy
cho v
j
k=i
a
k
c gi l trng lng ca dy con ny
Bi ton t ra l: Hy tm trng lng ln nht ca cc dy con, tc
l tm cc i gi tr
j
k=i
a
k
. n gin ta gi dy con c trng
lng ln nht l dy con ln nht.
V d: Nu dy cho l -2, 11, -4, 13, -5, 2 th cn a ra
cu tr li l 20 (l trng lng ca dy con 11, -4, 13)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Thut ton trc tip
Thut ton n gin u tin c th ngh gii bi ton t ra
l: Duyt tt c cc dy con c th
a
i
, a
i+1
, , a
j
vi 1 i j n
v tnh tng ca mi dy con tm ra trng lng ln nht.
Trc ht nhn thy rng, tng s cc dy con c th ca dy
cho l
C(n,2) + n = n
2
/2 + n/2 .
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Thut ton trc tip
Thut ton ny c th ci t trong on chng trnh sau:
int maxSum = 0;
for (int i=0; i<n; i++) {
for (int j=i; j<n; j++) {
int sum = 0;
for (int k=i; k<=j; k++)
sum += a[k];
if sum > maxSum
maxSum = sum;
}
}
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Thut ton trc tip
Phn tch thut ton: Ta s tnh s lng php cng
m thut ton phi thc hin, tc l m xem dng lnh
Sum += a[k]
phi thc hin bao nhiu ln. S lng php cng s l
1 1 1 1
0 0 0
2
1 1 1
3 2
( )( 1)
( 1) (1 2 ... ( ))
2
1 1 1 ( 1)(2 1) ( 1)
( 1)
2 2 2 6 2
6 2 3
n n n n
i j i i i
n n n
k k k
n i n i
j i n i
n n n n n
k k k k
n n n
= = = =
= = =
+
+ = + + + =
+ + + ( (
= + = + = +
(
(
= + +
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Thut ton nhanh hn
rng tng cc s hng t i n j c th thu c
t tng ca cc s hng t i n j-1 bi 1 php cng, c
th l ta c:
Nhn xt ny cho php rt bt vng lp for trong cng.
1
[ ] [ ] [ ]
j j
k i k i
a k a j a k
= =
= +
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Thut ton nhanh hn
Ta c th ci t nh sau
int maxSum = a[0];
for (int i=0; i<n; i++) {
int sum = 0;
for (int j=i; j<n; j++) {
sum += a[j];
if sum > maxSum
maxSum = sum;
}
}
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Thut ton nhanh hn
Phn tch thut ton. Ta li tnh s ln thc hin php cng
v thu c kt qu sau:
rng s ny l ng bng s lng dy con. Dng nh
thut ton thu c l rt tt, v ta phi xt mi dy con ng 1
ln.
2
1
0
( ) ( 1) ... 1
2 2
n
i
n n
n i n n
=
= + + + = +
=
+ + = + >
\
|
|
|
.
|
\
|
|
|
.
|
\
|
+
=
k k
k
f
2
5 1
2
5 1
5
1
= =
O =
+
= =
n
k
n
k
n
n n
c k c k c
1
2
1
) (
2
) 1 (
.
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Phn tch vng lp While v Repeat
Cn xc nh mt hm ca cc bin trong vng lp sao
cho hm ny c gi tr gim dn trong qu trnh lp. Khi
d
p
s d
p-1
/2, p > 1.
Thut ton kt thc ti bc p nu d
p
s 1, iu xy ra khi p
= log n(.
Vy thi gian tnh ca thut ton l O(log n)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Cc m t khc ca thut ton Binary Search
Function mid=bsearch1(L,p,q,key)
while q>p
mid=floor((p+q)/2);
if key<=L(mid)
q=mid;
else
p=mid+1;
end
end
if key==L(p)
mid=p;
else
mid=0;
end
Function mid=bsearch2(L,p,q,key)
while q>p
mid=floor((p+q)/2);
if key==L(mid)
break
elseif key<L(mid)
q=mid-1;
else
p=mid+1;
end
end
if key==L(p)
mid=p;
else
mid=0;
end
Tm thy ri th dng?!
% Ch : p c th c gi tr sai y
p=mid; break
Hy th vi:
L = 1 , 2, 3
key = 1, 2, 3
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Hm trn C
boolean binary_search_1(int* a, int n, int x) {
/* Test xem x c mt trong mng a[] kch thc n. */
int i;
while (n > 0) {
i = n / 2;
if (a[i] == x)
return true;
if (a[i] < x) { /* Tip tc tm na tri */
a = &a[i + 1];
n = n - i - 1; }
else /* Tip tc tm na phi */
n = i;
}
return false;
}
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Cu lnh c trng
nh ngha. Cu lnh c trng l cu lnh c
thc hin thng xuyn t nht l cng nh bt k cu
lnh no trong thut ton.
Nu gi thit thi gian thc hin mi cu lnh l b
chn bi hng s th thi gian tnh ca thut ton s
cng c vi s ln thc hin cu lnh c trng
=> nh gi thi gian tnh c th m s ln thc
hin cu lnh c trng
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d: FibIter
function Fibiter(n)
begin
i:=0; j:=1;
for k:=1 to n do
begin
j:= j+i;
i:= j-i;
end;
Fibiter:= j;
end;
Cu lnh c
trng
S ln thc hin cu lnh
c trng l n.
Vy thi gian tnh ca thut
ton l O(n)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d: Thut ton 1 v d m u
int maxSum =0;
for (int i=0; i<n; i++) {
for (int j=i; j<n; j++) {
int sum = 0;
for (int k=i; k<=j; k++)
sum += a[k];
if sum > maxSum
maxSum = sum;
}
}
Chn cu lnh c trng l sum+=a[k].
=> nh gi thi gian tnh ca thut ton l O(n
3
)
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
V d: Sp xp
Nhn xt: Khi thut ton i hi thc hin nhiu vng lp lng nhau, th c
th ly cu lnh nm trong vng lp trong cng lm cu lnh c trng.
Tuy vy, cng cn ht sc thn trng khi s dng cch la chn ny.
V d. Sp xp kiu nht chim vo chung (Pigeonhole Sorting).
Sp xp n s nguyn dng c gi tr nm trong khong 1..s.
u vo: T[1..n]: mng cha dy cn sp xp.
u ra: T[1..n]: mng cha dy c sp xp khng gim.
Thut ton bao gm 2 thao tc:
m chim: Xy dng mng U[1..s], trong phn t U[k] m s
lng s c gi tr l k trong mng T.
Nht chim: Ln lt nht U[1] con chim loi 1 vo U[1] lng u tin,
U[2] con chim loi 2 vo U[2] lng tip theo, ...
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Sp xp kiu nht chim
procedure Pigeonhole-Sorting;
begin
(* m chim *)
for i:=1 to n do inc(U[T[i]]);
(* Nht chim *)
i:=0;
for k:=1 to s do
while U[k]<>0 do
begin
i:=i+1;
T[i]:=k;
U[k]:=U[k]-1;
end;
end;
Tham kho ti liu ca PGS. TS. Nguyn c Ngha
Sp xp kiu nht chim
Nu chn cu lnh bt k trong vng lp while lm cu lnh
c trng, th r rng vi mi k, cu lnh ny phi thc hin
U[k] ln. Do s ln thc hin cu lnh c trng l
(do c tt c n s cn sp xp). T ta c thi gian tnh l
O(n).
V d sau y cho thy nh gi cha chnh xc.
Gi s T[i] = i
2
, i = 1, ..., n. Ta c
1
[ ]
s
k
U k n
=
=
nu l s chnh phng
nu tri li,
Khi s = n
2
. R rng thi gian tnh ca thut ton khng phi
l O(n), m phi l O(n
2
).
Li y l do ta xc nh cu lnh c trng cha ng, cc
cu lnh trong thn vng lp while khng th dng lm cu lnh
c trng trong trng hp ny, do c rt nhiu vng lp rng
(khi U[k] = 0).
Nu ta chn cu lnh kim tra U[k] <> 0 lm cu lnh c
trng th r rng s ln thc hin n s l n + s. Vy thut ton
c thi gian tnh O(n+s) = O(n
2
).