TR NG ĐH CÔNG NGHI P TP. HCMƯỜ Ệ
TT CNTT
C U TRÚC D LI U VÀ GI I THU TẤ Ữ Ệ Ả Ậ
Giáo viên: Tr n Th Kim Chiầ ị
DATA STRUCTURES & ALGORITHMS
Gi i thi uớ ệ
M c tiêuụ
N m v ng khái ni m ki u d li u, ki u d li u tr u ắ ữ ệ ể ữ ệ ể ữ ệ ừ
t ng. ượ
N m v ng và cài đ t đ c các ki u d li u tr u t ng c ắ ữ ặ ượ ể ữ ệ ừ ượ ơ
b n nh danh sách, ngăn x p, hàng đ i, cây, t p h p, b ng ả ư ế ợ ậ ợ ả
băm, đ th b ng m t ngôn ng l p trình căn b n. ồ ị ằ ộ ữ ậ ả
V n d ng đ c các ki u d li u tr u t ng đ gi i quy t ậ ụ ượ ể ữ ệ ừ ượ ể ả ế
bài toán đ n gi n trong th c t . ơ ả ự ế
Ngôn ng l p trình minh hoữ ậ ạ
Mã gi (pseudocode)ả
C++
N iộ dung ch ngươ trình
TT N i dungộ S ố
ti tế
Phân b th i gianổ ờ Ghi
chú
Lý
thuy tế
Th c ự
hành
T ự
h cọ
1 T ng quanổ 3 3 0 6
2 Đ quyệ 6 3 3 10
3 Tìm ki mế 10 6 4 12
4 S p x pắ ế 5 3 3 10
5 Ch ng (Stacks)ồ 6 3 3 10
6 Hàng đ i (Queues)ợ 6 3 3 12
7 Danh sách và chu iỗ 10 6 4 15
8 Các b ng và ph c h i thông tinả ụ ồ 10 6 4 10
9 Cây nh phânị 14 9 5 10
10 Cây nhi u nhánhề 5 3 2 10
T NGỔ 75 45 30 105
Ki n th c tiên quy t ế ứ ế
Đã h c môn ph ng pháp l p trình. ọ ươ ậ
Ki n th c v k thu t l p trình.ế ứ ề ỹ ậ ậ
S d ng thành th o ngôn ng C++ử ụ ạ ữ
Tài li u ệ
Tài li u h c t p:ệ ọ ậ
[1] C & Data Structures, P. S. Deshpande, O. G. Kakde -
CHARLES RIVER MEDIA, INC. Hingham, Massachusetts.
[2] Robert L.Kruse, Alexander J.Ryba, Data Structures And
Program Design In C++, Prentice-Hall International Inc., 1999.
[3] Bài gi ng & Bài th c hành CTDL - Tr ng ĐHCN.ả ự ườ
Tài li u tham kh o:ệ ả
[1] Giáo trình C u trúc d li u 1, Tr n H nh Nhi – D ng Anh ấ ữ ệ ầ ạ ươ
Đ c, Tr ng DHKHTN – DHQG TP.HCM.ứ ườ
[2] C u trúc d li u, Nguy n Trung Tr c, Tr ng DHBK – ấ ữ ệ ễ ự ườ
DHQG TP.HCM
[3] Nguy n Ngô B o Trân, Giáo trình c u trúc d li u và gi i ễ ả ấ ữ ệ ả
thu t – Tr ng Đ i h c Bách Khoa TP.HCM, 2005.ậ ườ ạ ọ
Tiêu chu n đánh giáẩ
Ki m tra và Thiể Điể
m
Tu n ầ
Ki m tra th ng xuyênể ườ 10% B t kỳấ
Thi gi a kỳữ 20% Tu n5ầ
Thi cu i kỳố 50% Tu n 9ầ
Báo cáo ti u lu nể ậ 20% Hàng tu nầ
Yêu c u đ i v i sinh viên:ầ ố ớ
•
D l p: lý thuy t trên 80% , th c hành b t bu c 100%ự ớ ế ự ắ ộ
•
Bài t p: hoàn thành các bài t p trên l p và nhà ậ ậ ớ ở
•
Tham gia đ y đ các bu i th o lu n c a nhómầ ủ ổ ả ậ ủ
Trao đ i thông tinổ
Đ a ch mail:ị ỉ
•
Đ a ch download tài li u:ị ỉ ệ
•
/>
T ng quanổ
1.1. Khái ni m ệ c u trúc d li u & gi i thu tấ ữ ệ ả ậ
1.2. Đánh giá c u trúc d li u và gi i thu t ấ ữ ệ ả ậ
1.3. Ôn l i ngôn ng C++ạ ữ
1.4. Các ki u d li uể ữ ệ
1.5. Ki u d li u tr u t ng ể ữ ệ ừ ượ
1.6. Hàm
1.7. T ng k tổ ế
1.8. Câu h i và bài t pỏ ậ
Ch ng 1ươ
D li uữ ệ có th là d li u đ a vào (input data), d li u trung ể ữ ệ ư ữ ệ
gian ho c d li u đ a ra (output data). M i d li u có m t ặ ữ ệ ư ỗ ữ ệ ộ
ki u d li u riêng. Ki u d li u có th là ki u c b n hay ể ữ ệ ể ữ ệ ể ể ơ ả
ki u tr u t ngể ừ ượ
C u trúc d li uấ ữ ệ là s s p x p có logic c a thành ph n d ự ắ ế ủ ầ ữ
li u đ c k t h p v i nhau và là t p h p các thao tác chúng ệ ượ ế ợ ớ ậ ợ
ta c n đ truy xu t các thành ph n d li u.ầ ể ấ ầ ữ ệ
Ví d : th vi n ụ ư ệ
Bao g m các sáchồ
Truy c p/tìm ki m m t cu n sách nào đó đòi h i ph i ậ ế ộ ố ỏ ả
bi t cách s p x p c a các sách ế ắ ế ủ
Ng i dùng truy c p sách ch thông qua ng i qu n lý ườ ậ ỉ ườ ả
th vi n.ư ệ
C u trúc d li u ấ ữ ệ
M t c u trúc d li u t t ph i th a mãn:ộ ấ ữ ệ ố ả ỏ
Ph n ánh đúng th c tả ự ế: C n xem xét k l ng cũng nh ầ ỹ ưỡ ư
d trù các tr ng thái bi n đ i c a d li u trong chu trình ự ạ ế ổ ủ ữ ệ
s ng đ có th ch n CTDL l u tr th hi n chính xác đ i ố ể ể ọ ư ữ ể ệ ố
t ng th c t .ượ ự ế
Phù h p v i các thao tác trên đóợ ớ : Tăng tính hi u qu c a ệ ả ủ
đ án, vi c phát tri n các thu t toán đ n gi n, t nhiên h n ề ệ ể ậ ơ ả ự ơ
=> ch ng trình đ t hi u qu cao h n v t c đ x lý.ươ ạ ệ ả ơ ề ố ộ ử
Ti t ki m tài nguyên h th ng:ế ệ ệ ố CTDL ch nên s d ng ỉ ử ụ
tài nguyên h th ng v a đ đ đ m nhi m đ c ch c ệ ố ừ ủ ể ả ệ ượ ứ
năng c a nó. ủ Lo i tài nguyên c n quan tâm là : CPU và b ạ ầ ộ
nh .ớ
C u trúc d li u ấ ữ ệ
Nh ng c u trúc d li u c ữ ấ ữ ệ ơ
b nả
Các c u trúc bao g m ấ ồ
Danh sách liên k t (linked lists)ế
Ngăn x p (Stack), Hàng đ i (Queue)ế ợ
Cây nh phân (binary trees)ị
…
Gi i thu t gi i là gì?ả ậ ả
Gi i thu t (Algorithm):ả ậ
Còn g i là thu t toán là t p các b c ọ ậ ậ ướ có th tính toán đ c ể ượ
đ đ t đ c k t qu mong mu n. ể ạ ượ ế ả ố
Gi i thu t đ c xây d ng trên c s c a c u trúc d li u ả ậ ượ ự ơ ở ủ ấ ữ ệ
đã đ c ch n.ượ ọ
Gi i thu t có th đ c minh h a b ng ngôn ng t nhiên ả ậ ể ượ ọ ằ ữ ự
(natural language), b ng s đ (flow chart) ho c b ng mã ằ ơ ồ ặ ằ
gi (pseudo code). ả
Ví d : S p x p các ph n t ụ ắ ế ầ ử
1 2 3 4 5 6 7
1
2
3
4
5
6
7
Ví d : Tính t ng các s nguyên l t 1ụ ổ ố ẻ ừ n
B1: S=0
B2: i=1
B3: N u i>n thì sang B7, ng c l i sang B4ế ượ ạ
B4: S=S+i
B5: i=i+2
B6: Quay l i B3ạ
B7: T ng c n tìm là Sổ ầ
13
Gi i thu t gi i là gì?ả ậ ả
Gi i thu t gi i là gì?ả ậ ả
Gi i thu t (Algorithm):ả ậ
Các tính ch t quan tr ng c a gi i thu t là: ấ ọ ủ ả ậ
ậ H u h n ữ ạ (finiteness): gi i thu t ph i luôn luôn k t thúc sau ả ậ ả ế
m t s h u h n b c. ộ ố ữ ạ ướ
ớ Xác đ nh (definiteness):ị m i b c c a gi i thu t ph i đ c ỗ ướ ủ ả ậ ả ượ
xác đ nh rõ ràng và ph i đ c th c hi n chính xác, nh t ị ả ượ ự ệ ấ
quán.
q Hi u qu ệ ả (effectiveness): các thao tác trong gi i thu t ph i ả ậ ả
đ c th c hi n trong m t l ng th i gian h u h n. ượ ự ệ ộ ượ ờ ữ ạ
Ngoài ra m t gi i thu t còn ph i có đ u vào (input) và đ u ộ ả ậ ả ầ ầ
ra (output).
M i quan h gi a ố ệ ữ
c u trúc d li u và gi i thu tấ ữ ệ ả ậ
CTDL + Thuật toán = Chương
trình
Đánh giá CTDL và GT
1. Các tiêu chu n đánh giá c u trúc d li uẩ ấ ữ ệ
Đ đánh giá m t c u trúc d li u chúng ta th ng d a vào m t ể ộ ấ ữ ệ ườ ự ộ
s tiêu chí sau:ố
C u trúc d li u ph i ti t ki m tài nguyên (b nh trong),ấ ữ ệ ả ế ệ ộ ớ
C u trúc d li u ph i ph n nh đúng th c t c a bài toán,ấ ữ ệ ả ả ả ự ế ủ
C u trúc d li u ph i d dàng trong vi c thao tác d li u.ấ ữ ệ ả ễ ệ ữ ệ
Đánh giá CTDL và GT
Th i gian th c hi n ch ng trình.ờ ự ệ ươ
Th i gian th c hi n m t ch ng trình là m t hàm c a kích th c d ờ ự ệ ộ ươ ộ ủ ướ ữ
li u vào, ký hi u T(n) trong đó n là kích th c (đ l n) c a d li u ệ ệ ướ ộ ớ ủ ữ ệ
vào.
Ví dụ: Ch ng trình tính t ng c a n s có th i gian th c hi n là T(n) ươ ổ ủ ố ờ ự ệ
= cn trong đó c là m t h ng s .ộ ằ ố
Th i gian th c hi n ch ng trình là m t hàm không âm, t c là T(n) ờ ự ệ ươ ộ ứ
≥ 0 ∀n≥ 0.
Đ n v đo th i gian th c hi n.ơ ị ờ ự ệ
Đ n v c a T(n) không ph i là đ n v đo th i gian bình th ng nh ơ ị ủ ả ơ ị ờ ườ ư
gi , phút giây mà th ng đ c xác đ nh b i s các l nh đ c th c ờ ườ ượ ị ở ố ệ ượ ự
hi n trong m t máy tính lý t ng.ệ ộ ưở
Ví dụ: Khi ta nói th i gian th c hi n c a m t ch ng trình là T(n) = ờ ự ệ ủ ộ ươ
cn thì có nghĩa là ch ng trình y c n cn ch th th c thi. ươ ấ ầ ỉ ị ự
Đánh giá CTDL và GT
T su t tăngỷ ấ
Ta nói r ng hàm không âm T(n) có t su t tăng (growth rate) f(n) ằ ỷ ấ
n u t n t i các h ng s c và nế ồ ạ ằ ố
0
sao cho T(n) ≤ c.f(n) v i m i n ≥ ớ ọ
n
0
.
Ví d 1-3: Gi s T(0) = 1, T(1) = 4 và t ng quát T(n) = (n+1)ụ ả ử ổ
2
.
Đ t nặ
0
= 1 và c = 4 thì v i m i n ≥ 1 chúng ta d dàng ch ng ớ ọ ễ ứ
minh r ng T(n) = (n+1)ằ
2
≤ 4n
2
v i m i n ≥ 1, t c là t su t tăng ớ ọ ứ ỷ ấ
c a T(n) là nủ
2
.
Ví d 1-4: T su t tăng c a hàm T(n) = 3nụ ỷ ấ ủ
3
+ 2n
2
là n
3
. Th c ự
v y, cho nậ
0
= 0 và c = 5 ta d dàng ch ng minh r ng v i m i n ≥ ễ ứ ằ ớ ọ
0 thì 3n
3
+ 2n
2
≤ 5n
3
Đánh giá CTDL và GT
Khái ni m đ ph c t p c a gi i thu tệ ộ ứ ạ ủ ả ậ
Đ ph c t p tính toán c a gi i thu t là m t hàm ch n trên c a ộ ứ ạ ủ ả ậ ộ ặ ủ
hàm th i gian. Vì h ng nhân t c trong hàm ch n trên không có ờ ằ ử ặ
ý nghĩa nên ta có th b qua vì v y hàm th hi n đ ph c t p ể ỏ ậ ể ệ ộ ứ ạ
có các d ng th ng g p sau: logạ ườ ặ
2
n, n, nlog
2
n, n
2
, n
3
, 2n, n!, n
n
.
Ba hàm cu i cùng ta g i là d ng hàm mũ, các hàm khác g i là ố ọ ạ ọ
hàm đa th c. ứ
M t gi i thu t mà th i gian th c hi n có đ ph c t p là m t ộ ả ậ ờ ự ệ ộ ứ ạ ộ
hàm đa th c thì ch p nh n đ c t c là có th cài đ t đ th c ứ ấ ậ ượ ứ ể ặ ể ự
hi n, còn các gi i thu t có đ ph c t p hàm mũ thì ph i tìm ệ ả ậ ộ ứ ạ ả
cách c i ti n gi i thu t. ả ế ả ậ
Độ phức tạp thuật toán
Đ đánh giá hi u qu c a m t thu t toán, có th ể ệ ả ủ ộ ậ ể tính s l ng ố ượ các
phép tính ph i th c hi n ả ự ệ c a ủ thu t toán nàyậ :
Phép so sánh
Phép gán
Thông th ng s các phép tính đ c th c hi n ph thu c vào c ườ ố ượ ự ệ ụ ộ ỡ
c a bài toán, t c là đ l n c a ủ ứ ộ ớ ủ đ u vàoầ
Vì th ế đ ph c t p thu t toánộ ứ ạ ậ là m t ộ hàm ph thu c đ u vàoụ ộ ầ
Tuy nhiên, không c n bi t chính xác hàm này mà ch c n bi t m t ầ ế ỉ ầ ế ộ
c l ng đ t t c a chúngướ ượ ủ ố ủ
Đ c l ng đ ph c t p c a m t thu t toán ta th ng dùng ể ướ ượ ộ ứ ạ ủ ộ ậ ườ
khái ni mệ Big-O
20
Ví dụ
Bước 1. Gán Tổng = 0. Gán i = 0.
Bước 2.
– Tăng i thêm 1 đơn vị.
– Gán T ng = T ng + iổ ổ
Bước 3. So sánh i với n
– Nếu i < n, quay lại bước 2.
– Ngược lại, dừng thuật toán.
21
• S phép gán c a thu t toán là bao nhiêu? ố ủ ậ
• S phép so sánh là bao nhiêu?ố
Gán: f(2n + 2), So sánh: f(n)
Đ ph c t p: O(n)ộ ứ ạ
int tong=0, i=0;
do{
i++;
tong+=i;
}while (i<n);
Các độ phức tạp thường gặp (GT.53)
Đ ph c t p h ng s : ộ ứ ạ ằ ố O(1) – th i gian ch y ờ ạ không
phụ thuộc vào độ lớn đầu vào
Đ ph c t p tuy n tính: ộ ứ ạ ế O(n) – th i ờ gian ch y ạ tỉ lệ
thuận với độ lớn đầu vào
Đ ph c t p logarit: ộ ứ ạ O(logn)
Độ phức tạp đa thức: O(P(n)), với P là đa thức có
bậc từ 2 trở lên
Đ ph c t p hàm mũ: ộ ứ ạ O(2
n
)
22
Bảng so sánh các độ phức tạp của
thuật toán
M t s l p thu t toánộ ố ớ ậ
23
Thứ tự độ phức tạp của thuật toán
24
Đánh giá CTDL và GT
Cách tính đ ph c t pộ ứ ạ
Qui t c c ng:ắ ộ
N u T1(n) và T2(n) là th i gian th c hi n c a hai đo n ch ng ế ờ ự ệ ủ ạ ươ
trình P1 và P2; và T1(n)=O(f(n)), T2(n)=O(g(n) thì th i gian th c ờ ự
hi n c a đo n hai ch ng trình đó ệ ủ ạ ươ n i ti p nhauố ế là
T(n)=O(max(f(n),g(n)))
Ví d 1-6ụ : L nh gán x=15 t n m t h ng th i gian hay O(1)ệ ố ộ ằ ờ
L nh đ c d li u scanf(“%d”, x) t n m t h ng th i gian hay ệ ọ ữ ệ ố ộ ằ ờ
O(1)
V y th i gian th c hi n c hai l nh trên n i ti p nhau là ậ ờ ự ệ ả ệ ố ế
O(max(1,1))=O(1)