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

Bài giảng cấu trúc dữ liệu thuật toán chương 1 nguyễn đức nghĩa

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.46 MB, 50 trang )

C U TRÚC D LI U
VÀ THU T TOÁN
Data Structures and Algorithms

Nguy N

C NGH A

B môn Khoa h c Máy tính
i h c Bách khoa Hà n i

Tel: 0438696121 (Off), 0903210111 (Mob)



Ch

ng 1

CÁC KI N TH C C

C u trúc d

li u và thu t toán - N. . Ngh a. B mơn KHMT

N I DUNG
1.1. Ví d m đ u
1.2. Thu t toán và đ ph c t p
1.3. Ký hi u ti m c n
1.4. Gi ngôn ng
1.5. M t s k thu t phân tích thu t tốn



C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT

B N


Ví d m đ u
• Bài tốn tìm dãy con l n nh t:
Cho dãy s
a1, a2, … , an
Dãy s ai, ai+1 , …, aj v i 1 ≤ i ≤ j ≤ n đ c g i là dãy con c a dãy
đã cho và ∑jk=i ak đ c g i là tr ng l ng c a dãy con này
Bài tốn đ t ra là: Hãy tìm tr ng l ng l n nh t c a các dãy con, t c
là tìm c c đ i giá tr ∑jk=i ak.
đ n gi n ta g i dãy con có tr ng
l ng l n nh t là dãy con l n nh t.

• Ví d : N u dãy đã cho là -2, 11, -4, 13, -5, 2 thì c n đ a ra
câu tr l i là 20 (là tr ng l
C u trúc d

ng c a dãy con 11, -4, 13)

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Thu t tốn tr c ti p
• Thu t tốn đ n gi n đ u tiên có th ngh đ gi i bài toán đ t ra
là: Duy t t t c các dãy con có th

ai, ai+1 , …, aj v i 1 ≤ i ≤ j ≤ n
và tính t ng c a m i dãy con đ tìm ra tr ng l
• Tr

c h t nh n th y r ng, t ng s các dãy con có th c a dãy đã

cho là
C(n,2) + n = n2/2 + n/2 .

C u trúc d

ng l n nh t.

li u và thu t toán - N. . Ngh a. B môn KHMT


Thu t tốn tr c ti p
• Thu t tốn này có th cài đ t trong đo n ch

ng trình sau:

int maxSum = 0;
for (int i=0; ifor (int j=i; jint sum = 0;
for (int k=i; k<=j; k++)
sum += a[k];
if sum > maxSum
maxSum = sum;
}

}

C u trúc d

li u và thu t toán - N. . Ngh a. B mơn KHMT

Thu t tốn tr c ti p
• Phân tích thu t tốn: Ta s tính s l ng phép c ng
mà thu t toán ph i th c hi n, t c là đ m xem dòng l nh
Sum += a[k]
ph i th c hi n bao nhiêu l n. S l
n 1 n 1

n 1

n 1

i  0 j i

i 0

i0

 ( j  i  1)  (1  2  ...  (n  i))  


( n  i )(n  i  1)
2

1 n

1  n 2 n  1  n( n  1)(2n  1) n( n  1) 
k
k
k  
(

1)



k 
2 k 1
2  k 1
2
6
2 
k 1 

n3 n 2 n
  
6 2 3

C u trúc d

ng phép c ng s là

li u và thu t tốn - N. . Ngh a. B mơn KHMT


Thu t toán nhanh h n

ý r ng t ng các s h ng t



i đ n j có th thu đ

t t ng c a các s h ng t i đ n j-1 b i 1 phép c ng, c
th là ta có:
j

j 1

k i

k i

 a[k ]  a[ j ]   a[k ]
• Nh n xét này cho phép rút b t vòng l p for trong cùng.

C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Thu t tốn nhanh h n
• Ta có th cài đ t nh sau
int maxSum = a[0];
for (int i=0; iint sum = 0;
for (int j=i; jsum += a[j];

if sum > maxSum
maxSum = sum;
}
}

C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

c


Thu t tốn nhanh h n
• Phân tích thu t tốn. Ta l i tính s l n th c hi n phép c ng
và thu đ

c k t qu sau:
n 1

n2 n
(n  i)  n  (n  1)  ...  1  

2 2
i 0

ý r ng s này là đúng b ng s l



thu t toán thu đ


