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

Chương 2: Phân tích độ phức tạp của một số gải thuật sắp thứ tự và tìm kiếm docx

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.62 MB, 56 trang )

Ch

ng 2

Phân tích
ph c t p c a m t s
gi i thu t s p th t và tìm ki m

1


N i dung
1.
2.
3.
4.
5.
6.

Vài ph ng ph p s p th t c n b n
Quicksort
X p th t d a vào c s
X p th t b ng ph ng ph p tr n
X p th t ngo i
Vài ph ng ph p tìm ki m c n b n

2


Nguy n t c v s p th


t

Xét nh ng ph ng pháp s p th t m t t p tin g m các
m u tin (record) có ch a khóa (key). Khóa mà là m t ph n
c dùng
i u khi n vi c s p th t .
c a m u tin,
M c tiêu: s p x p các m u tin sao cho các tr khóa c a
chúng có th t theo m t qui lu t th t nào ó.
c s p th t có th ch a trong b nh
N u các t p tin
chính thì gi i thu t s p th t
c g i là s p th t n i
(internal sorting).
Vi c s p th t t p tin l u
t ngo i (external sorting).

b nh ph

c g i là s p th

3


Hai nh m ph

ng ph p s p th

t


Chúng ta quan t m n th i gian tính tốn c a các
gi i thu t s p th t .
1. M t nhóm g m 4 ph ng pháp c n b n ịi h i
th i gian tính tốn t l v i N
s p th t N
ph n t .
. Các ph ng pháp tiên ti n h n có th s p th t N
ph n t trong th i gian ch y t l v i NlgN.
M t c tính c a ph ng pháp s p th t là tính n nh
(stability). M t ph ng pháp s p th t
c g i là n nh
c th t t ng i c a các ph n t
khi nó b o tồn
cùng tr khóa trong t p tin.
4


1. Nh m ph

ng ph p c n b n

V i nh m n y, c hai ph
ch n
kh o sá t:

ng ph p s p th t

c

- s p th t b ng ph


ng phá p ch n (selection sort)

- s p th t b ng ph

ng phá p chèn (insertion sort)

V i m c ích t p trung v o khía c nh gi i thu t ta s
là m vi c v i c c ph ng phá p mà n ch s p th t
cá c m ng s nguyên theo th t l n d n c a s .

5


S p th

t

b ng ph

ng ph p ch n

Ý t ng:
Tr c tiên t m ph n t nh nh t trong m ng v hốn i
nó v i ph n t ang v trí th nh t trong m ng à r i
tìm ph n t nh th nhì trong m ng và hốn i nó v i
và c th cho
ph n t ang v trí th nhì trong m
n khi toàn m ng ã
c s p th t .”

390
205
182
45
235


205
182
390
235



205
390
235



390
235



6


Gi i thu t s p th


t

b ng ph

ng ph p ch n

procedure selection;
var i, j, min, t: integer;
begin
for i :=1 to N-1 do
begin
min :=i;
for j :=i+1 to N do
if a[j]t :=a[min]; a[min] :=a[i];
a[i] :=t;
end;
end;

7


Phân tích

ph c t p c a selection sort

V ng l p trong (tác v so sánh)
c th c hi n v i
t ng s l n nh sau:
(N- )+(N-2)+...+1 =N(N- )/2

=O(N2)
Vịng l p ngồi
c th c thi N- l n.
Tính ch t 1.1: Selection sort th c thi kho ng N hoán
v và N2/2 so sánh.
Ghi chú: Th i gian tính tốn c a selection sort thì
c l p i v i d li u nh p.
8


S p th

t

b ng ph

ng ph p ch n

Ýt

ng :
i thu t xem xét t ng ph n t m
c a nó trong nhóm các ph n t ã

chèn nó vào v trí úng
c s p th t r i.

45
205
182

45
235

182
45
235

45
235

45

235
235

9


Gi i thu t s p th

t

b ng ph

ng ph p ch n

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;
10


Nh ng l

ý v gi i thu t insertion sort

. Chúng ta dùng m t tr khóa “c m canh” (sentinel) t i
a[0], làm cho nó nh h n ph n t nh nh t trong m ng.
2. Vòng l p ngoài c a gi i thu t
c th c thi N-1 l n.
Tr ng h p x u nh t x y ra khi m ng ã có th t
o
c th c thi v i t ng s
ng c. Khi ó, vịng l p trong
l n sau ây:
(N-1) + (N-2) + ... + 1 =N(N-1)/2
=O(N2)
S b c chuy n = N(N-1)/2
S so sánh = N(N-1)/2
3. Trung bình có kho ng ch ng (i-1)/2 so sánh

