Tải bản đầy đủ (.pptx) (35 trang)

Bài giảng cấu trúc dữ liệu chương 11 nguyễn xuân vinh

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 (283.22 KB, 35 trang )

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 arraytố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 )



×