ng dãy con. D

ng nh

c là r t t t, vì ta ph i xét m i dãy con đúng 1

l n.

C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Thu t tốn đ qui
• Ta cịn có th xây d ng thu t toán t t h n n a! Ta s s
d ng k thu t chia đ tr . K thu t này bao g m các
b c sau:
– Chia bài toán c n gi i ra thành các bài toán con cùng d ng
– Gi i m i bài toán con m t cách đ qui
– T h p l i gi i c a các bài toán con đ thu đ c l i gi i c a bài tốn
xu t phát.

• Áp d ng k thu t này đ i v i bài tốn tìm tr ng l ng
l n nh t c a các dãy con: Ta chia dãy đã cho ra thành 2
dãy s d ng ph n t
chính gi a và thu đ c 2 dãy s
(g i t t là dãy bên trái và dãy bên ph i) v i đ dài gi m
đi m t n a.
C u trúc d


li u và thu t toán - N. . Ngh a. B môn KHMT


Thu t tốn đ qui


t h p l i gi i, nh n th y r ng ch có th x y ra m t
trong 3 tr ng h p:
– Dãy con l n nh t n m

dãy con bên trái (n a trái)

– Dãy con l n nh t n m

dãy con bên ph i (n a ph i)

– Dãy con l n nh t b t đ u

n a trái và k t thúc

n a ph i (gi a).

• Do đó, n u ký hi u tr ng l ng c a dãy con l n nh t
n a trái là wL,
n a ph i là wR và
gi a là wM thì
tr ng l ng c n tìm s là

max(wL, wR, wM).
C u trúc d


li u và thu t tốn - N. . Ngh a. B mơn KHMT

Thu t tốn đ qui
• Vi c tìm tr ng l ng c a dãy con l n nh t
n a trái
(wL) và n a ph i (wR) có th th c hi n m t cách đ qui


tìm tr ng l ng wM c a dãy con l n nh t b t đ u
n a trái và k t thúc n a ph i ta th c hi n nh sau:
– Tính tr ng l ng c a dãy con l n nh t trong n a trái k t
thúc đi m chia (wML) và
– Tính tr ng l ng c a dãy con l n nh t trong n a ph i b t
đ u đi m chia (wMR).
– Khi đó wM = wML + wMR.

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Thu t tốn đ qui
• m – đi m chia c a dãy trái, m+1 là đi m chia c a dãy ph i

a1, a2,…,am, am+1, am+2,…,an
Tính WML c a dãy con
l n nh t trong n a trái
k t thúc t i am


C u trúc d

Tính WMR c a dãy con
l n nh t trong n a ph i
b t đ u t am+1

li u và thu t toán - N. . Ngh a. B mơn KHMT

Thu t tốn đ qui


tính tr ng l ng c a dãy con l n nh t n a trái (t
a[i] đ n a[j]) k t thúc a[j] ta dùng thu t toán sau:
MaxLeft(a, i, j);
{
maxSum = -; sum = 0;
for (int k=j; k>=i; k--) {
sum = sum+a[k];
maxSum = max(sum, maxSum);
}
return maxSum;
}

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Thu t tốn đ qui



tính tr ng l ng c a dãy con l n nh t n a ph i (t
a[i] đ n a[j]) b t đ u t a[i] ta dùng thu t toán sau:
MaxRight(a, i, j);
{
maxSum = -; sum = 0;
for (int k=i; k<=j; k++){
sum = sum+a[k];
maxSum = max(sum, maxSum);
}
return maxSum;
}

C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Thu t toán đ qui
S đ c a thu t toán đ qui có th mơ t nh sau:
MaxSub(a, i, j);
{
if (i = j) return a[i]
else
{
m = (i+j)/2;
wL = MaxSub(a, i, m);
wR = MaxSub(a, m+1, j);
wM = MaxLeft(a, i, m)+
MaxRight(a, m+1, j);
return max(wL, wR, wM);

}
}
C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT


Thu t tốn đ qui
• Phân tích thu t tốn:
Ta c n tính xem l nh g i MaxSub(a,1,n) đ th c hi n thu t
tốn địi h i bao nhiêu phép c ng?
• Tru c h t nh n th y MaxLeft và MaxRight đòi h i
n/2 + n/2 = n phép c ng
• Vì v y, n u g i T(n) là s phép c ng c n tìm, ta có cơng th c
đ qui sau:

