Professional Documents
Culture Documents
2
Cá c đặ c trưng củ a thuậ t toá n
Tính đơn nghĩa
Cá c thao tá c phả i rõ rà ng, khô ng gây nhậ p nhằ ng, lộ n xộ n, tù y tiện, đa nghĩa.
Tính đú ng
Thuậ t toá n phả i cho kết quả mong muố n
Tính dừ ng
Thuậ t toá n khô ng đượ c rơi và o quá trình vô hạ n, phả i dừ ng lạ i và cho kết quả sau mộ t số hữ u hạ n
bướ c.
Tính phổ dụ ng
Thuậ t toá n dễ sử a đổ i để thích ứ ng vớ i yêu cầ u mớ i
Tính khả thi
Kích thướ c nhỏ , chạy trong thờ i gian cho phép, cà i đặ t đượ c trên máy
3
Tính đú ng đắ n củ a thuậ t toá n
Bà i toá n
Cho dãy và mộ t giá trị
Tìm phầ n tử đầ u tiên
Ý tưở ng về thuậ t toá n tìm kiếm nhị phâ n
Khoanh vù ng phạ m vi tìm kiếm
So sá nh vớ i phầ n tử đứ ng giữ a
Thu hẹp mộ t nử a phạ m vi tìm kiếm
4
Thuậ t toá n tìm kiếm nhị phâ n
input → a[0 … n-1], x; Tính bấ t biến lặ p (*)
i = 0; j = n - 1; Mọ i phầ n tử đứ ng trướ c (nếu có )
while (i ≤ j) đều
{
Mọ i phầ n tử đứ ng sau (nếu có ) đều
k = (i + j) / 2;
Chứ ng minh
if (a[k] < x) i = k + 1;
else j = k - 1; (*) đú ng trướ c vò ng lặ p
} Nếu (*) đú ng trướ c mộ t lượ t lặ p thì
if (i < n) output ← a[i]; sau lượ t lặ p đó (*) vẫ n đú ng
else output ← Not found; Cuố i cù ng (*) ĐPCM
5
𝑖 𝑗
𝑎0 𝑎𝑛−1
i = 0; j = n - 1;
while (i ≤ j) (*)
{
k = (i + j) / 2; Đứ ng trướ c
if (a[k] < x) i = k + 1;
else j = k - 1; Đứ ng sau
}
if (i < n) output ← a[i]; (*) đú ng khi bướ c
else output ← Not found;
và o vò ng lặ p ()
6
𝑖 𝑘 𝑗
¿𝑥 𝑎𝑖 𝑎𝑘 𝑎𝑗 ≥𝑥
i = 0; j = n
¿
- 1;
𝑥
(*)
while (i ≤ j)
{ Đứ ng trướ c
k = (i + j) / 2; Đứ ng sau
if (a[k] < x) i = k + 1;
else j = k - 1; Trướ c mộ t lầ n lặ p (*) đú ng
} thì sau lầ n lặ p (*) cũ ng đú ng
if (i < n) output ← a[i];
else output ← Not found;
Nếu …
7
𝑖 𝑘 𝑗
¿𝑥 𝑎𝑖 𝑎𝑘 𝑎𝑗 ≥𝑥
i = 0; j = n - 1;
≥𝑥
(*)
while (i ≤ j)
{ Đứ ng trướ c
k = (i + j) / 2; Đứ ng sau
if (a[k] < x) i = k + 1;
else j = k - 1; Trướ c mộ t lầ n lặ p (*) đú ng
} thì sau lầ n lặ p (*) cũ ng đú ng
if (i < n) output ← a[i];
else output ← Not found;
Nếu …
8
𝑗𝑖
¿ 𝑥 𝑎 𝑗 𝑎𝑖
i = 0; j = n - 1;
≥𝑥
(*)
while (i ≤ j)
Đứ ng trướ c
{
Đứ ng sau
k = (i + j) / 2;
if (a[k] < x) i = k + 1; Hiệu số giả m sau mỗ i lầ n lặ p,
else j = k - 1; vò ng lặ p kết thú c khi
}
(*): Mọ i phầ n tử đứ ng trướ c đều
if (i < n) output ← a[i];
(*): Do đứ ng sau
else output ← Not found;
là phầ n tử đầ u tiên
9
Đá nh giá giả i thuậ t
Tìm cá ch đá nh giá , ướ c lượ ng nguồ n tà i
nguyên cầ n phả i có khi thự c thi chương
trình cà i đặ t giả i thuậ t đó .
Tà i nguyên: thờ i gian, bộ nhớ , số lượ ng bộ
vi xử lý, tố c độ đườ ng truyền mạ ng…
10
Giả i thuậ t ≠ Chương trình
Đánh giá chương trình Đánh giá giải thuật
Thự c hiện sau khi cà i đặ t Thự c hiện trướ c khi viết
chương trình trên mộ t máy cụ
chương trình
thể
Nhằ m xá c định tính khả thi
Thử chạy vớ i mộ t và i bộ dữ liệu
cụ thể, đo thờ i gian thự c hiện, củ a giả i thuậ t, chọ n thuậ t
lượ ng bộ nhớ chiếm dụ ng trong toá n tố t nhấ t để cà i đặ t
trườ ng hợ p cụ thể
11
Tạ i sao cầ n đá nh giá giả i thuậ t
Giả sử
Tố c độ máy tính = ∞
Bộ nhớ máy tính = ∞ (miễn phí)
Có cầ n họ c về thuậ t toá n?
Có
Vẫ n phả i tìm thuậ t toá n giả i quyết bà i toá n, chứ ng minh tính đú ng đắ n
và tính dừ ng củ a thuậ t toá n
Tuy vậy, ta có thể chọ n thuậ t toá n dễ cà i đặ t nhấ t để lậ p trình
12
Tạ i sao cầ n đá nh giá giả i thuậ t
Thự c tế
Tố c độ máy tính ngày cà ng nhanh, nhưng khô ng bao giờ là ∞
Bộ nhớ máy tính ngày cà ng rẻ, nhưng khô ng bao giờ trở thà nh miễn phí
⟶ Cầ n đá nh giá hiệu suấ t thuậ t toá n
Ví dụ :
Tìm kiếm trong dãy 1 tỉ phầ n tử đã sắ p xếp, tố c độ máy: 1 triệu phép so sá nh /
giây
Thuậ t toá n tìm kiếm tuầ n tự : 17 phú t
Thuậ t toá n tìm kiếm nhị phâ n: 30 micro giây
13
Tiêu chuẩ n “tố t” củ a giả i thuậ t
Giả i thuậ t cà i đặ t “ngắ n” khô ng hẳ n là “tố t”.
Đá nh giá giả i thuậ t thô ng qua chương trình: khó kiểm chứ ng
do có nhiều yếu tố khá c ả nh hưở ng tớ i chương trình:
Phầ n cứ ng
Phầ n mềm
Ngườ i lậ p trình
Tình trạ ng dữ liệu
14
Độ phứ c tạ p tính toá n
Quan sá t
Dữ liệu cà ng lớ n ⟶ chi phí (về thờ i gian, bộ nhớ …) cà ng lớ n
Dữ liệu kích thướ c . Chi phí là mộ t hà m xá c định dương
Phâ n tích độ phứ c tạ p tính toá n
Thự c hiện trên mô hình máy trừ u tượ ng.
Độ c lậ p vớ i phầ n cứ ng cụ thể.
Bả n chấ t: Khả o sá t tố c độ tă ng củ a theo tố c độ tă ng củ a .
Cá c tiêu chí đá nh giá
Độ phứ c tạ p tính toá n về mặ t thờ i gian: Thờ i gian thự c hiện giả i thuậ t
Độ phứ c tạ p tính toá n về mặ t khô ng gian: Lượ ng bộ nhớ cầ n huy độ ng trong giả i thuậ t
15
Ký phá p
: Kích thướ c dữ liệu, 𝑐 2 𝑓 ( 𝑛)
Nếu 𝑛0
16
Ký phá p
: Kích thướ c dữ liệu, : 𝑐𝑓 ( 𝑛 )
Nếu 𝑛0
17
Ký phá p
: Kích thướ c dữ liệu, : 𝑇 (𝑛)
Nếu 𝑛0
18
Chứ ng minh Nếu
𝑐𝑓 ( 𝑛 )
Chọ n
𝑇 (𝑛)
𝑛0
19
Chứ ng minh Nếu
𝑇 (𝑛)
Chọ n
𝑐𝑓 ( 𝑛 )
𝑛0
20
Chứ ng minh Nếu
𝑐𝑓 ( 𝑛 )
𝑇 (𝑛)
𝑛0
21
Tố c độ tă ng củ a hà m
Ký pháp o nhỏ Ký pháp omega nhỏ
22
Cá c hà m thô ng dụ ng để đá nh giá
Hà m lấy sà n và lấy trầ n
Hà m đa thứ c
Hà m mũ
Hà m logarithm
Hà m giai thừ a
Hà m Fibonacci:
Hà m lũ y thừ a lặ p, hà m logarithm lặ p, hà m ackermann
23
Mộ t số cô ng thứ c
Xét ký phá p
Quy tắ c bỏ hằ ng số :
Quy tắ c lấy max:
Quy tắ c cộ ng:
Quy tắ c nhâ n:
24
Nếu là đa thứ c bậ c củ a , viết thay vì trong ký phá p đá nh giá
Nếu thờ i gian thự c hiện giả i thuậ t khô ng phụ thuộ c kích thướ c
dữ liệu, ta có thể ký hiệu thờ i gian thự c hiện giả i thuậ t là hay
Về tố c độ tă ng
25
Phép toá n tích cự c (PTTC)
là phép toá n có thờ i gian thự c hiện hằ ng số
Tổ ng thờ i gian thự c hiện phép toá n là
Vớ i mọ i phép toá n khá c thì
Thờ i gian thự c hiện giả i thuậ t có thể đá nh giá qua
Bả n chấ t: Thay vì đá nh giá , ta đá nh giá vì chú ng
tương đương
26
Tính giá trị đa thứ c
Cho đa thứ c:
30
Thuậ t toá n tìm kiếm tuầ n tự
Bà i toá n
Cho và mộ t giá trị
Tìm phầ n tử đầ u tiên
Thuậ t toá n tìm kiếm tuầ n tự :
Thử so sá nh vớ i lầ n lượ t
Dừ ng lạ i ngay khi gặ p
31
Thuậ t toá n tìm kiếm tuầ n tự
input → a[0…n-1], x;
Phép toá n tích cự c:
i = 0;
while (i < n && a[i] Phép so sá nh
< x)
Trườ ng hợ p tố t nhấ t
++i;
if (i < n) output ← : (1 PTTC).
a[i]; Trườ ng hợ p xấ u nhấ t
else output ← Not
found; : ().
32
Giả sử chắ c chắ n vớ i xá c suấ t tìm thấy input → a[0…n-1], x;
ở mọ i vị trí như nhau… i = 0;
: Số lầ n thự c hiệ n PTTC while (i < n && a[i] <
Nếu : lầ n
x)
Nếu : lầ n
++i;
…
Nếu : lầ n
if (i < n) output ←
Xá c suấ t để là a[i];
Trung bình số PTTC bằ ng giá trị kỳ else output ← Not
vọ ng củ a biế n ngẫ u nhiê n 𝑛 𝑛
found;
1 1 𝑛 ( 𝑛+1 ) 𝑛+1
𝐸 [ 𝐶 ] =∑ 𝑃𝑟 𝑖 𝑐 𝑖 = ∑ 𝑖= =
𝑖=1 𝑛 𝑖=1 𝑛 2 2
33
Có thể input → a[0…n-1], x;
i = 0;
TH 1: : số PTTC bằ ng TH tố t
while (i < n && a[i] < x)
nhấ t.
++i;
TH 2: : số PTTC trung bình bằ ng if (i < n) output ← a[i];
TH 3: : số PTTC bằ ng TH xấ u else output ← Not found;
nhấ t.
TH1 TH2 TH3
−∞
Pr=0.5
𝑎0
Pr=0.0
𝑎 𝑛 −1
Pr=0.5
+∞
𝐸 [𝐶 ]
34
Đá nh giá giả i thuậ t chia để trị
Giả i thuậ t chia để trị
Giả i bà i toá n mang bả n chấ t đệ quy
Phâ n rã bà i toá n lớ n thà nh cá c bà i toá n con đồ ng dạ ng
Phố i hợ p nghiệm củ a cá c bà i toá n con để đượ c nghiệm củ a bà i toá n lớ n
Mộ t số cá ch cà i đặ t giả i thuậ t chia để trị: Giả i thuậ t đệ quy (QuickSort, thá p Hà
Nộ i...), Quy hoạ ch độ ng, Tham lam,…
Đá nh giá giả i thuậ t chia để trị
đượ c cho bở i cô ng thứ c truy hồ i
đượ c tính qua cá c vớ i
35
Đá nh giá TT tìm kiếm nhị phâ n
input → a[0…n-1], x;
i = 0; j = n - 1; Tư tưở ng: Sau mỗ i bướ c lặ p,
while (i ≤ j)
{ phạ m vi tìm kiếm () thu gọ n
k = (i + j) / 2;
if (a[k] < x) i = k lạ i cò n mộ t nử a ()
+ 1;
else j = k - 1; Cô ng thứ c truy hồ i
}
if (i < n) output ←
a[i];
else output ← Not found;
36
Đoá n:
Cầ n chứ ng minh vớ i mộ t sự lự a chọ n hằ ng số và
ngưỡ ng
CM quy nạ p: chọ n và là m TH cơ sở , giả sử điều cầ n
CM đú ng vớ i Ta chứ ng minh vớ i
Chọ n lớ n á t đi đạ i lượ ng , ta có
37
Đoá n:
Cầ n chứ ng minh vớ i mộ t sự lự a chọ n hằ ng số
và ngưỡ ng
CM quy nạ p: