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

slike bài giảng cấu trúc dữ liệu và giải thuật - đỗ bích diệp chương 1 các kiến thức cơ bản

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 (384.18 KB, 21 trang )

Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 1
Cấutrúcdữ liệuvàGiảithuật
Chương I: Các kiếnthứccơ bản
Các kiếnthứccơ bản
Nội dung
 Các khái niệm
 Giảithuật
 Cấutrúcdữ liệu
 Phân tích giảithuật
 Giả ngôn ngữ
 Thờigianthựchiệngiảithuật
 Đánh giá độ phứctạpsử dụng tiệmcận
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 2
– Mộtthủ tục bao gồmmột dãy hữuhạncácbước
cầnthựchiện để thu được đầurachođầuvào
cho trướccủamột bài toán
Giảithuật
Giảithuật
z Đặctrưng củagiảithuật
– Đầuvào
– Đầura
– Tính hữuhạn
– Tính hiệuquả
– Tính xác định
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 3
GiảithuậtvàChương trình
Chươngtrìnhlàmộtthể hiệncủaGiảithuật trong một
ngôn ngữ lập trình nào đó


Cấutrúcdữ liệu
z Kiểudữ liệutrừutượng (Abstract Data Type)
– Là mô hình toán họcvànhững phép toán thực
hiệntrênmôhìnhtoánhọ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ộtnútmới
– Loạibỏ mộtnút
– Tìm kiếmmột nút có giá trị cho trước
– …
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 4
Cấutrúcdữ liệu
z Cấu trúc dữ liệu
– Sử dụng để biểudiễnmôhìnhtoánhọc trong
ADT
– Việccàiđặtcáckiểudữ liệutrừutượng đòi hỏi
phảichọncáccấutrúcdữ liệu để biểudiễn
– Liên quan đếncáchthứctổ chứcvàtruynhập
các phầntử dữ liệu
– Ví dụ: ADT List
z Cài đặtsử dụng cấutrúcmảng đơngiản
z Cài đặtsử dụng cấu trúc con trỏ
Xây dựng chương trình giảibàitoán
– Lờigiảimột bài toán bao gồm
z Cấutrúcdữ 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 đờicủaphầnmềm

z Gồmcácbước
– Thu thậpyêucầu: Hiểurõđầuvàovàkếtquảđầura
– Thiếtkế : Xây dựng giảithuật, bỏ qua các chi tiếtvề cách thức
cài đặtdữ liệu hay các phương thức, tập trung vào các bướcxử

– Phân tích : Tìm, so sánh vớigiảithuật khác
– Cài đặt: Xây dựng chương trình, quan tâm đếncáchthứctổ
chức, biểudiễnvàcàiđặt các phương thức
– Kiểmthử : Bao gồmchứng minh tính đúng đắncủachương
trình, kiểmthử các trường hợp, tìm, sửalỗi
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 5
Thuậttoánvàđộ phứctạp
– Đánh giá lượng tài nguyên các loạimàmộtgiải
thuật đãsử dụng.
z Giảithuậtnàythựchiện trong thờigianthế nào Æ
Phân tích về thờigianthựchiệngiảithuật
z Giảithuậtnàysử dụng bao nhiêu bộ nhớ Æ Phân tích
độ khônggiannhớ mà giảithuật(chương trình) cầncó.
Phân tích thờigianthựchiệngiảithuật
– Mụctiêucủaviệcxácđịnh thờigianthựchiện
mộtgiảithuật:
z Để ướclượng mộtchương trình sẽ thựchiện trong bao
lâu
z Để ướclượng kích thướcdữ liệu đầuvàolớnnhấtcó
thể cho mộtgiảithuật
z Để so sánh hiệuquả của các giảithuật khác nhau, từđó
lựachọnramộtgiảithuậtthíchhợpchomột bài toán
z Để giúp tập trung vào đoạngiảithuật đượcthựchiện
vớithờigianlớnnhất

Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 6
Phân tích thờigianthựchiệngiảithuật
z Cách thức
– Xác định độ phụ thuộccủathời gian tính của
thuật toán vào kích thướccủadữ liệu đầuvào
– Các phương pháp thựchiện
z Phương pháp thực nghiệm
z Phương pháp phân tích dựatrênmôhìnhlýthuyết
Phân tích thờigianthựchiệngiảithuật
z Phương pháp thực nghiệm
– Cài đặtgiảithuậtbằng ngôn ngữ lậptrình
– Chạychương trình vớicácdữ liệu đầu vào khác nhau
– Đothờigianthựcthichương trình và đánh giá độ tăng
trưởng so vớikíchthướccủadữ liệu đầuvào
z Hạnchế:
– Sự hạnchế về số lượng và chấtlượng củamẫuthử
– Đòi hỏimôitrường kiểmthử (phầncứng và phầnmềm)
thống nhất, ổn định
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 7
Phân tích thờigianthựchiệngiảithuật
z Phương pháp lý thuyết
– Có khả năng xem xét dữ liệu đầuvàobấtkỳ
– Sử dụng để đánh giá các giảithuật mà không phụ thuộc
vào môi trường kiểmthử
– Sử dụng vớinhững mô tảởmứccaocủagiảithuật
z Thựchiệnphương pháp này cần quan tâm
– Ngôn ngữ mô tả giảithuật
– Xác định độ đothời gian tính