c th c
thi trong vòng l p trong. Do ó, trong tr ng h p trung
bình, t ng s l n so sánh là:
(N-1)/2 + (N-2)/2 + ... + 1/2 =N(N-1)/4
=O(N2)
11


ph c t p c a s p th t b ng ph
ch n và ph ng ph p ch n

ng ph p

Tính ch t .2: S p th t b ng ph ng pháp ch n
th c thi kho ng N2/2 so sánh và N2/4 hoán v trong
tr ng h p x u nh t.
Tính ch t .3: S p th t b ng ph ng pháp chèn
th c thi kho ng N2/4 so sánh và N2/8 hoán v trong
tr ng h p trung bình.
Tính ch t 1.4: S p th t b ng ph ng pháp chèn có
ph c t p tuy n tính i v i m t m ng ã g n có
th t .
12


2. Gi i thu t Quick sort
i thu t c n b n c a Quick sort
i C. A. R. Hoare.

c phát minh n m


Quicksort
c a chu ng vì nó khơng q khó
hi n
th c hóa.
Quicksort ch ịi h i kho ng ch ng NlgN thao tác c n b n
s p th t N ph n t .
Nh c i m c a Quick sort g m:
quy
- Nó là m t gi i thu t
- Nó c n kho ng N2 thao tác c n b n trong tr
x u nh t
- Nó d b l i khi l p trình (fragile).

ng h p

13


Gi i thu t c n b n c a Quicksort
Quicksort l m t ph ng pháp x p th t theo ki u “chia
tr ”. Nó th c hi n b ng cách phân ho ch m t t p tin
thành hai ph n và s p th t m i ph n m t cách c l p
v i nhau.
Gi i thu t có c u trúc nh sau:
procedure quicksort1(left,right:integer);
var i: integer;
begin
if right > left then
begin

i:= partition(left,right);
quicksort(left,i-1);
quicksort(i+1,right);
end;
end;

14


Phân ho ch
Ph n then ch t c a Quicksort l th t c ph n ho ch
s p x p l i m ng sao cho th a m n 3 i u
(partition)
ki n sau:
i) ph n t a[i]
c a v v trí úng n c a n , v i m t
giá tr i nào ó,
ii) t t c nh ng ph n t trong nhóm a[left], ..., a[i-1] thì nh
h n hay b ng a[i]
iii) t t c nh ng ph n t trong nhóm a[i+1], ..., a[right] thì
l n h n hay b ng a[i]
Example:

15


Thí d v phân ho ch
s chúng ta ch n ph n t th nh t hay ph n t t n cùng
trái (leftmost ) nh là ph n t s
c a v v trí úng c a