0

T (n)   n
n
n
T
(
)

T
(
)

n


2
T
(
)n
 2
2
2
C u trúc d

n 1
n 1

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Thu t tốn đ qui
• Ta kh ng đ nh r ng T(2k) = k.2k. Ta ch ng minh b ng qui n p
• C s qui n p: N u k=0 thì T(20) = T(1) = 0 = 0.20.
• Chuy n qui n p: N u k>0, gi s r ng T(2k-1) = (k-1)2k-1 là
đúng. Khi đó
T(2k) = 2T(2k-1)+2k = 2(k-1).2k-1 + 2k = k.2k.
• Quay l i v i ký hi u n, ta có
T(n) = n log n .

• K t qu thu đ

C u trúc d

c là t t h n thu t toán th hai !


li u và thu t toán - N. . Ngh a. B môn KHMT


So sánh các thu t tốn
• Cùng m t bài toán ta đã đ xu t 3 thu t toán địi h i s
l

ng phép tốn khác nhau và vì th s địi h i th i gian

tính khác nhau.
• Các b ng trình bày d

i đây cho th y th i gian tính v i

gi thi t máy tính có th th c hi n 108 phép c ng trong 1
giây

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT

Th i gian tính

C u trúc d

li u và thu t tốn - N. . Ngh a. B môn KHMT


Th i gian tính


C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

B ng qui đ i th i gian
• B ng sau đây dùng đ tính th i gian th c hi n

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Bài tốn m đ u
• V i n nh th i gian tính là khơng đáng k .
• V n đ tr nên nghiêm tr ng h n khi n > 106. Lúc
đó ch có thu t tốn th ba là có th áp d ng đ c
trong th i gian th c.
• Cịn có th làm t t h n n a khơng?
• Có th đ xu t thu t tốn ch địi h i n phép c ng!

C u trúc d

li u và thu t toán - N. . Ngh a. B mơn KHMT

Thu t tốn Quy ho ch đ ng
Vi c phát tri n thu t toán d a trên DP bao g m 3 giai đo n:
1. Phân rã: Chia bài toán c n gi i thành nh ng bài tốn con nh
h n có cùng d ng v i bài toán ban đ u.
2. Ghi nh n l i gi i: L u tr l i gi i c a các bài toán con vào
m t b ng.

3. T ng h p l i gi i: L n l t t l i gi i c a các bài tốn con
kích th c nh h n tìm cách xây d ng l i gi i c a bài tốn
kích th c l n h n, cho đ n khi thu đ c l i gi i c a bài toán
xu t phát (là bài toán con có kích th c l n nh t).

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Thu t toỏn QH
ã Phân rÃ. Gọi si là tr ng l ng cđa d·y con lín nhÊt
trong d·y a1, a2, ..., ai , i = 1, 2, ..., n.
Râ ràng sn là giá trị cần tìm.
ã Tổng hợp lời gi¶i.
– Tr­íc hÕt, ta cã
s1 = a1.
– Gi¶ sư i > 1 và sk là đà biết với k = 1, 2, ..., i-1. Ta cần tính si là
tr ng l ng c a d·y con lín nhÊt cđa d·y

a1, a2, ..., ai-1, ai .
C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Thu t tốn QH


Do dãy con l n nh t c a dãy này ho c là có ch a ph n t ai ho c là không
ch a ph n t ai, nên nó ch có th là m t trong hai dãy:

– Dãy con l n nh t c a dãy a1, a2, ..., ai-1
– Dãy con l n nh t c a dãy a1, a2, ..., ai k t thúc t i ai.



T đó suy ra
si = max {si-1, ei}, i = 2, …, n.
trong đó ei là tr ng l
thúc t i ai.



ng c a dãy con l n nh t c a dãy a1, a2, ..., ai k t

tính ei, ta c ng có th s d ng công th c đ qui sau:
– e 1 = a 1;
– ei = max {ai, ei-1 + ai}, i = 2, ..., n.

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Thu t toán QH
MaxSub(a);
{
smax = a[1];
(* smax – tr ng l ng cđa d·y con lín nhÊt *)
maxendhere = a[1]; (* maxendhere – tr ng l ng c a dãy con l n nh t k t thúc t i a[i] *)
imax = 1;

(* imax - vÞ trÝ kÕt thóc cđa d·y con lín nhÊt *)
for i = 2 to n {
u = maxendhere + a[i];
v = a[i];
if (u > v) maxendhere = u
else maxendhere = v;
if (maxendhere > smax)then {
smax := maxendhere;
imax := i;
}
}
}

