GV: NGUYỄN XUÂN VINH
CẤU TRÚC DỮ LIỆU
DATA STRUCTURES
[214331]
MÔN: CẤU TRÚC DỮ LIỆU
ĐỘ PHỨC TẠP
(Complexity)
Nguyễn Xuân Vinh
1
/XX
12/3/15
GV: NGUYỄN XUÂN VINH
Khái niệm
Thuật toán (Algorithm) là một dãy hữu hạn các bước có thể thực thi được mà theo đó ta đạt được lời giải của bài
toán.
2
/XX
12/3/15
MÔN: CẤU TRÚC DỮ LIỆU
Từ Algorithm bắt nguồn từ nhà toán học Ả Rập Al-Khwārizmī
Thuật toán giải phương trình bậc 2, thuật toán tìm số lớn nhất trong dãy số, thuật toán sắp xếp…
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
3
Ví dụ
Mô tả giải thuật tìm phần tử lớn nhất trong dãy hữu hạn các phần tử
B1: Đặt giá trị cực đại tạm thời (max) là phần tử đầu tiên của dãy
B2: Nếu số kế tiếp lớn hơn max thì gán giá trị max = số đó
B3: Lặp lại bước 2 nếu còn phần tử trong dãy
B4: Dừng khi không còn phần tử trong dãy, số max lúc này là phần tử lớn nhất của dãy
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
Khái niệm
Dữ liệu nhập (input)
4
/XX
12/3/15
Dãy thao tác
Dữ liệu xuất (output)
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
5
Các tính chất cơ bản của thuật toán
Tính xác định (rõ ràng, xác định).
Tính hữu hạn (dừng).
Tính đúng đắn.
Tính tổng quát: phải áp dụng được cho 1 họ các vấn đề
Đầu vào
Đầu ra
Thời gian (số thao tác)
MÔN: CẤU TRÚC DỮ LIỆU
GV: NGUYỄN XUÂN VINH
Độ phức tạp của thuật toán
Độ phức tạp
Dữ liệu nhập
của thuật toán
6
/XX
12/3/15
Không gian
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
7
Độ phức tạp của thuật toán
Thời gian mà máy tính khi thực hiện một thuật toán phụ thuộc vào:
Bản thân thuật toán đó.
Máy tính đang thực thi thuật toán.
Đánh giá hiệu quả của một thuật toán có thể:
Xét số các phép tính phải thực hiện khi thực hiện thuật toán này.
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
8
Độ phức tạp của thuật toán
Độ phức tạp về không gian
Độ phức tạp về thời gian
Độ phức tạp về giải thuật
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
9
Độ phức tạp về không gian
Chiếm tài nguyên của máy
Bộ nhớ
Sử dụng CPU
Băng thông
…
VD: heap sort nếu dùng heap mà không dùng arraytốn bộ nhớ
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
10
Độ phức tạp về thời gian
Tính hiệu quả của thuật toán được tính bằng phương pháp thực nghiệm thông qua các bộ dữ liệu thử
Phụ thuộc vào ngôn ngữ lập trình
Trình độ, kỹ năng của người viết
Phần cứng máy tính dùng để thử nghiệm
Sự phức tạp của việc xây dựng một bộ dữ liệu thử
GV: NGUYỄN XUÂN VINH
Độ phức tạp về giải thuật
Mang tính hình thức
Phép đo độc lập với máy tính, ngôn ngữ lập trình, người lập trình hay những tiểu tiết: tăng giảm, chỉ số vòng lặp,
sự khởi gán,…
11
/XX
12/3/15
MÔN: CẤU TRÚC DỮ LIỆU
Thời gian thực thi của giải thuật sẽ tăng theo kích thước dữ liệu, thời gian này sẽ tỷ lệ các thao tác cơ sở
Độ phức tạp thuật toán là một hàm phụ thuộc đầu vào
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
12
Độ phức tạp của thuật toán
Thông thường số các phép tính được thực hiện phụ thuộc vào cỡ của bài toán, tức là độ lớn của đầu vào.
Trong thực tiễn, chỉ cần biết một ước lượng đủ tốt của chúng.
Để ước lượng độ phức tạp của một thuật toán ta thường dùng khái niệm big-O
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
13
Những thao tác cơ sở
Là các phép toán tham gia trực tiếp vào quá trình xử lý
Ví dụ
Phép so sánh
Phép chuyển dời
Phép toán số học,..
Trong các giải thuật sắp xếp thì các phép toán cơ sở là so sánh và chuyển dời
GV: NGUYỄN XUÂN VINH
Độ phức tạp của thuật toán (tt)
Thời gian (số thao tác)
MÔN: CẤU TRÚC DỮ LIỆU
Thuật toán 1
Thuật toán 2
14
/XX
12/3/15
Thuật toán 3
Dữ liệu nhập
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
15
Độ phức tạp của thuật toán (tt)
Thời gian tối thiểu (trường hợp tốt nhất).
Thời gian tối đại (trường hợp xấu nhất).
Thời gian trung bình.
Ta thường dùng các ký hiệu sau để mô tả cho độ phức tạp thuật toán
Bậc big-O: chặn trên, trường hợp tốt nhất
Bậc big-Ω: chặn dưới, trường hợp xấu nhất
Bậc Θ (bậc Theta): chặn 2 đầu, trung bình
GV: NGUYỄN XUÂN VINH
Ký hiệu O
Cho f, g là 2 hàm thực xác định trong N. Khi đó ta viết
f(n) = O(g(n))
Nếu ∃C>0, ∃k∈N, ∀n∈N, n≥k → |f(n)| ≤ C.|g(n)|
16
/XX
12/3/15
MÔN: CẤU TRÚC DỮ LIỆU
Với n là độ lớn đầu vào:
Bài toán giai thừa: n là số cần tính giai thừa
Bài toán sai phân: n là số chữ số có nghĩa cần đạt được
Các phép tính trên ma trận: n là số hàng hoặc số cột của ma trận
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
17
Ký hiệu O (tt)
3n = O(15n) do ∀n > 0, 3n ≤ 1×15n.
15n = O(3n) do ∀n > 0, 15n ≤ 5×3n.
3n và 15n đều = O(n)?
2
3
2
3
n = O(n ) do ∀n > 1, n < n .
f(n) = log(n!), g(n) = n.log(n). Ta có:
n! = 1.2.....n ≤ n.n.....n = n
n
n
⇒ log(n!) ≤ log(n ) = n.log(n)
⇒ log(n!) = O(n.log(n)) (f(n) = O(g(n))
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
18
Ký hiệu O (tt)
f(n) = n2 + 100n + 100 = O(n2)?
f(n) = n2 + 200n + 150 = O(n2)?
f(n) = n3 + 10n + 12 = O(n3)?
GV: NGUYỄN XUÂN VINH
Định lý 1
Nếu f(n) là một đa thức bậc k theo n:
k
k-1
f(n) = akn + ak-1n
+ . . . + a1n + a0, với ak ≠ 0,
19
/XX
12/3/15
MÔN: CẤU TRÚC DỮ LIỆU
k
thì ta có f(n) = O(n ).
GV: NGUYỄN XUÂN VINH
Thí dụ
n (n + 1)
2
k
=
=
O
(
n
)
∑
2
k =1
MÔN: CẤU TRÚC DỮ LIỆU
n
n
2
2
2
2
2
2
2
3
k
=
1
+
2
+
...
+
n
≤
n
+
n
+
...
+
n
=
n
∑
k =1
n
20
/XX
12/3/15
n
⇒ ∑ k = O( n )
k =1
2
3
GV: NGUYỄN XUÂN VINH
Thí dụ (tt)
n3 ≠ O(100n2)?
3
2
3
2
Nếu n = O(100n ), i.e. ∃c, k sao cho: ∀n ≥ k: n ≤ c×100n
21
/XX
12/3/15
MÔN: CẤU TRÚC DỮ LIỆU
⇔
∀n ≥ k: n ≤ c×100. Vô lý.
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
22
Định lý 2
Nếu f1(n) = O(g1(n)) và f2(n) = O(g2(n)) thì
(f1(n) + f2(n)) = O(max{g1(n), g2(n)})
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
23
Hệ quả
Nếu f1(n) = O(g(n)) và f2(n) = O(g(n)) thì
(f1(n) + f2(n)) = O(g(n))
GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
24
Định lý 3
Nếu f1(n) = O(g1(n)) và f2(n) = O(g2(n)) thì
(f1(n)×f2(n)) = O(g1(n)×g2(n))
GV: NGUYỄN XUÂN VINH
Một số định nghĩa
Cho f, g là 2 hàm thực xác định trên N. Ta viết
f = Ω(g) nếu g = O(f).
f = Θ(g) nếu f = O(g) và f = Ω(g) (i.e. f = O(g) và g = O(f)).
f = O(g) nếu ∀c>0, ∃k∈N sao cho
MÔN: CẤU TRÚC DỮ LIỆU
n ≥ k → f(n) ≤ c×g(n).
(i.e.
25
/XX
12/3/15
tăng nhanh hơn f.
f ).(Khi
n )đó g được gọi là
lim
=0
n →∞ g ( n )