– Mộtcáchtiếpcận để khái quát hóa độ phứctạpvề thờigian
Mô tả giảithuật–Giả ngôn ngữ
z Giả ngôn ngữ (Pseudo-code)
– Mô tả mức khái quát cao đượcsử dụng trong diễntả
giảithuật
Giả ngôn ngữ = Cấutrúclập trình + Ngôn ngữ tự nhiên
Algorithm arrayMax(A,n)
Input: Mảng chứan phầntử là số nguyên
Output: Phầntử lớnnhấ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.
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 8
Giả ngôn ngữ
– Các cấutrúclập trình trong giả ngôn ngữ
z Câu lệnh gán: V = E hoặcV Å E
z Cấutrúcđiềukhiển:
– 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 lệnh lặp
z Vòng lặpvớisố lầnlặpbiếttrước
for i = m to n do S hoặc for i = n down to m do S
z Vớisố lầnlặp không biếttrước
while B do S hoặc repeat S until B
z Câu lệnh vào ra
– Đọcdữ liệuvào
read (<danh sách biến>);
 Ghi dữ liệu
write (<danh sách biếnhoặc dòng ký tự>);
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - 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 lệnh>
return (giá trị)
End
z Gọihàm: Hàm đượcgọibằng tên hàm cùng danh sách
giá trị tham số thựcsự, nằm trong biểuthức
Giả ngôn ngữ
Function AVERAGE(A,n)
Begin
{A là mộtmảng gồmn phầntử là số nguyên. Giảithuậttrả ra giá trị
trung bình của các giá trị trong mảng}
1. sum = 0;
2. {Duyệtmảng} for I = 1 to n do
sum = sum + A[i];
3. average = sum/n
4. return(average)
End.
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 10
Giả ngôn ngữ
– Khai báo thủ tục
– Thủ tục đượcgọibằng cách sử dụng câu lệnh
Call <tên thủ tục> (<danh sách giá trị tham số>)
Procedure <tên thủ tục> (<danh sách tham số>)
Begin
<các câu lệnh>
End
Phân tích thờigianthựchiệngiảithuật
– Độ đothời gian tính sử dụng trong phương pháp

phântíchlỳ thuyết
z Phép toán cơ bản là phép toán có thểđượcthựchiện
vớithời gian bi chặnbởimộthằng số không phụ thuộc
vào kích thướcdữ liệu
– Thời gian tính củagiảithuật đượcxácđịnh bằng
cách đếmsố phép toán cơ bảnmàgiảithuậtthực
hiện
T
T
(
(
n
n
)
)


