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

BÀI GIẢNG PHÂN TÍCH THIẾT KẾ VÀ ĐÁNH GIÁ THUẬT TÓAN .ĐẠI HỌC CHÍNH QUY. NGÀNH CNTT

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.2 MB, 74 trang )

BỘ GIAO THÔNG VẬN TẢI
TRƯỜNG ĐẠI HỌC HÀNG HẢI
N H
HỌC
T NH
H
C NG NGHỆ TH NG TIN

ÀI GIẢNG
PHÂN T CH THIẾT Ế VÀ Đ NH GI
THUẬT T N
TÊN HỌC PHẦN : Phân tích thiết kế và đánh giá thuật tốn
MÃ HỌC PHẦN : 17208
TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CH NH QU
DÙNG CHO SV NGÀNH : C NG NGHỆ TH NG TIN

HẢI PHÒNG - 2010


Tên học phần P
ộ môn phụ trách giảng dạy K a ọ M y
ã học phần 17208
TS
60


45

y

Tự


15

/Xem a

Điều kiện tiên quyết
S
ê p ả ọ x
K
lp
C
ục tiêu của
-

Tự ọ
0

B
0

ọ p ầ sa mớ
l
T

học phần
C
p
C
p
Rè l y
ư


Nội dung chủ yếu
Gồm 4 p ầ :
C
C
C
lượ
K

Loại học phần 2
hoa phụ trách CNTT
Tổng số TC: 3
p lớ

ượ

ă

Đồ
0
ý ọ p ầ







y:


l .
lượ x y ự

y

a ọ .




.
sắp x p

lượ

m

:
lượ am lam
ộp
p




m
lượ

l .
a


lượ

ay l

BT
1

KT
0

.

Nội dung chi tiết của học phần
TÊN CHƯƠNG ỤC
Ch ng I Các khái niệm c ản
1.1. G ớ
1.1.1 K
m
.
1.1. . C p ư
p p
1.1.3. C

s ồ
1. . Độ p
p
1. .1. C
ý
m

ộ p
1. . . C lớp
1.3. Mố
a

a

l

1.4. Mộ số

Ch ng II S p ếp và t m kiếm
.1. B
sắp x p
.1.1. Sắp x p
.1. . Sắp x p
.1.3. Đ
sắp x p
. .C
sắp x p

. .1. Sắp x p ọ Sele
S
. . . Sắp x p

p x a e S
. .3. Sắp x p è I se
S
. .4. Sắp x p
ọ B le S

. . .S s
sắp x p


PHÂN PHỐI SỐ TIẾT
TS LT TH/Xemina
5
4
0
1

2

1

p
0,5
0,5


15

7
0,5

5

2

3


2,5

1

1

i


TÊN CHƯƠNG ỤC
.3. Sắp x p

.3.1. C
Heap
.3. . T
xy ự
Heap
.3.3. T
sắp x p

.4. T m
m y
.4.1. B
m m
.4. . T
m m y
Ch ng III Đệ qui và chiến
c v t cạn
3.1. K

m
quy
3.1.1. G ả
y
ủ ụ
y
3.1. . T

y
3.1.3. H lự ủa
y.
3.1.4. Đ
y
y p
ọ .
3. . C
lượ
B e e
3.3. C
lượ
ay l
a a
3.3.1. Ve
m
3.3. . T ủ ụ
3.3.3. C
3.3.4. Đ
p
3.3. . Mộ số
a a

Ch ng IV Chiến
c chia đ tr
4.1. C s ủa
lượ
a
4. . T
sắp x p

4. .1. T
ộ a R
4. . . Sắp x p

4.3. Sắp x p a
s
4.3.1. C
lượ p
4.3.2. Quick sort
4.4. T m
m
p
4. . T
số

4. .1. T
ay
4. . . T
a
4. . Mộ số
Ch ng V Qui hoạch động
.1. C

lượ

5.1.1. C
p ụ
.1. . C
ướ

.1.3. C

. .B
y số
a
. .1. T
. . .T

.3. B
y
.4. B
ma
. . Mộ số

Ch ng VI Chiến
c tham am
.1. N yê ắ am lam
. .B
.3. B
sắp l
sự
.3.1. T


PHÂN PHỐI SỐ TIẾT
TS LT TH/Xemina
2,5
1,5

11

11

12

6

1

1

6
1

3

0,5

1
2

1
1
1

0,5
1
6
0,5
1,5

3

BT
1

KT

2
1

0

1
1

1

1
2

1

1


1,5

1

1
1

1

0,5
6
1,5

3

1

0,5

1
1,5
1
4
0,5
1
2

1
1
0,5

1

1
1
1

0

1

ii


TÊN CHƯƠNG ỤC
.3. . T
e
.4. S s
lượ


PHÂN PHỐI SỐ TIẾT
TS LT TH/Xemina
lượ am lam
am lam ớ
lượ

