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

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Bùi Tiến Lê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 (839.75 KB, 72 trang )

GIỚI THIỆU PHÂN TÍCH THUẬT TOÁN

CuuDuongThanCong.com

Bùi Tiến Lên
01/01/2017

/>

Phân tích thuật toán
Mục tiêu
Hiểu được sự cần thiết về phân tích thuật toán
Nắm được các tiêu chuẩn để đánh giá một giải thuật
Hiểu được các khái niệm về độ phức tạp thuật toán

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

2


Phân tích thuật toán (cont.)
Để làm gì?
Cùng một vấn đề, có thể giải quyết bằng nhiều giải thuật
khác nhau
Lựa chọn một giải thuật tốt ”nhất” trong các giải thuật cho
một bài toán
Cải tiến giải thuật để có một giải thuật tốt hơn


CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

3


Phân tích thuật toán (cont.)
Các tiêu chí đánh giá thuật toán
Một thuật toán được xem là đúng nếu
Tính đúng đắn: Thuật toán phải chạy đúng
Tính hữu hạn: Thuật toán phải dừng sau một số bước
hữu hạn
Một thuật toán được xem là tốt nếu
Bộ nhớ: Sử dụng ít bộ nhớ (liên quan đến cấu trúc dữ
liệu)
Thời gian: Thực hiện nhanh

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

4


Thời gian thực hiện chương trình
Các yếu tố ảnh hưởng đến thời gian thực hiện chương trình
Cấu hình máy tính: tốc độ CPU, kích thước bộ nhớ...

Ngôn ngữ lập trình
Cấu trúc dữ liệu
Cài đặt chi tiết
...

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

5


Thời gian thực hiện chương trình (cont.)
Định nghĩa 1
Thời gian thực hiện hay chi phí thực hiện hay độ phức
tạp chương trình là hàm của kích thước dữ liệu vào, ký hiệu
T (n) trong đó n là kích thước hay độ lớn của dữ liệu vào

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

6


Thời gian thực hiện chương trình (cont.)
Lưu ý
Thời gian thực hiện chương trình là một hàm không âm,

T (n) ≥ 0, ∀n ≥ 0.
Đơn vị của T (n) không phải là đơn vị thời gian vật lý như
giờ, phút, giây, ... mà được đo bởi số các lệnh cơ bản (basic
operations) được thực hiện trên một máy tính lý tưởng
Các lệnh cơ bản là
các phép toán so sánh
các phép toán gán
các phép toán số học

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

7


Thời gian thực hiện chương trình (cont.)
Khi xác định T (n) cố gắng đơn giản hóa các lệnh cơ bản
Chương trình 1: Tính tổng n số tự nhiên đầu tiên
1
2
3

sum = 0;
for (i = 0; i < n; i++)
sum = sum + i;

số phép gán: T1
số phép so sánh: T2

số phép cộng và tăng: T3
Thời gian thực hiện thuật toán là T (n) = T1 + T2 + T3

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

8


Phương pháp xác định thời gian thực hiện của
chương trình
Các phương pháp tiếp cận để xác định
Phương pháp thực nghiệm
Phương pháp toán học
Phương pháp đếm
Phương pháp truy hồi
Phương pháp hàm sinh

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

9


Phương pháp xác định thời gian thực hiện của
chương trình (cont.)

Do hàm T (n) không chỉ phụ thuộc vào n mà còn phụ thuộc vào
cấu trúc của dữ liệu. Do đó, trong phương pháp toán học, khi phân
tích thuật toán người ta thường phân tích dựa trên 3 tình huống:
Trường hợp tốt nhất (best case): Không phản ánh được cái
”tốt” thật sự của chương trình
Trường hợp trung bình (average case): Rất khó xác định
chính xác
Trường hợp xấu nhất (worst case): Cho một sự ”bảo đảm”.
Lưu ý
Trong thực tế, người lập trình chỉ nên đánh giá T (n) cho trường
hợp xấu nhất hoặc trung bình

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

10


Phương pháp xác định thời gian thực hiện của
chương trình (cont.)
Rất khó có thể tính được chính xác T (n). Do đó, T (n) thường
được thể hiện qua các hàm ước lượng. Có 3 cách ước lượng cơ
bản cho T (n)
Ước lượng O
Ước lượng Ω
Ước lượng Θ

CuuDuongThanCong.com

Spring 2017

/>Data structure & Algorithm

11


Ước lượng O
Lịch sử của ký hiệu
Ký hiệu Big-0 được giới thiệu bởi Paul Bachmann
[Apostol, 1976].
Ký hiệu này sau đó được phổ biến rộng rãi bởi nhà toán học
Edmund Landau, nên còn được gọi là ký hiệu Landau
[Landau et al., 1958].
Donald Knuth là người đưa ký hiệu này vào ngành Khoa học
máy tính [Knuth, 1976].

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