c
c
op*
op*
C
C
(
(
n
n
)
)
Cấu trúc dữ liệu và Giải thuật

Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 11
Phân tích thờigianthựchiệngiảithuật
– Các phép toán cơ bảnthường dùng
z Gán giá trị cho biếnsố
z Gọi hàm hay thủ tục
z Thựchiện các phép toán số học
z Tham chiếuvàomảng
z Trả kếtquả
z Thựchiện các phép so sánh
Phân tích thờigianthựchiệngiảithuật
– Dòng 1: 2 phép toán cơ bản
– Dòng 2: phép gán giá trịđầu
cho i, phép so sánh i < n
đượcthựchiệnn lần
– Thân vòng lặpthựchiệnn-1
lần, trong thân, tốithiểuphải
thựchiện phép so sánh (2 phép
toán cơ bản) , tăng i lên 1 (2 phép
toán cơ bản) tối đaphải có thêm
phép gán (2 phép toán cơ bản)
– Dòng 3: 1 phép toán cơ bản
Tổng số phép toán cơ bảntrong
Trường hợpxấunhất: 7n-2
Function ARRAY-MAX(A,n)
Đâu vào : mảng A gồmn phầntử.
Đầu ra: phầntử lớnnhấttrong
mảng
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.
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 12
Phân tích thờigianthựchiệngiảithuật
– Thời gian tính tồinhất (Worst-case)
z Thờigiannhiềunhất để thựchiệnthuật toán vớimộtbộ
dữ liệu vào kích thướcn
– Thời gian tính tốtnhất (Best-case)
z Thờigianítnhất để thựchiệnthuật toán vớimộtbộ dữ
liệucũng vớikíchthướcn
– Thời gian tính trung bình (Average case)
z Thời gian trung bình cầnthiết để thựchiệnthuậttoán
trên tậphữuhạncácđầu vào kích thướcn
Phân tích thờigianthựchiệngiảithuật
Input
1 ms
2 ms
3 ms
4 ms
5 ms
ABCDEFG
worst-case
best-case
}
average-case?
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 13

Phân tích thờigianthựchiệngiảithuật
– Ví dụ : Tìm kiếmtuầntự mộtgiátrị trên mộtmảng
– Thờigianxấunhất: n
– Thờigiantốtnhất: 1
– Thời gian trung bình: T(n) = ∑i.pi
trong đó pi là xác suấtgiátrị cầntìmxuấthiệntại
a[i]. pi = 1/n thì thờigiansẽ là (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]
Ký hiệutiệmcận
– Khái niệmBig-O
– Cho hàm số t(n) và g(n), ta nói rằng t(n) là O(g(n)) nếutồntại
2 hằng số nguyên dương c và
n
0
sao cho
t(n) ≤ cg(n) for n ≥ n
0
t(n) thuộc O(g(n))
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 14
Ký hiệutiệmcậnBig -O
– 7n -2
z 7n-2 là O(n)
tìm c > 0 và n0 ≥ 1 sao cho 7n-2 ≤ c*n vớin ≥ 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ơin ≥ 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ớin ≥ n0
ta xác định được c = 8 và n0 = 2
Ký hiệutiệmcậnBig -O
– Ví dụ: Giảithuật có T(n)
= 2n +10 thìcóđộ
phứctạplàO(n)
z 2n +10≤ cn
z (c − 2) n ≥ 10
z n ≥ 10/(c − 2)
z Lấy c = 3 và n
0
= 10
1
10
100
1,000
10,000
1 10 100 1,000
n
3n
2n+10
n
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 15
Ký hiệutiệmcậnBig -O
– Đồ thị mộtsố hàm cơ bản
Ký hiệutiệmcậnBig -O
– Big-O và độ tăng trưởng

