Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích thuật toán - Nguyễn Mạnh Hiển (HKI năm 2020-2021)
lượt xem 5
download
Bài giảng "Cấu trúc dữ liệu và giải thuật - Phân tích thuật toán" cung cấp cho người học các kiến thức: Phân tích thuật toán là gì, các ký hiệu tiệm cận, tốc độ tăng của các hàm, các ví dụ phân tích thuật toán. Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích thuật toán - Nguyễn Mạnh Hiển (HKI năm 2020-2021)
- Phân tích thuật toán (Algorithm Analysis) Nguyễn Mạnh Hiển hiennm@tlu.edu.vn
- 2 Nội dung 1. Phân tích thuật toán là gì? 2. Các ký hiệu tiệm cận 3. Tốc độ tăng của các hàm 4. Các ví dụ phân tích thuật toán
- 3 1. Phân tích thuật toán là gì?
- 4 Phân tích thuật toán • Nhằm xác định thời gian chạy (độ phức tạp) của thuật toán dưới dạng một hàm f của kích thước đầu vào n. − Ví dụ: Thời gian tìm kiếm tuần tự một phần tử x trong một dãy n phần tử là f(n) = n (phép so sánh, trong trường hợp tồi/xấu nhất). • Đơn vị thời gian: − Không phải là giờ, phút, giây. − Mà là thao tác cơ bản; ví dụ: cộng, nhân, so sánh… − Mỗi thao tác cơ bản có thời gian chạy là hằng (một lượng thời gian nhỏ không phụ thuộc vào kích thước đầu vào n).
- 5 Đếm số thao tác cơ bản • Nhận diện các thao tác cơ bản trong thuật toán. • Xác định thao tác cơ bản T chiếm nhiều thời gian chạy nhất so với các thao tác cơ bản còn lại. − Thao tác T này thường xuất hiện trong các vòng lặp. • Đếm số lần thực hiện thao tác T, sẽ thu được hàm thời gian chạy f(n). • Chú ý: Trong trường hợp khó tìm ra thao tác T, có thể đếm tất cả các thao tác cơ bản. Khi đó, sẽ thu được hàm f’(n) f(n), nhưng nếu áp dụng thêm phép phân tích tiệm cận (học sau) thì các kết quả cuối cùng sẽ giống nhau.
- 6 Ví dụ đếm số thao tác cơ bản Ví dụ 1: In các phần tử (C++) Ví dụ 3: Kiểm tra tính sắp xếp (C++) for (i = 0; i < n; i++) template cout
- 7 2. Các ký hiệu tiệm cận
- 8 Phân tích tiệm cận • Nhằm xem xét tốc độ tăng của hàm f(n) khi n dần tới +. • Cho phép quy các dạng hàm f(n) khác nhau về một số ít dạng cơ bản, như log n, n, n2… − Giúp so sánh (cỡ) thời gian chạy của các thuật toán dễ hơn. • Có 3 cách phân tích tiệm cận tương ứng với ba ký hiệu tiệm cận sau đây: − Ô lớn: O tìm cận trên của f(n) − Ô-mê-ga lớn: tìm cận dưới của f(n) − Tê-ta lớn: tìm cận chặt của f(n)
- 9 Ký hiệu O f(n) = O(g(n)) khi và chỉ khi c > 0 và n0 > 0 sao cho f(n) cg(n) n n0 cg(n) f(n) f(n) bị chặn trên bởi g(n) theo nghĩa tiệm cận n0
- 10 Ký hiệu f(n) = (g(n)) khi và chỉ khi c > 0 và n0 > 0 sao cho cg(n) f(n) n n0 f(n) cg(n) f(n) bị chặn dưới bởi g(n) theo nghĩa tiệm cận n0
- 11 Ký hiệu f(n) = (g(n)) khi và chỉ khi c1 > 0, c2 > 0 và n0 > 0 sao cho c1g(n) f(n) c2g(n) n n0 c2g(n) f(n) f(n) có cùng tốc độ tăng c1g(n) với g(n) theo nghĩa tiệm cận n0
- 12 Ví dụ phân tích tiệm cận f(n) = 3n2 + 17 = − (1), (n), (n2) cận dưới − O(n2), O(n3), O(n4)… cận trên − (n2) cận chặt Hãy điền vào chỗ dấu chấm hỏi ! f(n) = 1000 n2 + 17 + 0,001 n3 = − (?) cận dưới − O(?) cận trên − (?) cận chặt
- 13 Tính chất bắc cầu • Nếu f(n) = O(g(n)) và g(n) = O(h(n)) f(n) = O(h(n)) • Nếu f(n) = (g(n)) và g(n) = (h(n)) f(n) = (h(n)) • Nếu f(n) = (g(n)) và g(n) = (h(n)) f(n) = (h(n))
- 14 Một số tính chất khác • Nếu f(n) = a0 + a1n + … + aknk (ak > 0) f(n) = O(nk) • logkn = O(n) với k là một hằng số (hàm lôgarít tăng chậm hơn hàm tuyến tính) Chú ý: − Trong môn học này, khi viết hàm lôgarít mà không chỉ rõ cơ số, ta ngầm hiểu cơ số là 2. − Từ giờ trở đi, ta chỉ tập trung vào ký hiệu O.
- 15 3. Tốc độ tăng của các hàm
- 16 Tốc độ tăng của một số hàm cơ bản Hàm Tên c Hằng log n Lôgarít log2 n Lôgarít bình phương n Tuyến tính n log n n2 Bậc hai n3 Bậc ba 2n Hàm mũ
- 17 Hàm nào tăng chậm hơn? • f(n) = n log n và g(n) = n1,5 • Lời giải: − Chú ý rằng g(n) = n1,5 = n * n0,5. − Vì vậy, chỉ cần so sánh log n và n0,5. − Tương đương với so sánh log2 n và n. − Tham khảo tính chất trong slide trước: log2n tăng chậm hơn n. − Suy ra f(n) tăng chậm hơn g(n).
- 18 Ví dụ về tốc độ tăng của các hàm • Xét một máy tính thực hiện được 1.000.000 thao tác cơ bản trong một giây. • Khi thời gian chạy vượt quá 1025 năm, ta viết "very long".
- 19 4. Các ví dụ phân tích thuật toán
- 20 Vòng lặp 1 for (i = 0; i < n; i++) 2 { 3 x = a[i] / 2; 4 a[i] = x + 1; 5 } • Có 4 thao tác cơ bản ở các dòng 3 và 4, gồm 2 phép gán, 1 phép chia và 1 phép cộng. • Cả 4 thao tác cơ bản đó được lặp lại n lần. • Thời gian chạy: t(n) = 4n = O(n) Chú ý: Ở đây, ta bỏ qua 3 thao tác cơ bản điều khiển quá trình lặp ở dòng 1. Kết quả phân tích thuật toán sẽ không thay đổi nếu tính thêm cả 3 thao tác cơ bản đó.
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu cơ bản và giải thuật - Chương 1
9 p | 258 | 29
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 180 | 17
-
Bài giảng Cấu trúc dữ liệu: Chương 10 - Nguyễn Xuân Vinh
31 p | 96 | 10
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 164 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 86 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 118 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 91 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 63 | 7
-
Bài giảng Cấu trúc dữ liệu: Chương Giới thiệu - Nguyễn Xuân Vinh
8 p | 113 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 179 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Chương 1: Tổng quan về giải thuật và cấu trúc dữ liệu
10 p | 75 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 108 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 70 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các khái niệm cơ bản
23 p | 49 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 53 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn