1
Phân tích & Thiết kế Giải
thuật nâng cao
Advanced Algorithm Analysis and Design
PGS. TS. TRẦN CAO ĐỆ
Đại Học Cần Thơ
2014
Bài giảng cho Thạc sĩ Ngành
HTTT
2
Phần 1:
KT phân tích và thiết kế giải thuật
PGS. TS. TRẦN CAO ĐỆ
Đại Học Cần Thơ
2014
3
Chương 1:
KỸ THUẬT PHÂN TÍCH GIẢI THUẬT
PGS. TS. TRẦN CAO ĐỆ
Đại Học Cần Thơ
2014
4
Thuật toán
Giải thuật / Thuật toán (algorithm)
–
Xuất phát từ nhà toán học Arập Al-Khowarizmi (khoảng năm 825).
–
Giải thuật là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các
phép toán, hoặc hành động cần thực hiện để cho ta lời giải của bài toán.
VídụthuậttoánEuclid .
–
Input: m, n nguyên dương
–
Output: g (ước chung lớn nhất của m và n)
–
Thuật toán :
–
Bước 1: Tìm r, phần dư của m cho n
–
Bước 2:
Nếu r = 0, thì g:=n và dừng lại.
Ngược lại (r≠0) ,thì m:=n; n:=r và quay lại bước 1.
5
Tính chất của thuật toán
Input: Mỗi thuật toán đều có một tập các giá trị đầu vào (có thể rỗng)
Output: Mỗi thuật toán có một tập dữ liệu ra đầu ra (output), tương ứng với input.
Tính xác định: các bước của thuật toán phải xác định (các thao tác phải rõ ràng, không gây nên sự
nhập nhằng).
Tính chính xác: Thuật toán phải tạo ra các giá trị đầu ra chính xác tương ứng với giá trị đầu vào.
Trong cùng một điều kiện hai bộ xử lý cùng thực hiện một thuật toán phải cho cùng một kết quả
như nhau.
Tính hữu hạn: Với mọi bộ dữ liệu vào (hợp lệ), thuật toán phải dừng lại sau một số hữu hạn bước
thực hiện.
Tính khả thi: Các phép toán có mặt trong thuật toán phải đủ đơn giản, có thể thực hiện được trong
một lượng thời gian hữu hạn (có thể thực hiện bởi con người với giấy, bút trong một khoảng thời
gian hữu hạn).
Tính tổng quát: phải áp dụng được cho một lớp bài toán.
6
Vấn đề giải được & không giải được
Một bài toán:
–
Có một hoặc nhiều thuật toán giải.
Giải được Lựa chọn thuật toán
–
Không tồn tại thuật toán để giải
gọi là vấn đề không giải được (bằng thuật toán).
Vd:
–
KHÔNG CÓ Thuật toán chắc thắng cho người thứ hai của
cờ ca rô.
–
KHÔNG CÓ Thuật toán xem một máy Turing có dừng lại
sau n bước hay không.
7
Vấn đề chứng minh thuật toán
Tiếp cận khoa học
–
Tính đúng đắn của thuật toán
Thuật toán đúng đắn, chính xác
Thuật toán dừng
–
So sánh thuật toán: phân tích độ phức tạp thời gian.
Tiếp cận thực hành
–
Thuật toán đơn giản, dễ hiểu, dễ cài đặt (dễ viết chương
trình)
–
Thuật toán sử dụng tiết kiệm nhất các nguồn tài nguyên
của máy tính, và đặc biệt chạy nhanh nhất có thể được.
8
Thời gian thực hiện chương trình
Tiếp cận 1: tính số giây, phút,
giờ, ngày cần thiết để chạy
chương trình
–
Không chính xác:
Phụ thuộc tốc độ máy
Phụ thuộc vào tập dữ liệu
vào: có input chạy nhanh,
có input chạy chậm
–
Không khả thi
Chỉ thực hiện được trên
một số input
Không chỉ ra được sự biến
thiên của thời gian theo độ
dài input
Tiếp cận 2: theo số phép toán
cơ bản mà chương trình phải
thực hiện
–
Phép toán cơ bản
Số phép +,-,*,/,=;
Số chỉ thị cơ bản của máy
tính)
–
Độc lập tốc độ máy
–
Vẫn phụ thuộc vào đặc tính
của input
Trường hợp xấu nhất
Trường hợp tốt nhất
Trường hợp ngẫu nhiên
9
Độ phức tạp thời gian của giải thuật
Độ phức tạp thời gian của giải thuật
là một hàm theo kích thước của
input, T(n).
So sánh độ phức tạp thời gian: so
sánh theo tỷ suất tăng của hàm thời
gian.
Kí hiệu Θ: tiệm cận xấp xỉ
Θ(g(n)) = {f(n)/ ∃c
1
,c
2
,n
0
>0 :
∀n>n
0
, 0 ≤ c
1
g(n) ≤ f(n) ≤
c
2
g(n) }
Ta viết: f(n)= Θ(g(n)) thay cho
f(n) ∈ Θ(g(n))
Kí hiệu O: tiệm cận trên
O(g(n)) = {f(n)/ ∃c,n
0
>0: ∀n>n
0
,
0 ≤ f(n) ≤ cg(n) }
Ta viết: f(n)= O(g(n)) thay cho
f(n) ∈ O(g(n))
Kí hiệu Ω: tiệm cận dưới
Ω (g(n)) = {f(n)/ ∃c,n
0
>0:
∀n>n
0
, 0 ≤ cg(n) ≤ f(n)}
Ta viết: f(n)= Ω (g(n)) thay cho
f(n) ∈ Ω (g(n))
10
Ví dụ
f(n)= 3n
3
+ 2n
2
f(n)= Θ(n
3
)
f(n)= Ω(n
3
)
f(n)= O(n
3
)
11
Tỷ suất tăng – độ phức tạp thời gian
Định lý:
∀f(n), g(n), f(n)= Θ(g(n)) f(n)= O(g(n)) ∧ f(n)= Ω(g(n))
Định lý
∀f(n) ≥ 0, ∃g(n): f(n)= Θ(g(n))
Định nghĩa
–
nếu f(n)= Θ(g(n)) ta nói f(n) có tỷ suất tăng là g(n).
–
nếu f(n) biễu diễn cho một hàm thời gian thực hiện chương trình và
f(n)= Θ(g(n)), ta nói f(n) có độ phức tạp (thời gian) là g(n).
Θ(1), Ω(1), O(1) biểu diễn cho hằng số.
12
Một số hàm cổ điển
Hàm đa thức
P(n)=O(n
d
)
Hàm giai thừa
Xấp xỉ Stirling
log(n!) = Θ (nlogn)
13
Tính chất của các tiệm cận
Phản xạ
f(n) = Θ(f(n))
f(n) = Ω(f(n)
f(n) = O(f(n)
Đối xứng
f(n)= Θ(g(n)) ⇔ g(n)= Θ(f(n)
Bắc cầu
f(n) = Θ(g(n)) ∧ g(n) = Θ(h(n)) ⇒ f(n)= Θ(h(n))
f(n) = Ω(g(n)) ∧ g(n) = Ω(h(n)) ⇒ f(n)= Ω(h(n))
f(n) = O(g(n)) ∧ g(n) = O(h(n)) ⇒ f(n)= O(h(n))
14
Ký hiệu O() của f(x) Độ phức thời gian
O(1)
O(logn)
O(n)
O(nlogn)
O(n
2
)
O(n
3
)
O(2
n
)
O(n!)
Hằng
Logarit
Tuyến tính
gần tuyến tính
Bình phương
Lập phương
Mũ
Giai thừa
Các độ phức tạp thời gian
15
Cách tính độ phức tạp thời gian của
giải thuật
Giải thuật không đệ qui
–
Qui tắc cộng
–
Qui tắc nhân
Ví dụ
For i:=1 to n do
a[i]:=random(1000);
For i:=1 to n-1 do
for j:=i+1 to n do
if (a[i]>a[j]) then
swap(a[i],a[j]);
Giải thuật đệ qui
–
Thiết lập công thức truy hồi
T(n) = aT(n/b) + c(n)
-
Giải công thức truy hồi
(phương trình đệ qui)
Ví dụ: tính độ phức tạp của
quicksort
–
T(1)=1
–
T(n)=2T(n/2)+n
–
Giải ra T(n)=O(nlogn)
Phương trình hồi quy
T(1)=1
T(n) = aT(n/b) + d(n), n>1
Phương pháp giải
–
Phương pháp thay thế (n bởi n/b)
–
Phương pháp tổng quát với hàm nhân
–
Phương pháp tổng quát (Master theorem)
16
Phương pháp thay thế
T(1)=1
T(n)=4T(n/2)+n,n>1
Giả sử n=2
k
hay k=log
2
n
Thay n bởi n/2
T(n)= 4T(n/2) + n
= 4(4T(n/4)+n/2) + n = 4
2
T(n/2
2
)+4n/2+n
…
= 4
i
T(n/2
i
) + 4
i-1
n/2
i-1
+…+4n/2+n (bước i)
= 4
k
T(n/2
k
) + 4
k-1
n/2
k-1
+…+4n/2+n (bước k)
= 4
k
+ 4
k-1
n/2
k-1
+…+4n/2+n
= 4
k
+ n (2
k-1
+…2+1)= n
2
+ n(2
k
-1) = n
2
+ n(n-1)
Vậy T(n)=O(n
2
)
17
Phương pháp tổng quát với hàm
nhân
T(1)=1
T(n)=aT(n/b) + d(n)
Giả sử : n=b
k
k=log
b
n
Bằng thay thế k bước ta có:
T(n)= a
k
+ ∑
j=0
k-1
a
j
d(b
k-j
)
18
Nghiệm
thuần nhất
Nghiệm
riêng
Nếu d là hàm nhân, tức là d(m*n) = d(m)*d(n)
Thì ta có thể giải được nghiệm riêng dễ dàng
∑
j=0
k-1
a
j
d(b
k-j
) = d(b)
k
∑
j=0
k-1
(a/d(b))
j
= (a
k
-d(b)
k
)/(a/d(b)-1)
Lời giải với d(n) là hàm nhân
Nếu a>d(b): T(n)=O(n
log
b
a
)
Nếu a<d(b): T(n)= O(n
log
b
(d(b)
)
Nếu a=d(b): T(n)= O(n
log
b
a
log
b
n)
Ví dụ: T(1)=1, T(n) = 4T(n/2) + n, n>1
d(n)=n là hàm nhân
a=4, b=2, d(b) = 2 < a
Vậy T(n) = O(n
log
2
4
) = O(n
2
)
19
20
Phương pháp tổng quát
Master Theorem
Cho T(n) = a · T(n/b) +
f(n), với n nguyên dương,
a ≥ 0 và b > 1 là các hằng
số; f(n) là hàm tiệm cận
không âm của n
Lời giải
Nếu f(n) = O(n
log
b
a− ε
) , với
ε là hằng số dương thì T(n)
= Θ(n
log
b
a
).
f(n) = Θ(n
log
b
a
log
k
n), với
k≥0 thì T(n) =
Θ(n
log
b
a
log
k+1
n).
f(n) = Ω(n
log
b
a+ ε
), với ε> 0
và f(n) thỏa af(n/b) ≤cf(n)
với c< 1 thì T(n) = Θ(f(n)).
21
Ví dụ
T(n) = 4T(n/2) + n
–
a =4, b= 2 n⇒
log
b
a
=n
2
;
–
f(n) = n.
f(n) = O(n
2–ε
) với ε= 1
T(n) = Θ(n
2
).
T(n) = 4T(n/2) + n
2
–
a =4, b= 2 n⇒
log
b
a
=n
2
; f(n) = n
2
.
–
f(n) = Θ(n
2
lg
0
n), tức là k = 0.
T(n) = Θ(n
2
lgn).
22
Ví dụ
T(n) = 4T(n/2) + n
3
–
a =4, b= 2 n⇒
log
b
a
=n
2
; f(n) = n
3
.
–
f(n) = Ω(n
2+ ε
) với ε= 1
và 4(n/2)
3
≤cn
3
với c= ½
T(n) = Θ(n
3
).
T(n) = 4T(n/2) + n
2
/lgn
–
a =4, b= 2 n⇒
log
b
a
=n
2
;
–
f(n) = n
2
/lgn.
Lời giải tổng quát không thể áp dụng vì sao?
Với mọi ε> 0, n
ε
>
lgn !
23
Tài liệu tham khảo
R. Sedgewick, Algorithms in Java, Addision-Wesley, 2004.
Chapter 1.
Aho, A. V. , J. E. Hopcroft, J. D. Ullman. Data Structure and
Algorihtms, 1983.
Kenneth H. Rosen, Discrete Mathematics and its applications,
4
th
edition, McGraw-Hill, 2000.
R. Sedgewick, Algorithms , 1987.
24
Chương 2:
KỸ THUẬT THIẾT KẾ GIẢI THUẬT
TS. TRẦN CAO ĐỆ
Đại Học Cần Thơ
2012
25
Chia để trị
Divide and conquer
Giải một bài toán kích thước n,
–
chia bài toán đã cho thành a số bài toán con có kích thưóc là b
nhỏ hơn n.
–
Giải các bài toán con (chia để trị)
–
Tổng hợp kết quả lại để được lời giải của bài toán ban đầu.
Ví dụ QuickSort: Sắp xếp một danh sách gồm n phần tử
Tìm một giá trị chốt và phân hoạch danh sách đã cho thành hai danh
sách con “bên trái” và “bên phải “.
Sắp xếp “bên trái” và “bên phải” thì ta được danh sách có thứ tự.
Quá trình phân chia sẽ dẫn đến các bài toán sắp xếp một danh sách
chỉ gồm một phần tử hoặc gồm nhiều phần tử có khoá bằng nhau, đó
chính là các bài toán cơ sở, vì bản thân chúng đã có thứ tự rồi.
Tổng hợp kết quả: hiển nhiên