Phân tích thu t tốn:
D th y s phép toán c ng ph i th c hi n trong thu t toán (s l n th c
hi n câu l nh u = maxendhere + a[i];) là n.
C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT

N I DUNG
1.1. Ví d m đ u
1.2. Thu t tốn và đ ph c t p
1.3. Ký hi u ti m c n
1.4. Gi ngôn ng
1.5. M t s k thu t phân tích thu t tốn

C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT



Khỏi ni m bi toỏn tớnh toỏn
ã

Định nghĩa. Bài toán tính toán F là ánh xạ từ tập các xâu nhị phân độ dài
hữu hạn vào tập các xâu nhị phân độ dài hữu hạn:
F : {0, 1}* {0, 1}*.

ã

Ví dụ:
Mỗi số nguyên x đều có thể biểu diễn dưới dạng xâu nhị phân là cách
viết trong hệ đếm nhị phân của nó.
Hệ phương trình tuyến tính Ax = b có thể biểu diễn dưới dạng xâu là
ghép nối của các xâu biểu diễn nhị phân của các thành phần của ma
trận A và vectơ b.
Đa thøc mét biÕn P(x) = a0 + a1 x + ... + an xn hoàn toàn xác định bởi
dÃy số n, a0, a1, ..., an, mà để biểu diễn dÃy số này chúng ta có thể sử
dụng xâu nhị phân.

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT

Khái ni m thu t toỏn
ã

ã


Định nghĩa. Ta hiểu thuật toán giải bài toán đặt ra là một thủ tục xác định
bao gồm một dÃy hữu hạn các bước cần thực hiện để thu được đầu ra cho
một đầu vào cho trước của bài toán.
Thuật toán có các đặc trưng sau đây:
Đầu vào (Input): Thuật toán nhận dữ liệu vào từ một tập nào đó.
Đầu ra (Output): Với mỗi tập các dữ liệu đầu vào, thuật toán đưa ra các dữ liệu
tương ứng với lời giải của bài toán.
Chính xác (Precision): Các bước của thuật toán được mô tả chính xác.
Hữu hạn (Finiteness): Thuật toán cần phải đưa được đầu ra sau một số hữu hạn
(có thể rất lớn) bước với mọi đầu vào.
Đơn trị (Uniqueness): Các kết quả trung gian của từng bước thực hiện thuật
toán được xác định một cách đơn trị và chỉ phụ thuộc vào đầu vào và các kết quả
của các bước trước.
Tổng quát (Generality): Thuật toán có thể áp dụng để giải mọi bài toán có dạng
đà cho.

C u trỳc d

li u v thu t tốn - N. . Ngh a. B mơn KHMT


Gi i bài tốn là gì?
What is Problem Solving?

• Problem solving
– Là q trình đ t bài tốn và phát tri n ch

ng trình máy tính đ gi i bài

tốn đ t ra


• L i gi i bài tốn bao g m:
– Thu t tốn (Algorithms)
• Algorithm: là dãy các b

c c n th c hi n đ t d li u vào (input) đ a ra

k t qu đ u ra (output) c a bài toán trong th i gian h u h n.

– C u trúc d li u:
• Cách t ch c l u tr d li u vào - ra
C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Vịng đ i c a ph n m m
The Life Cycle of Software

• Vịng đ i c a ph n m m
– Là m t quá trình dài và liên t c
òi h i đ phát tri n m t ph n m m có ch t l



ng t t

– L p trình viên có th di chuy n t m t pha trong vòng đ i
sang b t k pha nào còn l i

C u trúc d


li u và thu t tốn - N. . Ngh a. B mơn KHMT


Vòng đ i c a ph n m m
The Life Cycle of Software

Vòng đ i c a ph n m m nh là m t bánh lái có th quay t m t pha đ n m t pha
khác b t k

Nguy n
c Ngh a - B
li u và thu t tốn - N. . Ngh a. B mơn KHMT
mơn KHMT HBKHN

1-35

C u trúc d

Vòng đ i c a ph n m m
The Life Cycle of Software

9 pha:











Phase 1: Ch rõ đ c đi m k thu t (Specification) (đ c t )
Phase 2: Thi t k (Design)
Phase 3: Phân tích r i ro (Risk Analysis)
Phase 4: Ki m th (Verification)
Phase 5: L p trình (Coding)
Phase 6: Test th (Testing)
Phase 7: Tinh ch l i gi i (Refining the Solution)
Phase 8: S n xu t (Production)
Phase 9: B o trì (Maintenance)
Nguy n
c Ngh a - B
li u và thu t tốn - N. . Ngh a. B mơn KHMT
mơn KHMT HBKHN

C u trúc d

1-36


Vòng đ i c a ph n m m
The Life Cycle of Software

• Phase 1:
c t (Specification)
– Các khía c nh c a bài tốn c n ch rõ:

• D li u đ u vào là gì (What is the input data?)

• D li u nào là đúng đ n, là khơng đúng đ n?
• Ai là ng i s d ng ph n m m và giao di n ng i dùng c n đ c
thi t k nh th nào?
• C n phát hi n nh ng l i gì và c n thơng báo nh th nào v chúng?
• Có th có các gi thi t nào?
• Có nh ng tr ng h p đ c bi t nào?
• D ng c a d li u đ a ra nh th nào?
• C n có các tài li u gì?
• Cái gì c n phát tri n trong t ng lai?

– Ch

ng trình m u (Ch ng trình mơ ph ng dáng đi u c a m t ph n
c a s n ph m ph n m m c n phát tri n)

C u trúc d

li u và thu t toán - N. . Ngh a. B mơn KHMT

Vịng đ i c a ph n m m
The Life Cycle of Software

• Phase 2: Thi t k (Design). Quá trình thi t k
bao g m:
– Chia ch ng trình ra thành các modules (Modules:
là các đ n v ch ng trình đ c l p)
– Ch rõ m c đích c a m i module
– Ch rõ dòng d li u trong các modules
– Xác đ nh giao di n (Interfaces - C c u giao ti p
gi a các mô đun)


C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT


Vòng đ i c a ph n m m
The Life Cycle of Software



Phase 3: Phân tích r i ro (Risk Analysis)
Phase 4: Ki m th (Verification)

– Ch ng minh tính đúng đ n c a thu t toán b ng các ph





ng pháp hình th c, …

Phase 5: Cài đ t (Coding)
– Liên quan đ n vi c chuy n thi t k sang m t ngôn ng l p trình c th
– Lo i tr các l i ng pháp
Phase 6: Test th (Testing)
– Liên quan đ n vi c lo i b các l i logic
– D li u test ph i bao g m:
• D li u đúng đ n v i k t qu bi t tr c
• D li u khơng đúng đ n

• D li u ng u nhiên
• D li u th c t

C u trúc d

li u và thu t toán - N. . Ngh a. B mơn KHMT

Vịng đ i c a ph n m m
The Life Cycle of Software

• Phase 7: Tinh ch l i gi i (Refining the Solution)
– Do ch ng trình đ c phát tri n v i nh ng gi thi t nh t đ nh nên c n
tìm cách gi m nh các gi thi t đ c b sung đ i v i đ u vào, đ u ra
– B sung thêm các ch c n ng
– T ng các bi n pháp ki m tra l i

• Phase 8: Xu t x

ng (Production)

– Bàn giao s n ph m cho ng i dùng.
– Ng i dùng s d ng ph n m m

• Phase 9: B o trì (Maintenance)

– S a ch a các l i do ng i s d ng phát hi n.
– B sung thêm ch c n ng.
– C i ti n m t s b ph n đ đáp ng yêu c u c a ng

C u trúc d


li u và thu t toán - N. . Ngh a. B môn KHMT

i dùng t t h n


ph c t p c a thu t toán
ánh giá đ ph c t p tính tốn c a thu t toán là đánh giá l ng
tài nguyên các lo i mà thu t tốn địi h i s d ng. Có hai lo i tài
nguyên quan tr ng đó là th i gian và b nh . Trong giáo trình
này ta đ c bi t quan tâm đ n đánh giá th i gian c n thi t đ th c
hi n thu t toán mà ta s g i là th i gian tính c a thu t tốn.



