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

cấu trúc lưu trữ dữ liệu và giải thuật

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.73 MB, 106 trang )


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ú

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)

×