12


Ước lượng O (cont.)
Định nghĩa 2
Cho T (n) và g(n) là hai hàm số. Ta nói T (n) = O(g(n)) nếu tồn
tại các số dương c và K sao cho:
T (n) ≤ cg(n), ∀n ≥ K


(1)

Cách đọc: T (n) là ”big-o” của g(n)
Ý nghĩa: g(n) là giới hạn trên của T (n)

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

13


Ước lượng O (cont.)
Lưu ý
Khi áp dụng ước lượng O vào việc ước lượng độ phức tạp của giải
thuật, ta nên chọn dạng g(n) sao cho càng đơn giản càng tốt.
Nhờ vậy, ta có thể ước lượng độ phức tạp của giải thuật một cách
đơn giản hơn.

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

14


Ước lượng O (cont.)


CuuDuongThanCong.com
Spring 2017

Bảng 1: Các hàm ước lượng cơ bản g(n)

hàm
constant function
logarithm
linear function
n-log-n function
quadratic function
cubic function
exponential function
permuation function

dạng hàm
1
log n
n
n log n
n2
n3
2n
n!

/>Data structure & Algorithm

15



Ước lượng O (cont.)
Bài tập
Chứng minh 2n4 + 3n3 + 5n2 + 2n + 3 là O(n4 )

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

16


Ước lượng O (cont.)
Chứng minh
Chú ý rằng 2n4 + 3n3 + 5n2 + 2n + 3 ≤
2n4 + 3n4 + 5n4 + 2n4 + 3n4 = (2 + 3 + 5 + 2 + 3)n4 = 15n4 với
n≥1

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

17


Ước lượng O (cont.)
Định lý 1
Chứng minh f (n) = a0 + a1 n + ... + ad nd với ad > 0 là O(nd )


CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

18


Ước lượng O (cont.)
Chứng minh
Chú ý rằng, với n ≥ 1 chúng ta có 1 ≤ n ≤ n2 ≤ ... ≤ nd . Do đó
a0 + a1 n + a2 n2 ... + ad nd ≤ (|a0 | + |a1 | + |a2 | + ... + |ad |)nd
Vậy f (n) = O(nd ) với c = |a0 | + |a1 | + |a2 | + ... + |ad | và K = 1

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

19


Ước lượng O (cont.)
Bài tập
Hãy xác định ước lượng O đơn giản nhất cho các hàm sau
5n2 + 3n log n + 2n + 5
20n3 + 10n log n + 5
3 log n + 2
2n+2

2n + 100 log n

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

20


Ước lượng Ω
Định nghĩa 3
Cho T (n) và g(n) là hai hàm số. Ta nói T (n) = Ω(g(n)) nếu tồn
tại các số dương c và K sao cho
T (n) ≥ cg(n), ∀n ≥ K

(2)

Cách đọc: T (n) là ”big-omega” của g(n)
Ý nghĩa: g(n) là giới hạn dưới của T (n)

CuuDuongThanCong.com
Spring 2017

tìm dạng không đệ qui của phương
trình. Có ba phương pháp để giải phương trình đệ qui
Phương pháp truy hồi
Phương pháp đoán nghiệm
Phương pháp tổng quát (cho một lớp các phương trình đệ qui)


CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

40


Phương pháp truy hồi
Dùng phương pháp thay thế vào vế bên phải của phương
trình cho đến khi không còn thay thế được nữa
Từ đó suy ra phương trình dạng không đệ qui

CuuDuongThanCong.com
Spring 2017

/>Data structure & Algorithm

41


Giải phương trình đệ qui cho hàm giai thừa
Hàm đệ qui cho hàm giai thừa là

CuuDuongThanCong.com
Spring 2017

T (n) =

C1

n=0
T (n − 1) + C2 n > 0

/>Data structure & Algorithm

42


Giải phương trình đệ qui cho hàm giai thừa
(cont.)
Lời giải
T (n) = T (n − 1) + C2
T (n) = (T (n − 2) + C2 ) + C2 = T (n − 2) + 2C2
T (n) = (T (n − 3) + C2 ) + 2C2 = T (n − 3) + 3C2
...
T (n) = T (n − i) + iC2
...
T (n) = C1 + nC2
Vậy thời gian thực thi của hàm giai thừa là

CuuDuongThanCong.com
Spring 2017

T (n) = C1 + nC2 = O(n)

/>Data structure & Algorithm

43



Giải phương trình đệ qui cho hàm MergeSort
Phương trình đệ qui của MergeSort

CuuDuongThanCong.com
Spring 2017

T (n) =

2T

C1
n=1
+ C2 n n > 1

n
2

/>Data structure & Algorithm

44


×