• Th i gian tính ph thu c vào d li u vo.
ã Định nghĩa. Ta gọi kích thước dữ liệu đầu vào (hay di d
li u vo) là số bít cần thiết để biểu diễn nó.
ã Ta s tìm cách đánh giá th i gian tính c a thu t toán b i m t hàm
c a đ dài d li u vào.
C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Phép tốn c b n


o th i gian tính b ng n v o no?

ã Định nghĩa. Ta gọi phép toán cơ bản là phép toán có

thể thực hiện với thời gian bị chặn bởi một hằng số
không phụ thuộc vào kích thước dữ liệu.
ã Để tính toán thời gian tính của thuật toán ta sẽ đếm số
phép toán cơ bản mà nó phải thực hiện.

C u trỳc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Các lo i th i gian tính
Chóng ta sÏ quan tâm đến
Thời gian tối thiểu cần thiết để thực hiện thuật toán với mọi bộ dữ liệu đầu
vào kích thước n. Thời gian như vậy sẽ được gọi là thời gian tính tốt nhất
của thuật toán với đầu vào kích thước n.
Thời gian nhiều nhất cần thiết để thực hiện thuật toán với mọi bộ dữ liệu
đầu vào kích thước n. Thời gian như vậy sẽ được gọi là thời gian tính tồi
nhất của thuật toán với đầu vào kích thước n.
Thời gian trung bình cần thiết để thực hiện thuật toán trên tập hữu hạn các
đầu vào kích thước n. Thời gian như vậy sẽ được gọi là thời gian tính trung
bình của thuật toán.
C u trúc d

li u và thu t toán - N. . Ngh a. B mơn KHMT

N I DUNG
1.1. Ví d m đ u
1.2. Gi i bài tốn và cơng ngh ph n m m
1.3. Thu t toán và đ ph c t p
1.4. Ký hi u ti m c n

1.5. Gi ngơn ng
1.6. M t s k thu t phân tích thu t toán

C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT


Ký hi u ti m c n
Asymptotic Notation

Q, W, O

c s d ng đ mơ t th i gian tính c a thu t tốn
• Thay vì nói chính xác th i gian tính, ta nói (n2)

c xác đ nh đ i v i các hàm nh n giá tr ngun
khơng âm
• Dùng đ so sánh t c đ t ng c a hai hàm

C u trúc d

li u và thu t tốn - N. . Ngh a. B mơn KHMT

Ký hi u Q
i v i hàm g(n), ta ký hi u (g(n)) là t p các hàm
(g(n)) = {f(n): t n t i các h ng s c1, c2 và n0 sao cho
0  c1g(n)  f(n)  c2g(n), v i m i n  n0 }

Ta nói r ng g(n) là đánh giá ti m c n

đúng cho f(n)

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Ví d
10n2 - 3n = (n2) ?
• V i giá tr nào c a các h ng s n0, c1, và c2 thì b t đ ng
th c trong đ nh nghĩa là đúng?
• L y c1 bé h n h s c a s h ng v i s m cao nh t,
còn c2 l y l n h n, ta có
n2 ≤ 10n2 – 3n ≤ 11n2, v i m i n ≥ 1.
i v i hàm đa th c:



so sánh t c đ t ng c n nhìn

vào s h ng v i s m cao nh t
C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT

Ký hi u O (đ c là ô l n - big O)
i v i hàm g(n) cho tr c, ta ký hi u O(g(n)) là t p các hàm
O(g(n)) = {f(n): t n t i các h ng s d ng c và n0 sao cho:
f(n)  cg(n) v i m i n  n0 }


Ta nói g(n) là c n trên ti m c n c a f(n)

C u trúc d

li u và thu t toán - N. . Ngh a. B môn KHMT


Ký hi u W
i v i hàm g(n) cho tr c, ta ký hi u W(g(n)) là t p các hàm
W(g(n)) = {f(n): t n t i các h ng s d ng c và n0 sao cho:
cg(n)  f(n) v i m i n  n0 }

Ta nói g(n) là c n d

C u trúc d

i ti m c n cho f(n)

li u và thu t toán - N. . Ngh a. B môn KHMT

Liên h gi a , W, O
i v i hai hàm b t k g(n) và f(n),
f(n) = (g(n))
khi và ch khi
f(n) = O(g(n)) và f(n) = W(g(n))
t c là
(g(n)) = O(g(n))  W(g(n))

C u trúc d


li u và thu t toán - N. . Ngh a. B môn KHMT


×