Nhiệm vụ của sinh viên
T am ự
y
am ự

m a

ủa




BT

0,5

ê
ỳ.

ự ọ

KT

1

ự lm

p do giáo viên giao,

Tài iệu học tập
N y H Đ
Giáo trình một số vấn đề về thuật toán NXB G

2003
Đ M

Tư . Cấu trúc dữ liệu và thuật toán. NXB Đ ọ
ố aH
ộ . 00 .
N y
ố Lượ H
Đ Hả . Cấu trúc dữ liệu + giải thuật = chương
trình. NXB G
ụ . 199
R a Neap l a
Kumarss Naimipour, Foundations of Algorithms Using
C++ Pseudocode, Third Edition, Jones and Bartlett Publishers, 2004.
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein,
Introduction to Algorithms, Second Edition, MIT Press, 2001.
H nh thức và tiêu chuẩn đánh giá sinh viên
H
ố ỳ:T
S
ê p ả ảm ả
Thang đi m Thang đi m chữ

p.
e

y

ủa N

ư

ủa Bộ


, , C, D, F

Đi m đánh giá học phần Z = 0,3X + 0,7
B
K a Cơ



y l


Ngày phê duyệt
Tr ởng

l

chính thức và thống nhất ủa Bộ mô K a ọ M y
ượ ù

y cho sinh viên.
/

/20

ộ môn ThS Nguyễn Hữu Tuân (ký và ghi rõ họ tên)

iii



ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
ỤC LỤC
LỜI NÓI ĐẦU ............................................................................................................................ 1
CH

NG I: C C KH I NI M C
1. T



- Algorithm ............................................................................... 2

a

............................................................................................. 2

1.1. Đ
1. . Đ

ư

ủa

........................................................................................ 2

.B

....................................................................................................... 2

.1. Mô ả

. .S

ướ



3. Độ p

s



ồ lư

....................................................................................... 2


p

3.1. C



l

ê

........................................................ 3

............................................................................. 4

a

3.3. C



................................................................. 4

a

3.4. C

a

– Algorithm Complexity.......................................................... 4

3. . Đ

ộp

lớp

p

.............................................. 5

.................................................................................................. 7

4. C


l

– Data structure .................................................................................. 9

.C

lượ

. ................................................................................ 9

.1. D y



. .Đ
.4. C

D
lượ

......................................................................... 9

ea

C

e ........................................................................... 9

am lam G ee y ............................................................................ 10


. .
.B

x a s e sea

ay l – Backtracking ............................................................................. 9

.3. C a

CH

BẢN ................................................................................ 2



Dy am P

amm

........................................................... 11

p ......................................................................................................................... 11

NG II: S P X P SORTING VÀ TÌM KI M S ARCHING ................................. 13
1. B

sắp x p .......................................................................................................... 13

1.1. Sắp x p


I e al S

1. . Sắp x p

x e al S

1.3. Sắp x p
1.3. C
.C

.1. Sắp x p



.4. Sắp x p

mộ

p p sắp x p


. . Sắp x p
.3. Sắp x p

......................................................................... 13

p .................................................................................................. 13

ê


p ư

.......................................................................... 13

è

Sele

sắp x p .................................................. 14

ả ................................................................................ 15
s

.............................................................................. 15



p

x a es

........................................................... 17

I se

s

............................................................................... 19

ọ B


le s

.............................................................................. 21

iv


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
. .S s

sắp x p

3. C

l

4. T m

CH

CH

CH

CH

m

Heap sắp x p


y

ả ................................................................. 23


Heap s

. ............................................... 24

.................................................................................................... 31

.C

........................................................................................................... 33

.B

p ......................................................................................................................... 33

NG III: Đ

UI VÀ CHI N L

1.

K

m


2.

C

lượ

3.

C

lượ

C V T CẠN .......................................................... 34

..................................................................................................... 34
B
ay l

NG IV: CHI N L
1.

C s

2.

Sắp x p ộ

3.

Sắp x p


4.

Tm

5.

B

e

Ba

a

/ ya

e

................................................ 35

C CHIA Đ TR ......................................................................... 38

ủa

lượ

a

Me e s


a
m

e ............................................................................. 34

D

C

e .......................................... 38

........................................................................................ 38
s

p

ea

..................................................................................... 43

................................................................................................... 46

p...................................................................................................................... 48

NG V: UI HOẠCH ĐỘNG ........................................................................................ 49
1.

C


lượ



2.

B

1: D y

3.

B

:B

4.

P ư

5.

B

6.

B

...................................................................................... 49


a ......................................................................................... 49
y

p p



y

ma

.............................................................. 51

.................................................................................. 53
.............................................................................. 53

p...................................................................................................................... 57

NG VI: CHI N L
1.

N

yê ắ

2.

B

3.


Bài t

4.

S s

C THAM LAM GR

D ) ....................................................... 60

