Tổng hợp bài giảng môn Cấu trúc dữ liệu và thuật toán_Cô Đỗ Bích Diệp| Bài giảng môn Cấu trúc dữ liệu và thuật toán| Trường Đại học Bách Khoa Hà Nội

Tổng hợp bài giảng môn Cấu trúc dữ liệu và thuật toán_Cô Đỗ Bích Diệp| Bài giảng môn Cấu trúc dữ liệu và thuật toán| Trường Đại học Bách Khoa Hà Nội. Tài liệu gồm 258 trang giúp bạn ôn tập và đạt kết quả cao trong kỳ thi sắp tới. Mời bạn đọc đón xem.

Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 1
Cutrúcd liuvàGiithut
Đỗ Bích Dip
diepdb@it-hut.edu.vn
B môn H thng thông tin- Khoa Công ngh thông tin
Trường ĐạihcBáchKhoaHàni
Thông tin chung
{ Gi hc
z Tiết 10-11 (14h50 – 16h30), th 5, tun 26-40
z Tiết 11-12 (15h45-17h20), th 6, tun 26-40
z Địa đim: D9-301
{ Giáo viên
z Đỗ Bích Dip
B môn H thng thông tin- Khoa CNTT- Phòng
325 nhà C1
z Email: diepdb@it-hut.edu.vn
z Gi tiếp sinh viên: 14h-16h th 2, th 3 hàng
tun
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 2
Tng quan v môn hc
{ Mctiêumônhc:
z S dng cài đặt đượccáccutrúcd liucơ bn
các thao tác trên các cutrúcd liu đós dng
mtngônng lptrìnhc th
z S dng cài đặt đượccácthuttoánspxếp, tìm
kiếmvàcácthut toán trên đồ th
z Phân tích được độ phctpcacácthut toán đã
cài đặt
z Nm đượccáck thutxâydng thut toán nhưđ
qui, chia để tr
{ Khilượng:
z thuyết: 45 tiết
z Bài tp: 15 tiết(Bàitpln)
z Bài tplnmônhc: lp trình, viết báo cáo, trình
bày
Ni dung môn hc
{ Thuttoánvàđộ phctpcathuttoán
{ Thuttoánđệ qui
{ Các thuttoánspxếp
{ Các thuttoántìmkiếm
{ Các cutrúcd liêu:
z Mng danh sách
z Ngănxếp, hàng đợi
z Cây
z Đồ th
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 3
Cách tiến hành
{ Bài ging
z S dng slides
z Sinh viên t ghi chép bài trong gi
{ Bài tp
z Sinh viên làm nhà hoc trên lp
z Sinh viên được yêu cu lên bng cha
bài hoc np bài làm
{ Tho lun
Tài liu tham kho
{ Sách giáo trình:
z Cutrúcd liuvàgiithut–Đỗ Xuân Lôi 2007
z Mastering Algorithms with C. O’Reilly, 1999.
{ Tài liuthamkho
z Introduction to Algorithms – T.H.Cormen,
C.E.Leiserson, R.L.Rivest, C. Stein- Second edition-
MIT Press, 2001 (có bndch tiếng Vit)
z Data structure and Algorithms in C++ –
M.T.Goodric, R.Tamassia, Wiley , 2003
z MIT Open Courseware:
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-
and-Computer-Science/6-046JFall-
2005/CourseHome/index.htm
z http://www.vocw.edu.vn/content/col10018/lat
est/
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 4
Đánh giá môn hc
{ Đim quá trình: trng s 0.3
z Kimtra giak:
{ Kim tra viết trong gi lên lp
{ Thi cuik
z Kimtra viếttheo lch thi chung
{ Bài tpln: Đim cng vào đim thi cui
k, ti đa 2 đim
{ Viết chương trình
{ Viết báo cáo
{ Trình bày
Bài tplnmônhc
{ Tìm hiuvàcàiđặtmts các
thuttoántronggiáotrình
z Thchin theo nhóm 4 sinh viên
{ Lptrìnhmtsốứng dng c th
s dng các cutrúcd liu đãhc
z Thchin theo nhóm 4 sinh viên
{ Sinh viên th tựđxut đề tài
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 5
Cách thchin bài tpln
{ Thành lp nhóm đề tài
z Tp hp nhóm
z Xác định đề tài
{ Thc hin đề tài
z Phân tích bài toán
z Viết chương trình
z Viết báo cáo
z Hp nhóm định k biên bn hp nhóm
{ Báo cáo kết qu
z Np chương trình, báo cáo
z Trình bày kết qu thc hin và demo vi giáo
viên
Kế hoch hctpd kiến
Xác định đề tàiCác cutrúcd liucơ bn(I)
zMng danh sách
3
04/09/08
Sp xếp (I) 7
2/10/08
Cây (II)
Bài tp
6
25/09/08
Bt đầuCây (I)5
18/09/08
Xác định đề tàiCác cutrúcd liucơ bn (II)
zNgăn xếp và hàng đợi
Bài tp
4
11/09/08
ThiếtlpnhómThut toán đệ qui2
28/08/08
GiithiuCác kiếnthccơ bn
zThuttoánvàđộ phctp
z hiutimcn
1
21/08/08
Bài tplnNi dungTun
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 6
Kế hoch hctp(d kiến)
Kim tra gia k8
9/10/08
Bov Bài tpln
14, 15
20-27/11/08
NpbàitpĐồ th (II)
Tng kết – Ôn tp
13
13/11/08
Đồ th (I)12
6/11/08
Tìm kiếm (II)
Bài tp
11
30/10/08
Tìm kiếm(I)10
23/10/08
Spxếp(II)
Bài tp
9
16/10/08
Đồ ánNi dungTun
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 1
Cutrúcd liuvàGiithut
Chương I: Các kiếnthccơ bn
Các kiếnthccơ bn
Ni dung
Các khái nim
Giithut
Cutrúcd liu
Phân tích giithut
Gi ngôn ng
Thigianthchingiithut
Đánh giá độ phctps dng timcn
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 2
Mtth tc bao gmmt dãy huhncácbước
cnthchin để thu được đầurachođầuvào
cho trướccamt bài toán
Giithut
Giithut
z Đặctrưng cagiithut
Đầuvào
Đầura
Tính huhn
Tính hiuqu
Tính xác định
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 3
GiithutvàChương trình
Chươngtrìnhlàmtth hincaGiithut trong mt
ngôn ng lp trình nào đó
Cutrúcd liu
z Kiud liutrutượng (Abstract Data Type)
hình toán hcvànhng phép toán thc
hintrênmôhìnhtoánhc này
d: ADT List
z D liu: Các nút
z Các phép toán:
B sung mtnútmi
Loib mtnút
Tìm kiếmmt nút giá tr cho trước
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 4
Cutrúcd liu
z Cu trúc d liu
S dng để biudinmôhìnhtoánhc trong
ADT
Viccàiđặtcáckiud liutrutượng đòi hi
phichncáccutrúcd liu để biudin
Liên quan đếncáchthct chcvàtruynhp
các phnt d liu
d: ADT List
z Cài đặts dng cutrúcmng đơngin
z Cài đặts dng cu trúc con tr
Xây dng chương trình giibàitoán
Ligiimt bài toán bao gm
z Cutrúcd liu
z Thut toán
Xây dng chương trình gii bài toán
z Tương t như vòng đờicaphnmm
z Gmcácbước
Thu thpyêucu: Hiurõđầuvàovàkếtquảđura
Thiếtkế : Xây dng giithut, b qua các chi tiếtv cách thc
cài đặtd liu hay các phương thc, tp trung vào các bướcx
Phân tích : Tìm, so sánh vigiithut khác
Cài đặt: Xây dng chương trình, quan tâm đếncáchthct
chc, biudinvàcàiđặt các phương thc
Kimth : Bao gmchng minh tính đúng đắncachương
trình, kimth các trường hp, tìm, sali
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 5
Thuttoánvàđộ phctp
Đánh giá lượng tài nguyên các loimàmtgii
thut đãs dng.
z Giithutnàythchin trong thigianthế o Æ
Phân tích v thigianthchingiithut
z Giithutnàys dng bao nhiêu b nh Æ Phân tích
độ khônggiannh giithut(chương trình) cncó.
Phân tích thigianthchingiithut
Mctiêucavicxácđịnh thigianthchin
mtgiithut:
z Để ướclượng mtchương trình s thchin trong bao
lâu
z Để ướclượng kích thướcd liu đầuvàolnnhtcó
th cho mtgiithut
z Để so sánh hiuqu ca các giithut khác nhau, từđó
lachnramtgiithutthíchhpchomt bài toán
z Để giúp tp trung vào đongiithut đượcthchin
vithigianlnnht
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 6
Phân tích thigianthchingiithut
z Cách thc
Xác định độ ph thuccathi gian tính ca
thut toán vào kích thướccad liu đầuvào
Các phương pháp thchin
z Phương pháp thc nghim
z Phương pháp phân tích datrênmôhìnhlýthuyết
Phân tích thigianthchingiithut
z Phương pháp thc nghim
Cài đặtgiithutbng ngôn ng lptrình
Chychương trình vicácd liu đầu vào khác nhau
Đothigianthcthichương trình đánh giá độ tăng
trưởng so vikíchthướccad liu đầuvào
z Hnchế:
S hnchế v s lượng và chtlượng camuth
Đòi himôitrường kimth (phncng phnmm)
thng nht, n định
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 7
Phân tích thigianthchingiithut
z Phương pháp thuyết
kh năng xem xét d liu đầuvàobtk
S dng để đánh giá các giithut không ph thuc
vào môi trường kimth
S dng vinhng tảởmccaocagiithut
z Thchinphương pháp này cn quan tâm
Ngôn ng t giithut
Xác định độ đothi gian tính
Mtcáchtiếpcn để khái quát hóa độ phctpv thigian
t giithut–Gi ngôn ng
z Gi ngôn ng (Pseudo-code)
t mc khái quát cao đượcs dng trong dint
giithut
Gi ngôn ng = Cutrúclp trình + Ngôn ng t nhiên
Algorithm arrayMax(A,n)
Input: Mng chan phnt s nguyên
Output: Phnt lnnht trong mng
Begin
currentMax = A[0]
for i = 1 to n-1 do
if currentMax < A[i] then currentMax = A[i]
return currentMax
End.
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 8
Gi ngôn ng
Các cutrúclp trình trong gi ngôn ng
z Câu lnh gán: V = E hocV Å E
z Cutrúcđiukhin:
if B then S
1
[else S
2
]
Case
B
1
: S
1
;
B
2
: S
2
;
B
n
: S
n
else S
n+1
end case;
Gi ngôn ng
z Câu lnh lp
z Vòng lpvis lnlpbiếttrước
for i = m to n do S hoc for i = n down to m do S
z Vis lnlp không biếttrước
while B do S hoc repeat S until B
z Câu lnh vào ra
Đọcd liuvào
read (<danh sách biến>);
Ghi d liu
write (<danh sách biếnhoc dòng t>);
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 9
Gi ngôn ng
z Khai báo hàm
Function <tên hàm> (<danh sách tham s>)
Begin
<các câu lnh>
return (giá tr)
End
z Gihàm: Hàm đượcgibng tên hàm cùng danh ch
giá tr tham s thcs, nm trong biuthc
Gi ngôn ng
Function AVERAGE(A,n)
Begin
{A là mtmng gmn phnt s nguyên. Giithuttr ra giá tr
trung bình ca các giá tr trong mng}
1. sum = 0;
2. {Duytmng} for I = 1 to n do
sum = sum + A[i];
3. average = sum/n
4. return(average)
End.
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 10
Gi ngôn ng
Khai o th tc
Th tc đượcgibng cách s dng câu lnh
Call <tên th tc> (<danh sách giá tr tham s>)
Procedure <tên th tc> (<danh sách tham s>)
Begin
<các câu lnh>
End
Phân tích thigianthchingiithut
Độ đothi gian tính s dng trong phương pháp
phântíchl thuyết
z Phép toán cơ bn phép toán thểđưcthchin
vithi gian bi chnbimthng s không ph thuc
vào kích thướcd liu
Thi gian tính cagiithut đượcxácđịnh bng
cách đếms phép toán cơ bnmàgiithutthc
hin
T
T
(
(
n
n
)
)
c
c
op*
op*
C
C
(
(
n
n
)
)
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 11
Phân tích thigianthchingiithut
Các phép toán cơ bnthường dùng
z Gán giá tr cho biếns
z Gi hàm hay th tc
z Thchin các phép toán s hc
z Tham chiếuvàomng
z Tr kếtqu
z Thchin các phép so sánh
Phân tích thigianthchingiithut
Dòng 1: 2 phép toán cơ bn
Dòng 2: phép gán giá trịđu
cho i, phép so sánh i < n
đượcthchinn ln
Thân vòng lpthchinn-1
ln, trong thân, tithiuphi
thchin phép so sánh (2 phép
toán cơ bn) , tăng i lên 1 (2 phép
toán cơ bn) ti đaphi thêm
phép gán (2 phép toán cơ bn)
Dòng 3: 1 phép toán cơ bn
Tng s phép toán cơ bntrong
Trường hpxunht: 7n-2
Function ARRAY-MAX(A,n)
Đâu vào : mng A gmn phnt.
Đầu ra: phnt lnnhttrong
mng
Begin
1. currentMax = A[0]
2. for i = 1 to n-1 do
if currentMax < A[i] then
currentMax = A[i]
3. return currentMax
End.
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 12
Phân tích thigianthchingiithut
Thi gian tính tinht (Worst-case)
z Thigiannhiunht để thchinthut toán vimtb
d liu vào ch thướcn
Thi gian tính ttnht (Best-case)
z Thigiatnht để thchinthut toán vimtb d
liucũng vikíchthướcn
Thi gian tính trung bình (Average case)
z Thi gian trung bình cnthiết để thchinthuttoán
trên tphuhncácđầu vào kích thướcn
Phân tích thigianthchingiithut
Input
1 ms
2 ms
3 ms
4 ms
5 ms
ABCDEFG
worst-case
best-case
}
average-case?
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 13
Phân tích thigianthchingiithut
d : Tìm kiếmtunt mtgiátr trên mtmng
Thigianxunht: n
Thigianttnht: 1
Thi gian trung bình: T(n) = i.pi
trong đó pi là xác sutgiátr cntìmxuthinti
a[i]. pi = 1/n thì thigians (n+1)/2
817791623622142110784
a[12]a[11]a[10]a[9]a[8]a[7]a[6]a[5]a[4]a[3]a[2]a[1]
hiutimcn
Khái nimBig-O
Cho hàm s t(n) và g(n), ta nói rng t(n) là O(g(n)) nếutnti
2 hng s nguyên dương c và n
0
sao cho
t(n) cg(n) for n n
0
t(n) thuc O(g(n))
Cu trúc d liu và Gii thut
Đỗ Bích Dip - Khoa CNTT- ĐHBKHN 14
hiutimcnBig -O
7n -2
z 7n-2 là O(n)
tìm c > 0 và n0 1 sao cho 7n-2 c*n vin n0
điu này đúng vi c = 7 và n0 = 1
3n3 + 20n2 + 5
z 3n3 + 20 n2 + 5 là O(n3)
tìm c > 0 và n0 1 sao cho 3n3 + 20n2 + 5 c*n3 vơin n0
điu này đúng vi c = 4 và n0 = 21
3 log n + 5
z 3 log n + 5 là O(log n)
cn c > 0 và n0 1 sao cho 3 log n + 5 c*log n vin n0
ta xác định được c = 8 và n0 = 2
hiutimcnBig -O
d: Giithut T(n)
= 2n +10 thìcóđộ
phctplàO(n)
z 2n +10 cn
z (c 2) n 10
z n 10/(c 2)
z Ly c = 3 và n
0
= 10
1
10
100
1,000
10,000
1 10 100 1,000
n
3n
2n+10
n
| 1/258

Preview text:

Cấu trúc dữ liệu và Giải thuật
Cấu trúc dữ liệu và Giải thuật Đỗ Bích Diệp diepdb@it-hut.edu.vn
Bộ môn Hệ thống thông tin- Khoa Công nghệ thông tin
Trường Đại học Bách Khoa Hà nội Thông tin chung { Giờ học
z Tiết 10-11 (14h50 – 16h30), thứ 5, tuần 26-40
z Tiết 11-12 (15h45-17h20), thứ 6, tuần 26-40 z Địa điểm: D9-301 { Giáo viên z Đỗ Bích Diệp
Bộ môn Hệ thống thông tin- Khoa CNTT- Phòng 325 nhà C1 z Email: diepdb@it-hut.edu.vn
z Giờ tiếp sinh viên: 14h-16h thứ 2, thứ 3 hàng tuần
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 1
Cấu trúc dữ liệu và Giải thuật Tổng quan về môn học { Mục tiêu môn học:
z Sử dụng và cài đặt được các cấu trúc dữ liệu cơ bản
và các thao tác trên các cấu trúc dữ liệu đó sử dụng
một ngôn ngữ lập trình cụ thể
z Sử dụng và cài đặt được các thuật toán sắp xếp, tìm
kiếm và các thuật toán trên đồ thị
z Phân tích được độ phức tạp của các thuật toán đã cài đặt
z Nắm được các kỹ thuật xây dựng thuật toán như đệ qui, chia để trị { Khối lượng: z Lý thuyết: 45 tiết
z Bài tập: 15 tiết (Bài tập lớn)
z Bài tập lớn môn học: lập trình, viết báo cáo, trình bày Nội dung môn học
{ Thuật toán và độ phức tạp của thuật toán { Thuật toán đệ qui
{ Các thuật toán sắp xếp
{ Các thuật toán tìm kiếm { Các cấu trúc dữ liêu: z Mảng và danh sách z Ngăn xếp, hàng đợi z Cây z Đồ thị
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 2
Cấu trúc dữ liệu và Giải thuật Cách tiến hành { Bài giảng z Sử dụng slides
z Sinh viên tự ghi chép bài trong giờ { Bài tập
z Sinh viên làm ở nhà hoặc trên lớp
z Sinh viên được yêu cầu lên bảng chữa bài hoặc nộp bài làm { Thảo luận Tài liệu tham khảo { Sách giáo trình:
z Cấu trúc dữ liệu và giải thuật – Đỗ Xuân Lôi – 2007
z Mastering Algorithms with C. O’Reilly, 1999. { Tài liệu tham khảo
z Introduction to Algorithms – T.H.Cormen,
C.E.Leiserson, R.L.Rivest, C. Stein- Second edition-
MIT Press, 2001 (có bản dịch tiếng Việt)
z Data structure and Algorithms in C++ –
M.T.Goodric, R.Tamassia, Wiley , 2003 z MIT Open Courseware:
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-
and-Computer-Science/6-046JFall- 2005/CourseHome/index.htm
z http://www.vocw.edu.vn/content/col10018/lat est/
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 3
Cấu trúc dữ liệu và Giải thuật Đánh giá môn học
{ Điểm quá trình: trọng số 0.3 z Kiểm tra giữa kỳ:
{ Kiểm tra viết trong giờ lên lớp { Thi cuối kỳ
z Kiểm tra viết theo lịch thi chung
{ Bài tập lớn: Điểm cộng vào điểm thi cuối kỳ, tối đa 2 điểm { Viết chương trình { Viết báo cáo { Trình bày Bài tập lớn môn học
{ Tìm hiểu và cài đặt một số các
thuật toán trong giáo trình
z Thực hiện theo nhóm 4 sinh viên
{ Lập trình một số ứng dụng cụ thể
sử dụng các cấu trúc dữ liệu đã học
z Thực hiện theo nhóm 4 sinh viên
{ Sinh viên có thể tự đề xuất đề tài
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 4
Cấu trúc dữ liệu và Giải thuật
Cách thực hiện bài tập lớn
{ Thành lập nhóm đề tài z Tập hợp nhóm z Xác định đề tài { Thực hiện đề tài z Phân tích bài toán z Viết chương trình z Viết báo cáo
z Họp nhóm định kỳ → biên bản họp nhóm { Báo cáo kết quả
z Nộp chương trình, báo cáo
z Trình bày kết quả thực hiện và demo với giáo viên
Kế hoạch học tập dự kiến Tuần Nội dung Bài tập lớn 1 Các kiến thức cơ bản Giới thiệu 21/08/08
zThuật toán và độ phức tạp zKý hiệu tiệm cận 2 Thuật toán đệ qui Thiết lập nhóm 28/08/08 3
Các cấu trúc dữ liệu cơ bản (I) Xác định đề tài 04/09/08 zMảng và danh sách 4
Các cấu trúc dữ liệu cơ bản (II) Xác định đề tài 11/09/08 zNgăn xếp và hàng đợi Bài tập 5 Cây (I) Bắt đầu 18/09/08 6 Cây (II) 25/09/08 Bài tập 7 Sắp xếp (I) 2/10/08
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 5
Cấu trúc dữ liệu và Giải thuật
Kế hoạch học tập (dự kiến) Tuần Nội dung Đồ án 8 Kiểm tra giữa kỳ 9/10/08 9 Sắp xếp (II) 16/10/08 Bài tập 10 Tìm kiếm(I) 23/10/08 11 Tìm kiếm (II) 30/10/08 Bài tập 12 Đồ thị (I) 6/11/08 13 Đồ thị (II) Nộp bài tập 13/11/08 Tổng kết – Ôn tập 14, 15
Bảo vệ Bài tập lớn 20-27/11/08
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 6
Cấu trúc dữ liệu và Giải thuật
Cấu trúc dữ liệu và Giải thuật
Chương I: Các kiến thức cơ bản
Các kiến thức cơ bản Nội dung Các khái niệm Giải thuật Cấu trúc dữ liệu Phân tích giải thuật Giả ngôn ngữ
Thời gian thực hiện giải thuật
Đánh giá độ phức tạp sử dụng tiệm cận
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 1
Cấu trúc dữ liệu và Giải thuật Giải thuật
– Một thủ tục 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 đầu vào
cho trước của một bài toán Giải thuật
z Đặc trưng của giải thuật – Đầu vào – Đầu ra – Tính hữu hạn – Tính hiệu quả – Tính xác định
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 2
Cấu trúc dữ liệu và Giải thuật
Giải thuật và Chương trình
Chương trình là một thể hiện của Giải thuật trong một
ngôn ngữ lập trình nào đó Cấu trúc dữ liệu
z Kiểu dữ liệu trừu tượng (Abstract Data Type)
– Là mô hình toán học và những phép toán thực
hiện trên mô hình toán học này – Ví dụ: ADT List z Dữ liệu: Các nút z Các phép toán: – Bổ sung một nút mới – Loại bỏ một nút
– Tìm kiếm một nút có giá trị cho trước – …
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 3
Cấu trúc dữ liệu và Giải thuật Cấu trúc dữ liệu z Cấu trúc dữ liệu
– Sử dụng để biểu diễn mô hình toán học trong ADT
– Việc cài đặt các kiểu dữ liệu trừu tượng đòi hỏi
phải chọn các cấu trúc dữ liệu để biểu diễn
– Liên quan đến cách thức tổ chức và truy nhập các phần tử dữ liệu – Ví dụ: ADT List
z Cài đặt sử dụng cấu trúc mảng đơn giản
z Cài đặt sử dụng cấu trúc con trỏ
Xây dựng chương trình giải bài toán
– Lời giải một bài toán bao gồm z Cấu trúc dữ liệu z Thuật toán
– Xây dựng chương trình giải bài toán
z Tương tự như vòng đời của phần mềm z Gồm các bước
– Thu thập yêu cầu: Hiểu rõ đầu vào và kết quả đầu ra
– Thiết kế : Xây dựng giải thuật, bỏ qua các chi tiết về cách thức
cài đặt dữ liệu hay các phương thức, tập trung vào các bước xử lý
– Phân tích : Tìm, so sánh với giải thuật khác
– Cài đặt: Xây dựng chương trình, quan tâm đến cách thức tổ
chức, biểu diễn và cài đặt các phương thức
– Kiểm thử : Bao gồm chứng minh tính đúng đắn của chương
trình, kiểm thử các trường hợp , tìm, sửa lỗi
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 4
Cấu trúc dữ liệu và Giải thuật
Thuật toán và độ phức tạp
– Đánh giá lượng tài nguyên các loại mà một giải thuật đã sử dụng.
z Giải thuật này thực hiện trong thời gian thế nào Æ
Phân tích về thời gian thực hiện giải thuật
z Giải thuật này sử dụng bao nhiêu bộ nhớ Æ Phân tích
độ không gian nhớ mà giải thuật (chương trình) cần có.
Phân tích thời gian thực hiện giải thuật
– Mục tiêu của việc xác định thời gian thực hiện một giải thuật:
z Để ước lượng một chương trình sẽ thực hiện trong bao lâu
z Để ước lượng kích thước dữ liệu đầu vào lớn nhất có thể cho một giải thuật
z Để so sánh hiệu quả của các giải thuật khác nhau, từ đó
lựa chọn ra một giải thuật thích hợp cho một bài toán
z Để giúp tập trung vào đoạn giải thuật được thực hiện với thời gian lớn nhất
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 5
Cấu trúc dữ liệu và Giải thuật
Phân tích thời gian thực hiện giải thuật z Cách thức
– Xác định độ phụ thuộc của thời gian tính của
thuật toán vào kích thước của dữ liệu đầu vào
– Các phương pháp thực hiện
z Phương pháp thực nghiệm
z Phương pháp phân tích dựa trên mô hình lý thuyết
Phân tích thời gian thực hiện giải thuật
z Phương pháp thực nghiệm
– Cài đặt giải thuật bằng ngôn ngữ lập trình
– Chạy chương trình với các dữ liệu đầu vào khác nhau
– Đo thời gian thực thi chương trình và đánh giá độ tăng
trưởng so với kích thước của dữ liệu đầu vào z Hạn chế:
– Sự hạn chế về số lượng và chất lượng của mẫu thử
– Đòi hỏi môi trường kiểm thử (phần cứng và phần mềm) thống nhất , ổn định
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 6
Cấu trúc dữ liệu và Giải thuật
Phân tích thời gian thực hiện giải thuật z Phương pháp lý thuyết
– Có khả năng xem xét dữ liệu đầu vào bất kỳ
– Sử dụng để đánh giá các giải thuật mà không phụ thuộc
vào môi trường kiểm thử
– Sử dụng với những mô tả ở mức cao của giải thuật
z Thực hiện phương pháp này cần quan tâm
– Ngôn ngữ mô tả giải thuật
– Xác định độ đo thời gian tính
– Một cách tiếp cận để khái quát hóa độ phức tạp về thời gian
Mô tả giải thuật – Giả ngôn ngữ
z Giả ngôn ngữ (Pseudo-code)
– Mô tả mức khái quát cao được sử dụng trong diễn tả giải thuật
Giả ngôn ngữ = Cấu trúc lập trình + Ngôn ngữ tự nhiên Algorithm arrayMax(A,n)
Input: Mảng chứa n phần tử là số nguyên
Output: Phần tử lớn nhất trong mảng Begin currentMax = A[0] for i = 1 to n-1 do
if currentMax < A[i] then currentMax = A[i] return currentMax End.
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 7
Cấu trúc dữ liệu và Giải thuật Giả ngôn ngữ
– Các cấu trúc lập trình trong giả ngôn ngữ
z Câu lệnh gán: V = E hoặc V Å E
z Cấu trúc điều khiển:
if B then S [else S ] 1 2 – Case B : S ; 1 1 B : S ; 2 2 … B : S n n else Sn+1 end case; Giả ngôn ngữ z Câu lệnh lặp
z Vòng lặp với số lần lặp biết trước
for i = m to n do S hoặc for i = n down to m do S
z Với số lần lặp không biết trước
while B do S hoặc repeat S until B z Câu lệnh vào ra – Đọc dữ liệu vào read (); Ghi dữ liệu write ();
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 8
Cấu trúc dữ liệu và Giải thuật Giả ngôn ngữ z Khai báo hàm Function () Begin
return (giá trị) End
z Gọi hàm: Hàm được gọi bằng tên hàm cùng danh sách
giá trị tham số thực sự, nằm trong biểu thức Giả ngôn ngữ Function AVERAGE(A,n) Begin
{A là một mảng gồm n phần tử là số nguyên. Giải thuật trả ra giá trị
trung bình của các giá trị trong mảng} 1. sum = 0;
2. {Duyệt mảng} for I = 1 to n do sum = sum + A[i]; 3. average = sum/n 4. return(average) End.
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 9
Cấu trúc dữ liệu và Giải thuật Giả ngôn ngữ – Khai báo thủ tục Procedure () Begin End
– Thủ tục được gọi bằng cách sử dụng câu lệnh Call ()
Phân tích thời gian thực hiện giải thuật
– Độ đo thời gian tính sử dụng trong phương pháp phân tích lỳ thuyết
z Phép toán cơ bản là phép toán có thể được thực hiện
với thời gian bi chặn bởi một hằng số không phụ thuộc
vào kích thước dữ liệu
– Thời gian tính của giải thuật được xác định bằng
cách đếm số phép toán cơ bản mà giải thuật thực hiện
T(n) ≈ cop*C(n)
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 10
Cấu trúc dữ liệu và Giải thuật
Phân tích thời gian thực hiện giải thuật
– Các phép toán cơ bản thường dùng
z Gán giá trị cho biến số z Gọi hàm hay thủ tục
z Thực hiện các phép toán số học z Tham chiếu vào mảng z Trả kết quả
z Thực hiện các phép so sánh
Phân tích thời gian thực hiện giải thuật
– Dòng 1: 2 phép toán cơ bản
Function ARRAY-MAX(A,n)
– Dòng 2: phép gán giá trị đầu
Đâu vào : mảng A gồm n phần tử.
cho i, phép so sánh i < n
Đầu ra: phần tử lớn nhất trong được thực hiện n lần mảng
– Thân vòng lặp thực hiện n-1 Begin
lần, trong thân, tối thiểu phải 1. currentMax = A[0]
thực hiện phép so sánh (2 phép 2. for i = 1 to n-1 do if currentMax < A[i] then
toán cơ bản) , tăng i lên 1 (2 phép currentMax = A[i]
toán cơ bản) tối đa phải có thêm
phép gán (2 phép toán cơ bản) 3. return currentMax
– Dòng 3: 1 phép toán cơ bản End.
Tổng số phép toán cơ bản trong
Trường hợp xấu nhất : 7n-2
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 11
Cấu trúc dữ liệu và Giải thuật
Phân tích thời gian thực hiện giải thuật
– Thời gian tính tồi nhất (Worst-case)
z Thời gian nhiều nhất để thực hiện thuật toán với một bộ
dữ liệu vào kích thước n
– Thời gian tính tốt nhất (Best-case)
z Thời gian ít nhất để thực hiện thuật toán với một bộ dữ
liệu cũng với kích thước n
– Thời gian tính trung bình (Average case)
z 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
Phân tích thời gian thực hiện giải thuật 5 ms worst-case 4 ms }average-case? 3 ms best-case 2 ms 1 ms A B C D E F G Input
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 12
Cấu trúc dữ liệu và Giải thuật
Phân tích thời gian thực hiện giải thuật
– Ví dụ : Tìm kiếm tuần tự một giá trị trên một mảng a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11] a[12] 4 8 7 10 21 14 22 36 62 91 77 81
– Thời gian xấu nhất : n
– Thời gian tốt nhất : 1
– Thời gian trung bình: T(n) = ∑i.pi
trong đó pi là xác suất giá trị cần tìm xuất hiện tại
a[i]. pi = 1/n thì thời gian sẽ là (n+1)/2 Ký hiệu tiệm cận – Khái niệm Big-O
– Cho hàm số t(n) và g(n), ta nói rằng t(n) là O(g(n)) nếu tồn tại
2 hằng số nguyên dương c và n sao cho 0
t(n) ≤ cg(n) for n n0 t(n) thuộc O(g(n))
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 13
Cấu trúc dữ liệu và Giải thuật
Ký hiệu tiệm cận Big - O – 7n -2 z 7n-2 là O(n)
tìm c > 0 và n0 ≥ 1 sao cho 7n-2 ≤ c*n với n ≥ n0
điều này đúng với c = 7 và n0 = 1 – 3n3 + 20n2 + 5 z 3n3 + 20 n2 + 5 là O(n3)
tìm c > 0 và n0 ≥ 1 sao cho 3n3 + 20n2 + 5 ≤ c*n3 vơi n ≥ n0
điều này đúng với c = 4 và n0 = 21 – 3 log n + 5 z 3 log n + 5 là O(log n)
cần c > 0 và n0 ≥ 1 sao cho 3 log n + 5 ≤ c*log n với n ≥ n0
ta xác định được c = 8 và n0 = 2
Ký hiệu tiệm cận Big - O
– Ví dụ: Giải thuật có T(n)
= 2n + 10 thì có độ
phức tạp là O(n) 10,000 3n
z 2n + 10 ≤ cn
z (c − 2) n ≥ 10 1,000 2n+10
z n ≥ 10/(c − 2) n
z Lấy c = 3 và n = 10 0 100 10 1 1 10 100 1,000 n
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 14