Tải bản đầy đủ (.ppt) (79 trang)

Bài giảng Phân tích và Thiết kế giải thuật nâng cao: Phần 1 PGS.TS. Trần Cao Đệ

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 (505.11 KB, 79 trang )

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ậttoánEuclid .

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

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

×