am lam ............................................................................................... 60
....................................................................................................... 60

lpl

....................................................................................................... 61
lượ

am lam



.................................................... 64

TÀI LI U THAM KHẢO ........................................................................................................ 65
ĐỀ THI THAM KHẢO ............................................................................................................ 66

v



ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
LỜI NÓI ĐẦU
C
l

a
l mộ
ư
ượ
p ả s ụ
l

. V
p p
lp
ê
lựa ọ
mô ọ P
T

s
s

ưa a

l

l



ê
ắ l
l
ủa
a ọ my
. Hầ
ù lớ ay
ù
ả ay p
p

lm
ê lượ x y ự
a ọ my
ả lý y

ả p p

. V y

p

l mộ
a ọ .

l

y ựa ê
m

ê
m

p

y mô ọ C
l

a Cô

Đ ọ H
ả V
am ù
ớ sự am ả ủa
l
ủa

p

ướ

y
pe a. Vớ ẩy ư
ượ
a

a
m



sắp x p m m
lượ
ư
ay l

am lam
y ọ s
p
em s
ê
ộ ả mộ
l
. M
ù
ố ắ

ô
mộ số
s
y ọ s ượ
è ồ
p
em
ê
ộ ả pý
ô
a
l
y.
X




a

lượ
l

ê
y ê my
l
e

l


ảm


p ỡ

è ồ
l

p

Ba

y




m

a

.

Hải phòng, tháng 04 năm 2010
Tác giả

Nguyễn Hữu Tuân

1


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
CHƯƠNG I C C

H I NIỆ

CƠ ẢN

1. Thuật toán (giải thuật) - Algorithm
1.1. Đ nh ngh a thuật toán
C
a
ư
p
. Te

ư
ố s
a
Algorithms Se
ủa T mas H. C me
R es
Cl
Se
ượ
a

x
ell- e e
s
a a mộ
mộ p
ượ ọ l
N
mộ ô
p ầ

ả .

mộ

ủa



ell- e e

a l mộ
l mộ

x
y số
a số

a

a ủa
l “Introduction to
C a les . Le se s
R al L.
ư sa : “mộ
l mộ ủ
mộ p
ọ l p
p .

ư l
. V
ủa mộ

mộ
m

m
ư
ụ .T m
ù

l mộ

mộ

m

1 2 Đ c tr ng của thuật toán
T




ắ : T
l




ầ p ả
.Đ y

ảm ả
l

mộ
ư

a





sa

ố ớ mộ

.
T

:

T

x

p
T



ủa
T
y

ư

ầ p ả

:C
ướ ủa

ầm lẫ ố ớ ư
ả:
a
ù .

sa mộ số
p ả

a m
l Input. K


e
ả ủa
ượ



y

.


ư
p p ê

a
ượ
ư


ướ .

ượ p



ượ xem l

p
:
ượ mộ lớp

N

ảm ả s

ọ l
ự.

p ố
a

ư
ọ l O tput.

l mộ

ả ă





y
ượ yê

p

p



ả ụ

ượ



l
ùy e

2. i u diễn thuật toán
T ư ng có hai cách bi u di n một thu t tốn, cách th nh t là mơ tả
của thu t toán, cách th hai là s dụ s ồ giải thu t.
2.1.

ô tả các

ước thực hi n

ớc thực hiện


Đ bi u di n thu
ư i ta mô tả
x
ước thực hi n của thu t tốn,
ngơn ng ù
mơ tả thu t tốn có th là ngơn ng tự nhiên ho c một ngôn ng lai ghép
gi a ngôn ng tự nhiên với một ngôn ng l p
ọ l
n giả mã l nh.

2


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
Ví dụ: mơ tả thu

m ước số chung lớn nh t của hai số nguyên.

Input: Hai số nguyên a, b.
O p :

ớ số

lớ

ủa a

.


Thuật toán:
Bướ 1: N

a

Bướ

a

:N

USCLN(a, b)=a.
m USCLN của a-b và b, quay l i ướ 1

Bướ 3: N u a < b thì tìm USCLN của a và b-a, quay l i ướ 1
2 2 Sử dụng s đ ( u đ ) giải thuật (flowchart)
Mộ
(Algorithm Flowchart).
S



s
y

. C
ư ù




ý
s

mô ả



Bắ

l s



ủa

ủa mộ s

ầu



mô ả
ướ
ụ s ồ ả
a
.


s


a


C

p

s



mộ mô ả ma

ủa
mô ả




1
Câu l nh

K t



c

3


4

2

Đ u ki n

Đ

S
5

hối 1 K ố

Nh p xu t d li u





y

hối 2 K ố
mộ

Khối 3 T ự
ư
a

Khối 4: R
s

e
(False).

mộ

ư

a

ư
l
m a
Đ
T e

l mộ
u ki
u th

l

ồm mộ

ư

B lea
sa