z Big-O là ký hiệutiệmcậntrêncủamộthàm
z NếutacóT(n) làO(g(n)) thìđộ tăng trưởng của T(n)
không vượtquáđộ tăng trưởng củag(n)
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 16
Ký hiệutiệmcậnBig -O
– Qui tắcxácđịnh độ phứctạpvề thờigian
z Hàm thời gian T(n) củamột đoạncủathuật toán là đa
thứcbậc k thì T(n) là O(n
k
)
z n
x
= O(a
n
), vớibấtkỳ x > 0 và a > 1
z log n
x
= O(log n), vớix > 0
Ký hiệutiệmcậnBig -O
– Qui tắcxácđịnh độ phứctạp
z Cấutrúctuầntự -Qui tắctổng
z Cho 2 đoạncủathuật toán P
1
và P
2
vớithờigian
thựchiệntương ứng là T
1
(n) và T

2
(n) . Thời
gian thựchiệnP
1
và P
2
kế tiếp nhau là: T
1
(n) +
T
2
(n)
z Độ phứctạpcủa hai đoạnchương trình P
1

P
2
liên tụcnhaucóthể xác định là O(max(f(n),
g(n))) nếuT
1
(n) = O(f(n)) và T
2
(n) = O(g(n)).
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 17
Ký hiệutiệmcậnBig -O
– Qui tắcxácđịnh độ phứctạp
z Cấutrúclồng - Quy tắcnhân
– Cho 2 đoạnchương trình P
1

và P
2
vớithờigianthực
hiệntương ứng là T
1
(n) và T
2
(n) . Thờigianthựchiện
P
1
và P
2
lồng vào nhau là: T
1
(n)T
2
(n)
– Độ phứctạpcủa hai đoạnchương trình P
1
và P
2
liên
tục nhau có thể xác định là O(f(n)*g(n)) nếuT
1
(n) =
O(f(n)) và T
2
(n) = O(g(n)).
Ký hiệutiệmcậnBig -O
for i = 1 to n

begin
P; {đoạngiảithuậtvớithời
gian thựchiệnT}
end
i: = 1
while (i <= n) do
begin
P; {đoạngiảithuậtvớithời
gian thựchiệnT}
i: = i+2;
end
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 18
Ký hiệutiệmcậnBig -O
i := 1
while (i<= n) do
begin
P; {đoạngiảithuậtvớithời
gian thựchiệnT}
i:= i *2;
end
i :=n
while (i >= 1) do
begin
P; {đoạngiảithuậtvớithời
gian thựchiệnT}
i:= i/2
end
Ký hiệutiệmcậnBig -O
i = 1

while (i <= n) do
begin
j := 1 ;
while (j <= n) do
begin
P ; {đoạngiảithuậtvới
thờigianthựchiệnT}
j := j × 2;
end
i =: i + 1;
end
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 19
Ký hiệutiệmcậnBig -O
z Ví dụ
i = 1
while (i <= n) do
begin
j := 1 ;
while (j <= n) do
begin
P;
j := j +1;
end
i =: i + 1;
end
Các khái niệmtiệmcậnkhác
-Big-Omega
z t(n) đượccoilàΩ(g(n)) nếutồntạimộthằng số c >0 và
mộtsố nguyên n

0
≥ 1saochoT(n) ≥ c*g(n) vớimọin ≥
n
0
t(n) ∈Ω(g(n))
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 20
Các khái niệmtiệmcậnkhác
– Big-Theta
z t(n) đựoc coi là Θ(g(n)) nếutồntại hai hằng số c’ > 0 và
c’’ > 0 và mộtsố nguyên n
0
≥ 1 sao cho c’*g(n) ≤ T(n) ≤
c’’*g(n) vớimọin ≥ n
0
t(n) ∈Θ(g(n))
Các khái niệmtiệmcậnkhác
– 5n
2
= Ω(n
2
)vớic = 5 vàn
0
= 1
– 5n
2
= Ω(n) với c = 1 và n
0
= 1
– 5n

2
= Θ(n
2
) vớic = 5 vàn
0
= 1
– 3 log(n) + log (log n) = Ω(log n) với c = 3 và n
0
= 2
Cấu trúc dữ liệu và Giải thuật
Đỗ Bích Diệp - Khoa CNTT- ĐHBKHN 21

×