c g i là ph n t ch t - pivot).
nó ( Ph n t này
15 3

1

75 45 65 35 5

2

7

55

15 3

25 2

1

75 45 65 35 5

6

7

55

15 3


35

25 6

25 2

1

35 45 65 75 5

6

7

55

15 3

25 2

1

4

6

7

55


nh h n

45 65 75 5

sorted

l nh n

16


Gi i thu t Quicksort
procedure quicksort2(left, right: integer);
var j, k: integer;
begin
if right > left then
begin
j:=left; k:=right+1;
//start partitioning
repeat
repeat j:=j+1 until a[j] >= a[left];
repeat k:=k-1 until a[k]<= a[left];
if j< k then swap(a[j],a[k])
until j>k;
swap(a[left],a[k]); //finish partitioning
quicksort2(left,k-1);
quicksort2(k+1,right)
end;
end;


17


Phân tích

ph c t p: tr

ng h p t t nh t

Tr ng h p t t nh t x y ra v i Quicksort l khi m i l n
phân ho ch chia t p tin ra làm hai ph n b ng nhau.
i u này làm cho s l n so sánh c a Quicksort th a mãn h
th c truy h i:
CN = 2CN/2 + N.
S h nh 2CN/2 là chi phí c a vi c s p th t hai n a t p tin
và N là chi phí c a vi c xét t ng ph n t khi phân ho ch l n
u.
T ch ng 1, vi c gi i h th c truy h i này ã a n l i
gi i:
CN N lgN.

18


Phân tích

ph c t p: tr

ng h p x u nh t


M t tr ng h p x u nh t c a Quicksort l khi t p tin
th t r i.

c

Khi , ph n t th nh t s òi h i n so sánh
nh n ra
úng v trí th nh t. H n n a, sau ó phân
r ng nó nên
o n bên trái là r ng và và phân o n bên ph i g m n – 1
ph n t . Do ó v i l n phân ho ch k , ph n t th hai s
òi h i n-1 so sánh nh n ra r ng nó nên
úng v trí th
hai. Và c ti p t c nh th .
Nh v y t ng s l n so sánh s là:
n + (n-1) + … + 2 + 1 = n(n+1) 2 =
(n2 + n) 2 = O(n2).
ph c t p tr

ng h p x u nh t c a Quicksort là O(n2).
19


ph c t p tr

ng h p trung bình c a Quicksort

Cơng th c truy h i chính xác cho t ng s so sánh mà Quick
c hình thành m t cách
sort c n s p th t N ph n t

ng u nhiên:
N

CN = (N+1) + ( N)

(Ck-1 + CN-k)
1

v iN

2 và C1 = C0 = 0

S h ng (N+1) bao g m s l n so sánh ph n t ch t v i t ng
hai pointer giao nhau.
ph n t khác, thêm hai l n so sánh
Ph n còn l i là do s ki n m i ph n t
v trí k có cùng xác
c làm ph n t ch t mà sau ó chúng ta có
xu t 1/N
hai phân o n v i s ph n t l n l t là k-1 và N-k.
20


Ch

r n

+ C1 + … + CN-1 thì gi ng h t

CN-1 + CN-2 +… + C0, nên ta có

N

CN = (N+1) + (1/N)

2Ck-1
1

i l ng tính t ng b ng cách nhân c hai v
Ta có th lo i tr
v i N và r i tr cho cùng công th c nhân v i N-1:
NCN – (N-1) CN-1 = N(N+1) – (N-1)N + 2CN-1
T

ó ta

c

NCN = (N+1)CN-1 + 2N

21


Chia c hai v v i N(N+1) ta

c h th c truy h i:

CN (N+1) = CN-1/N + 2/(N+1)
= CN-2 /(N-1) + 2/N + 2/(N+1)
.
.

N

2/(k+1)

= C2 /3 +
3
N

CN/(N+1)

2

N

1/k
1

2 1/x dx = 2lnN
1

Suy ra:
CN 2NlnN
22


ph c t p tr
Quicksort tt

ng h p trung bình c a


V ta c :
lnN = (log2N).(loge2) = .69 lgN
2NlnN

1.38 NlgN.

⇒T ng s so sánh trung bình c a Quicksort ch kho ng
ch ng 38 cao h n trong tr ng h p t t nh t.
M nh . Quicksort c n kho ng 2NlnN so sánh trong
tr ng h p trung bình.

23


Kh

quy gi i thu t Quicksort

Dùng ng n x p (stack) ta có th chuy n Quicksort thành m t
quy
gi i thu t không
procedure quicksort3;
var t, i, left, right : integer;
begin
left :=1; right:= N;
stackinit;
push(left); push(right);
repeat
if right > left then
begin

i=: partition(left,right);
if (i –left) > (right –i) then

begin push(left); push(i-1);
left := i+1 end
else
begin
push (i+1);push(right);
right:=i-1
end;
end
else
begin right := pop; left := pop
end;
until stackempty;
end;
24


3. S p th

t

d a vào c s

Trong nhi u ng d n ác tr khóa có th là nh ng khóa
thu c m t t m h n nh nào ó.
Các ph ng pháp s p th t mà l i d ng tính ch t s c a
các khóa
c g i là s p th t d a vào c s (radix sort).

Nh ng ph ng pháp này khơng ch so sánh các tr khóa
chúng x lý và so sánh các ph n c a khóa.
S p th t d a vào c s coi các tr khóa nh là nh ng s
c bi u di n d ng h c s M và làm vi c v i t ng ký
s (digit) n l .
V i h u h t m i máy tính, th t ti n l i làm vi c v i c
s 2 (M =2)
n là c s th p phân (M =10).
25


×