u th
s


e

Sa

3


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
hối

C

l

p

x

l .

3. Độ phức tạp thuật toán – Algorithm Complexity
3 1 Các tiêu chí đánh giá thuật tốn

ư
dựa trên ha ê

m

ộ tốt, x u và so sánh các thu t tốn cùng lo i, có th


ẩ :

+T



.

+ Dựa vào th i gian thực hi n và tài nguyên mà thu t toán s dụ
bộ d li u.

thực hi n trên các

Trên thực t các thu t toán hi u quả thì khơng d hi
t hi u quả
ơ
d dàng thực hi n và hi
ược một cách nhanh chóng. Và mộ
u có vẻ ngh ch lý là các
thu t tốn càng hi u quả thì càng khó hi
t càng ph c t p l i càng hi u quả (không
phả l
. V
nh giá và so sánh các thu
ư a ư ng dựa
ê
ộ ph c t p v th i gian thực hi n của thu t toán, gọ l ộ ph c t p thu t toán
(algorithm complexity). V bản ch
ộ ph c t p thu t toán là mộ

m ướ lượng (có th
khơng chính xác) số phép tính mà thu t toán cần thực hi n (t
dàng suy ra th i gian
thực hi n của thu
ối với một bộ d li
p
ước N. N có th là số phần t
của mả
ư ng hợp bài toán sắp x p ho c tìm ki m, ho c có th l ộ lớn của số trong
bài toán ki m tra số nguyên tố chẳng h n.
3.2. Đánh giá th i gian thực hiện thuật toán
Đ minh họa vi
chọn (selection sort) và sắp x p
Cài

ộ ph c t p thu t toán ta xem xét ví dụ v thu t tốn sắp x p
i ch trực ti p ex a e s
ư sa :

t của thu t toán sắp x p chọn:

for(i=0;i{
min_idx = i;
for(j=i+1;jif(a[j]min_idx = j;
if(min_idx!=i)
{
temp = a[i];

a[i] = a[min_idx];
a[min_idx] = temp;
}

4


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
}
Số phép tính thu t tốn cần thực hi n ượ
(N-1) + (N-

+

+

+1

ư sau:

N* N-1)/2.

Phân tích chi ti
N* N-1)/2 là số phép toán so sánh cần thực hi n, còn số lần
thực hi
i ch hai phần t (số nguyên) tố a ủa thu t toán là N.
C

t của thu t toán sắp x p


i ch trực ti p:

for(i=0;ifor(j=i+1;jif(a[j] < a[i])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
+


ự ối với thu t tốn sắp x p chọn ta có số p p

l : (N-1) + (N-2)
+ +1 N* N-1)/2. Chi ti
N* N-1)/2 là số lần so sánh thu t toán thực hi n, và
l số lần i ch hai phần t (hai số nguyên) tố a ủa thu t toán.

T
ư ng hợp trung bình, thu t tốn sắp x p chọ
x ướng tố
s ới sắp
x p i ch trực ti p vì số a
i ch
ư ng hợp tốt nh
ư a
ư ng hợp tồi nh t thì chắc chắn thu
n sắp x p chọn tố

k t lu n thu t
toán sắp x p chọ
a
s ới thu t toán sắp x p i ch trực ti p.
3 3 Các đ nh ngh a h nh thức về độ phức tạp thuật toán
Gọ

l

m


m
a
ọ l : l O lớ ủa

ô
ảm
am
ư ồ
mộ

a ê
p
số
y. C
a
số
N 0:




ư .
ýl
m N l O N

N  N0 ; f ( N )  c.g ( N )
P
ủa m
m * .

l
m ướ p ầ

T ay
y ô
ư
ô
Đ

ư sa : N l O N

ủa m * . C

N l O N
ố x
s y a N O(f(N)).
a ê
ê


ượ
ủa

ọ l ý
m ă .


ýl

a ư
a l

a

O lớ

-O

m
l

N

a

sa
ă




O

p ầ
l
a



N . C ý
ượ l O N
ư

ượ s


N


5


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
C ẳ
a
C

ố ớ
l N
ý



sắp x p
O(N2 . C

a l

ọ ta
m

f(N) = N*(N-1)/2 = 0.5N 2 – 0. N
ô
ă
a
m N 2.

m
x
ô
ư
ô
a
ả l
x
ủa
“C ư
a ự
l a l
ê my
ủa
ô . N ư

a ọ l
a
a
ượ
m
a

ủa
l
m
a. N
a ă
ướ
p lê
lầ
a

ủa
ư
s ă lê x p x 4 lầ
ô p ụ ộ
ố ộ ủa m y.
C

m

ê

m


O(N2
l

N

a

D
ô
“ ộp



C

a
l

ă

ả a
H
ủa mộ
.

m N l 
m .

 l



ê l
m. C



ảm ả

ộ ă

ủa



ủa


a
l O(N2 .

a  (omega)v  (theta):

m N l  N
mxpx ư a

V

ư

ý p p O lớ

mô ả
a
s ụ . Đố ớ
l O(N2
ắ ọ l “

a
a

ả ầ

a.

a s s ụ
ớm
a ủa

ả ộ
p



a

N

ư

N


ư
ộ ă .

N

O

a

ướ

l
yl

a

ư

O N

ay

N

N



m
O N


a mộ
m

ay


a ay

p

ột vài ví dụ





0.5N2 – 0.5N = O(N2)




47 N*log(N) = O(N*log(N))
N*log(N) + 1000047N =  (N*log(N))


T ả

Độ p
p l  (N2 )



N mộ

M
(N*log(N))

T
ộ p
p
m

K

xem x
ợp ố

ủa

l O(Nk )
sắp x p

l O(N2
sắp x p ựa ê s s



sắp x p

l O(N5 )

ộ p

p ố ư l 

sắp x p Me eS
số a
s s
a ủa Me eS l  N*l N
sắp x p ố ư .

s s
ư

ư

m a
p
a

ợp:
e est case).

ù l
ư a
a e a e ase
ư

ư
x
ợp x


l N*l N . D
a l Me eS l

ộp
e

p ủa
s ase

6


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
3.4. Các ớp thuật toán
K

a

ộp



ý
f(N) =  N
N

p
l


a
y



ư

as
1:

số

a /

ô

a

ớ ủa mộ
ay s

p ớ lớp ủa m . V ụ
l ea . C
am ả êm:

sa

f(N) =  (log(N)): logarit
f(N) =  N : y


l ea

f(N) =  (N*log(N)): N log N
f(N) =  (N 2 :

a

f(N) =  (N 3 :
f(N) = O(Nk

3


f(N) =  (bN :
Đố ớ
ướ ủa ồ

p
l

: a

p ly m al

exp e al


p  V+

ộ p


a l “ y



a



mộ



m

a
. C ă
ộp
p
.T
ủa

số l lớ
ư
ợp
số .

p
p


ộ p
a l 10N 2
ư
y ố

số

e
l  (N 2
p ả l 107 N 2 .

ơ

l

e mộ


mộ

l

O
a s
a ớ mộ
ê
ưa

Ví dụ:
m số lầ x

ủa m ý ự
mộ x
N ý
ả l
y
a
ộ x
ố ớ m ý ự

m xem
a
ê lầ . K
ướ ủa ả
l ố
l
lp
C
l y
ố ớ N. N ư s l ố
p ủa
l  S*N
S l số p ầ
ủa ả
s
mộ


y ớ ộp
p l  (S + N).
Trong

ô
am



.

Đố ớ ầ
b ư
l
mố
x
C
a l
số ủa
ý
m

l mộ số
mm

X

m

a a



lp



mộ
a . C


a

am

ự. Mộ
ý ự
x
ố ớ ô
l ộ
ụ . C ý

1000000000 p p
ả ả sa
êm:

Độ phức tạp

Giá tr N ớn nhất

 (N)

100 000 000

 (N log N)


40 000 000

 (N2)

10 000

 (N3)

500

7


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
 (N4)

90

 (2N)

20

 (N!)

11

Th i gian thực hiện của các thuật toán c độ phức tạp khác nhau
O(Log(N))


10-7 giây

O(N)

10-6 giây

O(N*Log(N))

10-5 giây

O(N2 )

10-4 giây

O(N6 )

3p

O(2N)

1014 ăm

O(N!)

10142 ăm

Ch ý về phân tích thuật tốn.

ư
a ủa

l s
-O –
ư
s m mơ
ê
Ví dụ: C
m
ủa

a

y mộ
. T y ê
lắm
ê l


ô
. N ư


ê

ộp

p
a ay ù
ýp p
ượ
ư

a


y

-O l

ê

ố.

mộ mả

ượ sắp A. H y x
D ay ô . H y xem

xem
m
ư

mả

A
sa :

a p ầ

int j=0;
for (int i=0; i{

while ( (j<N-1) && (A[i]-A[j] > D) )
j++;
if (A[i]-A[j] == D)
return 1;
}
lầ

R
m lầ ă

l O(N)
N lầ .



ê l O(N2 :
a N lầ . N ư mộ p

a

ủa

lp


le ê
s
l
ă


ượ


a

ô

N
y
y

8


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
N
l ON

l O(N2
ưa a ượ ô

a
a

a ẫ

ư

l


x

.

4. Cấu tr c dữ iệu – Data structure
Niklaus Wirth, một l p trình viên và nhà khoa họ m y
ư i phát minh ra ngơn
ng l p
Pas al
ng nói một câu nói n i ti
l
ực l p
:C ư
(Programs) = C u trúc d li u (Data Structures) + Giải thu t (Algorithms). Câu nói này nói
lên bản ch t của vi c l p
l
m một c u trúc d li u phù hợp
bi u di n d li u của
bài toán và t
x y ựng giải thu t phù hợp với c u trúc d li
chọn. Ngày nay với sự
phát tri n của các k thu t l p trình, câu nói của Wirth khơng hẳ
y
ối n a
ư
ẫn phản ánh sự gắn k t và tầm quan trọng của các c u trúc d li u và giải thu t.
C u trúc d li
ược s dụ
bi u di n d li u còn các giải thu
ược s dụ

thực
hi n các thao tác trên các d li u của bài toán nh m hồn thành các ch
ă
ủa ư
trình
Các chiến
K ơ

c thiết kế thuật toán

mộ p ư

l


lượ

p p
. C

p

a xy ự
a ọ my
p ụ
l

ê
ê


ưa a
a .

5.1. Duyệt toàn ộ (E hausted search)
C


lượ

y

ộ l

y

lượ m m

. T
ê
ay

ộ mộ
ô . P ư

p ả l

m ủa

p ả l
lớ . C


p ư

ô
a
p p y yê
ay



l
p ư

xem x

ư

ê p ả

y



p p
ủa
mộ


ô . M


ô

p p ả

lp

ă

ê

a s xem x

xem
p ả l
m a xem mộ

m
ù

ả ố
ủa p ư



s

p ư




p p
m

p p

y


m ủa
ê

y

ô

ướ

p
as



3.

5.2. Đệ qui quay ui – Backtracking
C
qui. N

lượ
m ủa


ms

ay l l mộ
ượ mô

mộ

p
p ầ

ẻ ẹp

sự

e

ủa

m





s

x

ướ

.M

m ủa

s


m

ma

ựa ê
p ầ

m

s
p ụ



lượ x y ự
a ướ
mộ

ựa ê p ư

ù

p p


a
ủa e
ô

p ả
ay l

l .

3 Chia đ tr (Divide and Conquer)
C
ư

lượ
ủa

a
lượ

y

l mộ
e

lượ


a



y

l:






.
y mộ

9


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
as
sa

a
m ủa

ợp
Ty

ê
ợp lý

mộ

ượ

l
ă

y

s
ư



C

p

sắp x p ộ
a

p y
me e s
y ượ


aN a

sa :

ố: l m




a l

ầ .

a
ượ ả y
ợp l
ả ủa

ý ô

y

sắp x p
y
ư

a

s

ộ l

3.

aN .

a s xem x


1 nÕu N = 0
(a ) nÕu N ch½n
a* (aN/2 )2 nÕu N lỴ

N

N/2 2

a

T

a y

a

.

Ví dụ[6, trang 57]: T
Đ

m

l
a

s



m ủa

ơ

ê

as y a

ủa

ư sa :

int power(int a, int n)
{
if(n==0)
return 1;
else{
int t = power(a, n/2);
if(n%2==0)
return t*t;
else
return a*t*t;
}
}
Chiến
C
ợp

c tham am (Greedy)


lượ

am lam l mộ
lượ x y ự
ố ư
m
ượ
m ố ư
. T
ư
ợp
m
l
ă
a
ộp
p

Ch ý: T
m ố ư . T
ố ư .

mộ số

xy ự
ượ
am ă


ả ủa

p.
m

m


m ố ư
lượ



ụ ộ
ư
am lam ư
ợp

m ầ



m

10


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
5.5. Qui hoạch động (Dynamic Programming)


l


lượ x y ự

y
ố ư
ủa
ô p ả l
m
lớ
/
l a
ê
ô

ượ
. Trong
lượ

as xy ự
a
ủa

s
l
ả ựa ê
s p lems ựa ê
a
.C
qui


ư
s ụ
mả
lư l
m ủa
a
p
:
m p
p
.
ài tập
số

ài tập 1: X y ự s ồ ả
a
ượ
a ư sa :
0

1

1

N

số

N-1 +


N-

ài tập 2 X y ự

s

x  x  ...  x

ớ N số x ự

ớ N

a

N

y

.

ồ ả

:
m

ă

a N

x


p

p m.


ài tập 3 T
mộ ma
ựa ủa ma
sa le p
ê ộ ủa ma
.C ẳ

a

p MxN mộ p ầ
l p ầ
l mộ p ầ


ư
0

a

a

ượ

ọ l

m
p ầ
lớ
ma
sa :

ê
ựa

1 2 3
4 5 6


7 8 9 

H y
ư
p m
ưa a ộ p
ư

ài tập
. H y
ma
ộp

m
p ủa




x

p

C mộ ma
ướ MxN ồm
số

ả số m
ư
m ma
ủa ma
sa
p ầ
lớ
ượ
max m m s m pla ea . H y ưa a
p ủa
s ụ .


số ủa mộ a
mộ
x0. H y

ảs

số l
ủa a


an *xn + an-1 *xn-1 + .. +a1 *x + a0

f(x) = a0 + x*(a1 +x*(a2 +x*

xa

ựa ủa mộ ma

.

ài tập
V
ư
p

a
x l mộ số
e ô
H e sa :
N

m yê

ài tập
C
4 m xa
e
m
.


.+x an-1 +an *x

4
ộp
ướ
a
m
. H y ưa a

p a ê xố
ướ



H

m m ủa
xp
sa ủa

e .

y

ộp ượ ô
1
ộp
1 y sa
ủ ả 4m


11


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
số

ài tập 7 H y
a
số.
ài tập 8

p ụ

ư

a
s

ượ
a



số

a







số



N.

12


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
CHƯƠNG II: S P XẾP (S RTING) VÀ T

IẾ

(SE RCHING)

1. Bài toán s p ếp
1 1 S p ếp trong (Interna Sorting)
Sắp x p ược xem là một trong nh
l
ực nghiên c u c
n của khoa học máy
. T ướ
t toán chi ti t chúng ta cần nắm v ng một số khái ni m
ản
sau:
+ Mộ ư ng (field) là mộ

của mộ ư i ...

d li

ẳng h

+ Một bản ghi (record) là một t p hợp

ư ê

i, số

n tho i

ư ng

+ Một file là một t p hợp các bản ghi
Sắp x p (sorting) là một quá trình x p t các bản ghi của một file theo một th tự nào
. V c xp
y ược thực hi n dựa trên một hay nhi
ư
ơ
y ược gọi là khóa xắp x p (key). Th tự của các bả
ượ x
nh dựa trên các khóa
khác nhau và vi c sắp x p ố ược thực hi
ối với m i khóa theo các th tự khác nhau.
Chúng ta s t p trung vào các thu t toán xắp x p và giả s khóa ch gồm 1 ư ng duy nh t.
Hầu h t các thu t toán xắp x p ược gọi là các thu t toán xắp x p so sánh: chúng s dụng hai
a

ả l s s
i ch (swap) các phần t cần sắp x p.
C

sắp x p

Sắp x p
trong




ượ

(internal sorting): D
sắp x p.

alm a

.

l

ầ sắp x p

l

ầ sắp x p
y p


ượ lư

ầy ủ





1 2 S p ếp ngoài (E terna Sorting)
Sắp x p


.
T
ư

ưl



ex e al s
: D
sắp x p

p m
ủa mô ọ
l sắp x p s l mộ mả
a
p
y

ụm
ọa
ư
a ủa

.

a

y

a


ướ
l

xem x
ồm a ư
a
xem x
ượ

ê

lớ
m

ô
a


sắp x p
. Cụ
l ư
l
ư
a ủa
mả số


1 3 S p ếp gián tiếp
Khi các bả
ước lớn vi
i các bản ghi là r t tố
m
giảm
p
ư i ta có th s dụ
p ư
p p sắp x p gián ti p. Vi c này có th ược
thực hi n theo nhi u cách khác nhau và môt trong nh
p ư
p p
l o ra một file
mới ch a
ư ng khóa của le a ầu, ho c con tr tới ho c là ch số của các bản ghi ban
ầu. Chúng ta s sắp x p trên file mới này với các bả
ước nh
sa
y

c p vào các bả
le a ầu thông qua các con tr ho c ch số
yl
lm
ư ng th y ối với các h quản tr
s d li u).

13


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
Ví dụ: chúng ta muốn sắp x p các bản ghi của le sa

y:

Index

Dept

Last

First

Age ID number

1

123

Smith


Jon

3

234-45-4586

2

23

Wilson

Pete

4

345-65-0697

3

2

Charles

Philip

9

508-45-6859


4

45

Shilst

Greg

8

234-45-5784

Sau khi sắp x p x
truy c p vào các bản ghi theo th tự
sắp x p chúng ta s
dụng th tự ược cung c p b i cột index (ch số . T
ư ng hợp này là 3, 2, 4, 1. (chúng
ta không nh t thi t phả
i các bả
a ầu).
1.3 Các tiêu chuẩn đánh giá một thuật toán s p ếp
Các thu t tốn sắp x p có th

ược so sánh với nhau dựa trên các y u tố sa

+ Th i gian thực hi n (run-time): số các thao tác thực hi
i các bản ghi).

s


+ Bộ nhớ s dụ
Mem y : l
lượng bộ nhớ cần thi
lượng bộ nhớ s dụ
ch a d li u cần sắp x p.
+ Một vài thu t toán thuộc lo “ pla e
bộ nhớ cho vi c thực hi n thu t toán.
+ Các thu
mm ớ

ô

y:

ư ng là số các phép so
thực hi n thu t toán

ần (ho c cần một số cố

nh) thêm

ư ng s dụng thêm bộ nhớ t l thu n theo hàm tuy n tính ho c
ước file sắp x p.

+ T t nhiên là bộ nhớ s dụng càng nh càng tốt m c dù vi
bộ nhớ cần thi t có th là có lợi.
+ Sự
nh (Stability):Một thu
quan h th tự của các khóa b

a

ơ

ối gi a th i gian và

ược gọi là
nh n
ư
gi ược
l m ay i th tự của các khóa b ng nhau).

C
a ư ng lo lắng nhi u nh t là v th i gian thực hi n của thu t tốn vì các thu t
tốn mà chúng ta bàn v ư ng s dụ
ước bộ nhớ ư
ư
a .
bả

Ví dụ v sắp x p
nh: Chúng ta muốn sắp x p le sa
y ự trên ký tự ầu của các
ướ y l
t quả sắp x p của các thu t tốn
nh và khơng
nh:

14



ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật

Chúng ta s xem xét t i sao tính
quan trọ
ư y.
2. Các ph

ng pháp s p ếp c

nh trong các thu t toán sắp x p l

ượ

ản

2.1. S p ếp chọn (Selection sort)
Mơ ả

:

Tìm phần t có khóa lớn nh t (nh nh
còn l i của mảng.
S



sa

sắp x p phần


:

15


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật

Bắ

ầu

Nh p n, a[0..n-1]
i=0
S

iĐ
vtmin=i
j=i+1

S

jĐ

S

a[j]Đ

vtmin=j
j=j+1

S

vtmin!=i

Đ
Đ i ch a[i], a[vtmin]
i=i+1
K t

c

Đ n mã sau minh họa cho thu t toán:
void selection_sort(int a[], int n)
{
int i, j, vtmin;

16


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
for(i=0; i{
vtmin = i; //

m




p ầ

a .. -1]

for(j=i+1;jif(a[j] < a[vtmin])
vtmin = j;
swap(a[vtmin], a[i]); //

m

a m

a

}
}
Ví dụ:

Với m i giá tr của i thu t toán thực
(n–2), thu t toán s cần (n-1) + (n- +
ư
ợp số lầ s s
ủa
mộ lầ
l . N ư y
ư
ợp ố
lầ


ầ lầ
.

hi n (n – i – 1) phép so sánh và vì i ch y t 0 cho tới
+1
-1)/2 t c là O(n2 ) phép so sánh. T
mọ
l
ô
. M lầ
y ủa
lp ố ớ
a p ầ
ê số lầ
ủa
ầ 0 lầ
ầ /

2 2 S p ếp đổi ch trực tiếp (E change sort)

ự ư
sắp x p
sắp x p è l
sắp x p
I e a e s
ay S a
Sele
Mô ả: Bắ ầ x
a

ọ l a

y
l p ầ
sa a
a[j].

p ầ
+1 ớ
a


-1
a

Ví dụ minh họa G ả s mả
a
s ượ ự
ư sa :



ư


S

p mộ số

ầm ớ

ọ l

l

.

ê a

0 ax
ố ù . Vớ m
l xảy a sa

ầ l



a


pa

p ầ
a
as

1 19 3 1 . C

sa
ýl a
a

ướ

ủa

i=0, j=2: 1, 6, 2, 19, 3, 12

17


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
i=1, j=2: 1, 2, 6, 19, 3, 12
i=2, j=4: 1, 2, 3, 19, 6, 12
i=3, j=4: 1, 2, 3, 6, 19, 12
i=4, j=5: 1, 2, 3, 6, 12, 19
K
S





ù : 1



3

1

19.


:

Bắ

ầu

Nh p n, a[0..n-1]
i=0
S

iĐ
j=i+1

S

jĐ

S

a[j]Đ
Đ i ch a[i], a[j]
j=j+1
i=i+1
K t

C


ủa

c

:

void exchange_sort(int a[], int n)
{
int i, j;
int tam;
for(i=0; i
18


ài giảng mơn học Phân tích thiết kế và đánh giá giải thuật
for(j=i+1;jif(a[j] < a[i])
{
//

a

a

tam = a[i];
a[i] = a[j];
a[j] = tam;
}

}
Độ p
p ủa
:C
y
s ớ
sắp x p ọ
sắp x p

p ầ số ướ s s
ư
ư :
l * -1 / lầ s s .
N ư số ướ
a p ầ
ớ số lầ s s : * -1 / . T
ư
ợp x
số ướ
ủa
ớ số lầ s s
ư
ợp
số ướ
l * -1 /4. C
ư
ợp ố
số ướ
0.
N ư y

sắp x p

p
l
m
s ớ
sắp x p ọ
số lầ
.
2.3. S p ếp ch n (Insertion sort)
Mô ả

:

T
ựa
của dãy cần sắp. P ư
.
S

ồ ả

a
p p
ủa

l
y ư

hèn m i khóa vào mộ

y
ược sắp x p
ược s dụng trong vi c sắp x p các cây bài trong

ư sa :

19


×