Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích độ phức tạp của giải thuật - Nguyễn Tri Tuấn
Số trang: 26
Loại file: pdf
Dung lượng: 1,021.21 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích độ phức tạp của giải thuật cung cấp cho người học các kiến thức về chi phí của giải thuật, độ phức tạp của giải thuật, Big-O,... Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích độ phức tạp của giải thuật - Nguyễn Tri Tuấn Cấu trúc dữ liệu & Giải thuật (Data Structures and Algorithms)Phân tích độ phức tạp của giải thuật Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@fit.hcmus.edu.vn LOGO CuuDuongThanCong.com https://fb.com/tailieudientucntt Thuật ngữ Chi phí (cost) Độ phức tạp (complexity) Phân tích độ phức tạp (complexity analysis) 2/38 CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung 1 Chi phí của giải thuật 2 Độ phức tạp của giải thuật 3 Big-O, Big-, Big-www.themegallery.com 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chi phí của giải thuật (1) Tính tổng n số nguyên: sum = 0; for (i = 0; i < n; i++) sum += i; Giải thuật Bubble sort: for (i = n-1; i > 0; i--) for (j = 1; j a[j]) { temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; } 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chi phí của giải thuật (2) Cùng một vấn đề, có thể giải quyết bằng nhiều giải thuật khác nhau VD. Sắp xếp mảng Bubble sort, Heap sort, Quick sort,… Mỗi giải thuật có chi phí (cost) khác nhau Chi phí thường được tính dựa trên: thời gian (time) bộ nhớ (space/memory) Chi phí “thời gian” thường được quan tâm nhiều hơn 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chi phí của giải thuật (3) Tuy nhiên, việc dùng khái niệm “thời gian” theo nghĩa đen (vd. giải thuật A chạy trong 10s) là không ổn, vì: tuỳ thuộc vào loại máy tính (vd. máy Dual-Core sẽ chạy nhanh hơn Pentium II) tuỳ thuộc ngôn ngữ lập trình (vd. Giải thuật viết bằng C/Pascal có thể chạy nhanh gấp 20 lần viết bằng Basic/LISP) Do đó, người ta thường dùng “đơn vị đo logic” (vd. số phép tính cơ sở) thay cho đơn vị đo “thời gian thật” (mili-giây, giây,…) VD. Chi phí để sắp xếp mảng n phần tử bằng giải thuật Bubble sort là n2 (phép tính cơ sở) 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung1 Chi phí của giải thuật2 Độ phức tạp của giải thuật3 Big-O, Big-, Big- 7/38 CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (1)VD. Tính độ phức tạp của giải thuật sau sum = 0; for (i=0; i Độ phức tạp của giải thuật (2) Thông thường, độ phức tạp của giải thuật không phụ thuộc vào giá trị của dữ liệu đầu vào, mà phụ thuộc vào kích thước của dữ liệu đầu vào độ phức tạp của giải thuật thường được địnhnghĩa là một hàm có tham số là kích thước của dữliệu đầu vào VD: Độ phức tạp của giải thuật tính n! là f(n) Độ phức tạp của giải thuật sắp xếp mảng m phần tử là f(m) 9/38 CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (3) Người ta thường chỉ quan tâm đến độ phức tạp của giải thuật với giả định số phần tử cần xử lý rất lớn (n ∞) Như vậy, ta có thể bỏ qua các thành phần “rất bé” trong biểu thức tính độ phức tạp VD. f(n) = n2 + 100n + log10n + 1000 Việc xác định độ phức tạp chính xác cho một giải thuật rất khó khăn, thậm chí nhiều khi không thể ta có thể bỏ qua các thành phần phụ (ảnh hưởng không đáng kể) VD. for (i=0; iĐộ phức tạp của giải thuật (4) Mức tăng của các thành phần trong f(n) = n2 + 100n + log10n + 1000 11CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (5) Trường hợp tốt nhất (Best case) Không phản ánh được thực tế Trường hợp trung bình (Average case) Rất khó xác định, vì lệ thuộc nhiều yếu tố khách quan Trường hợp xấu nhất (Worst case) Cho chúng ta một sự “bảo đảm tuyệt đối” VD. Độ phức tạp của giải thuật sẽ không nhiều hơn n2 Ta thường dùng độ đo “xấu nhất” 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (6) ...
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và giải thuật: Phân tích độ phức tạp của giải thuật - Nguyễn Tri Tuấn Cấu trúc dữ liệu & Giải thuật (Data Structures and Algorithms)Phân tích độ phức tạp của giải thuật Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@fit.hcmus.edu.vn LOGO CuuDuongThanCong.com https://fb.com/tailieudientucntt Thuật ngữ Chi phí (cost) Độ phức tạp (complexity) Phân tích độ phức tạp (complexity analysis) 2/38 CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung 1 Chi phí của giải thuật 2 Độ phức tạp của giải thuật 3 Big-O, Big-, Big-www.themegallery.com 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chi phí của giải thuật (1) Tính tổng n số nguyên: sum = 0; for (i = 0; i < n; i++) sum += i; Giải thuật Bubble sort: for (i = n-1; i > 0; i--) for (j = 1; j a[j]) { temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; } 4 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chi phí của giải thuật (2) Cùng một vấn đề, có thể giải quyết bằng nhiều giải thuật khác nhau VD. Sắp xếp mảng Bubble sort, Heap sort, Quick sort,… Mỗi giải thuật có chi phí (cost) khác nhau Chi phí thường được tính dựa trên: thời gian (time) bộ nhớ (space/memory) Chi phí “thời gian” thường được quan tâm nhiều hơn 5 CuuDuongThanCong.com https://fb.com/tailieudientucntt Chi phí của giải thuật (3) Tuy nhiên, việc dùng khái niệm “thời gian” theo nghĩa đen (vd. giải thuật A chạy trong 10s) là không ổn, vì: tuỳ thuộc vào loại máy tính (vd. máy Dual-Core sẽ chạy nhanh hơn Pentium II) tuỳ thuộc ngôn ngữ lập trình (vd. Giải thuật viết bằng C/Pascal có thể chạy nhanh gấp 20 lần viết bằng Basic/LISP) Do đó, người ta thường dùng “đơn vị đo logic” (vd. số phép tính cơ sở) thay cho đơn vị đo “thời gian thật” (mili-giây, giây,…) VD. Chi phí để sắp xếp mảng n phần tử bằng giải thuật Bubble sort là n2 (phép tính cơ sở) 6 CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung1 Chi phí của giải thuật2 Độ phức tạp của giải thuật3 Big-O, Big-, Big- 7/38 CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (1)VD. Tính độ phức tạp của giải thuật sau sum = 0; for (i=0; i Độ phức tạp của giải thuật (2) Thông thường, độ phức tạp của giải thuật không phụ thuộc vào giá trị của dữ liệu đầu vào, mà phụ thuộc vào kích thước của dữ liệu đầu vào độ phức tạp của giải thuật thường được địnhnghĩa là một hàm có tham số là kích thước của dữliệu đầu vào VD: Độ phức tạp của giải thuật tính n! là f(n) Độ phức tạp của giải thuật sắp xếp mảng m phần tử là f(m) 9/38 CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (3) Người ta thường chỉ quan tâm đến độ phức tạp của giải thuật với giả định số phần tử cần xử lý rất lớn (n ∞) Như vậy, ta có thể bỏ qua các thành phần “rất bé” trong biểu thức tính độ phức tạp VD. f(n) = n2 + 100n + log10n + 1000 Việc xác định độ phức tạp chính xác cho một giải thuật rất khó khăn, thậm chí nhiều khi không thể ta có thể bỏ qua các thành phần phụ (ảnh hưởng không đáng kể) VD. for (i=0; iĐộ phức tạp của giải thuật (4) Mức tăng của các thành phần trong f(n) = n2 + 100n + log10n + 1000 11CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (5) Trường hợp tốt nhất (Best case) Không phản ánh được thực tế Trường hợp trung bình (Average case) Rất khó xác định, vì lệ thuộc nhiều yếu tố khách quan Trường hợp xấu nhất (Worst case) Cho chúng ta một sự “bảo đảm tuyệt đối” VD. Độ phức tạp của giải thuật sẽ không nhiều hơn n2 Ta thường dùng độ đo “xấu nhất” 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt Độ phức tạp của giải thuật (6) ...
Tìm kiếm theo từ khóa liên quan:
Cấu trúc dữ liệu Cấu trúc dữ liệu và giải thuật Data structures Độ phức tạp của giải thuật Phân tích giải thuật Chi phí của giải thuậtGợi ý tài liệu liên quan:
-
Giáo trình Cấu trúc dữ liệu và thuật toán trên C++
74 trang 346 0 0 -
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 299 0 0 -
3 trang 156 3 0
-
Giáo trình Cấu trúc dữ liệu và giải thuật: Phần 2 - Trần Hạnh Nhi
123 trang 154 0 0 -
Giáo trình cấu trúc dữ liệu và giải thuât part 2
16 trang 152 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 145 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 138 0 0 -
10 trang 136 0 0
-
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 135 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 135 0 0