Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
70
Dung lượng
606,29 KB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BÀI GIẢNG CẤUTRÚCDỮLIỆU VÀ GIẢI THUẬT Nguyễn Trọng Chỉnh chinhnt@uit.edu.vn NỘI DUNG MÔN HỌC CHƯƠNG I: TỔNG QUAN VỀ GT VÀ CTDL CHƯƠNG II: TÌM KIẾM VÀ SẮP XẾP CHƯƠNG III: CẤUTRÚCDỮLIỆUĐỘNG CHƯƠNG IV: NGĂN XẾP VÀ HÀNG ĐỢI CHƯƠNG V: CẤUTRÚC CÂY CHƯƠNG VI: BẢNG BĂM ÔN TẬP ĐÁNH GIÁ MÔN HỌC Điểm trình: 10% (tham dự lớp học, thảo luận diễn đàn) Thi thực hành cuối kỳ: 20% (theo quy định giảng viên dạy thực hành) Thi lý thuyết kỳ: 20% Thi lý thuyết cuối kỳ: 50% TÀI LIỆU HỌC TẬP, THAM KHẢO GIÁO TRÌNH CHÍNH Giáo trình CấuTrúcDữLiệu & Giải Thuật, Đỗ Văn Nhơn, Trịnh Quốc Sơn, NXB ĐHQG-HCM, 2015 TÀI LIỆU HỌC TẬP, THAM KHẢO THAM KHẢO Mark Allen Weiss, 2014, Data Structures and Algorithm Analyis in C++, Fourth Edition, Pearson Education, Inc., publishing as AddisonWesley Mark Allen Weiss, 2010, Data Structures and Algorithm Analyis in C, Fourth Edition, Pearson Education, Inc., publishing as Addison-Wesley CÔNG CỤ THỰC HÀNH Microsoft Visual Studio C++ (phiên 2008 trở sau) ĐẠI HỌC QUỐC GIA TPHCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN CẤUTRÚCDỮLIỆU VÀ GIẢI THUẬT CHƯƠNG I TỔNG QUAN VỀ CTDL VÀ GT Nguyễn Trọng Chỉnh chinhnt@uit.edu.vn TỔNG QUAN VỀ CTDL VÀ GT CẤU TRÚCDỮLIỆU KIỂU DỮLIỆU GIẢI THUẬT ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT CẤUTRÚCDỮLIỆU KHÁI NIỆM - Là cách tổ chức lưu trữ liệu máy tính để mô hình hóa điều kiện toán, từ sử dụng liệu cách hiệu - Cấutrúcliệu có vai trò quan trọng việc giải vấn đề máy tính CẤUTRÚCDỮLIỆU Ví dụ 1: Viết chương trình nhập vào danh sách gồm thông tin cá nhân với họ tên, năm sinh giới tính In danh sách cá nhân theo dạng sau: Truong Van Minh, 1998, Nam Hoang Thi Thu Trang, 1998, Nu 10 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC BẬC ĐÁNH GIÁ THUẬT TOÁN - Bậc Big-dùng để ước lượng độ phức tạp thấp thuật toán Hàm g(n) gọi giới hạn f(n) - Lưu ý: độ phức tạp tính toán thuật toán A (g(n)), độ phức tạp thuật toán A (h(n)) với h(n) giới hạn g(n) Ví dụ 10: giả sử thuật toán A có số phép tính f(n)=nn + n2 + 1, đó, độ phức tạp tính toán A (nn), (2n), (n3), (n2) 56 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC BẬC ĐÁNH GIÁ THUẬT TOÁN * Bậc Big- (Têta lớn) - Độ phức tạp thuật toán A (g(n)) tồn số c0>0, c1>0, n0>0 cho c0.g(n) ≤ f(n) ≤ c1.g(n) n ≥ n0 57 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC BẬC ĐÁNH GIÁ THUẬT TOÁN Ví dụ 11: với đoạn chương trình A Ví dụ 6, ta có: fA(n) = (7n2 – n – 6) / Xét hàm số g(n) = n2 Với c0 = 1, c1 = 4, n0=2, ta có: g(n) = n2 fA(n) n= 2.g(n), n n0 Vậy, thuật toán A có độ phức tạp tính toán (n2) 58 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC BẬC ĐÁNH GIÁ THUẬT TOÁN - Bậc Big-dùng để ước lượng độ phức tạp tương đương thuật toán Hàm g(n) gọi giới hạn chặt f(n) 59 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC BẬC ĐÁNH GIÁ THUẬT TOÁN * Một số tính chất - Nếu thuật toán A có số phép tính dựa kích thước đầu vào n đa thức P(n) bậc k, đó, độ phức tạp tính toán A là O(nk), (nk), (nk) - Nếu thuật toán A có số phép tính dựa kích thước đầu vào n logaf(n), logaf(n)=logab.logbf(n) nên độ phức tạp tính toán A ghi O(log f(n)) mà không cần ghi số Điều với bậc và 60 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC BẬC ĐÁNH GIÁ THUẬT TOÁN * Một số tính chất - Nếu thuật toán A có hai công việc liên tiếp T1 T2 có độ phức tạp O(f(n)) O(g(n)) độ phức tạp A: O(max(f(n),g(n))) - Nếu thuật toán A có hai công việc T1 lồng T2, T1 T2 có độ phức tạp O(f(n)) O(g(n)) độ phức tạp A: O(f(n).g(n)) 61 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC BẬC ĐÁNH GIÁ THUẬT TOÁN * Nhận xét: - Trong ký pháp để đánh giá thuật toán, Bậc Big-thể độ phức tạp tính toán tốt - Trong trường hợp xác định giới hạn chặt hàm số biễu diễn số lượng phép tính thuật toán, người ta thường dùng bậc Big-O để thể độ phức tạp tính toán - Khi đánh giá thuật toán, người ta sử dụng hàm giới hạn g(n) đơn giản sát với f(n) 62 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT SỰ PHÂN LỚP CÁC THUẬT TOÁN Độ phức tạp O(1) O(log(n)) O(n) O(nlog(n)) Tên gọi độ phức tạp tương ứng Độ phức tạp số Độ phức tạp logarit Độ phức tạp tuyến tính Độ phức tạp nlogn O(nk) Độ phức tạp đa thức O(kn) Độ phức tạp hàm mũ O(n!) Độ phức tạp giai thừa 63 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT PHÂN TÍCH TRƯỜNG HỢP TRUNG BÌNH Phân tích trường hợp trung bình thực theo trình tự sau: - Tính số phép toán thực trung bình - Dùng bậc đánh giá để ước lượng 64 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT PHÂN TÍCH TRƯỜNG HỢP TRUNG BÌNH Số phép toán trung bình tính dựa vào giả thiết trường hợp có xác suất số phép toán trung bình số phép toán kỳ vọng trường hợp 65 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT PHÂN TÍCH TRƯỜNG HỢP TRUNG BÌNH Ví dụ: đánh giá độ phức tạp trung bình thuật toán sau: for (i = 0; i < n; i++) { if (a[i] == x) return i; } 66 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT PHÂN TÍCH TRƯỜNG HỢP TRUNG BÌNH Số phép tính thuật toán trường hợp giá trị x nằm vị trí thứ i, i=0, ,n là: Ti = + (i+1) + i + i + = 3i + = 3(i + 1) Với giả thiết trường hợp ngẫu nhiên, nên số phép tính trung bình thuật toán: T = i 3(i + 1)/n, i = n = (3/n) i (i + 1)= 3(n(n+1) + 2n)/(2n) = 3(n + 3) / 67 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT PHÂN TÍCH TRƯỜNG HỢP TRUNG BÌNH Vậy độ phức tạp trung bình thuật toán O(n) 68 ĐỘ PHỨC TẠP CỦA GIẢI THUẬT MỘT SỐ CÔNG THỨC + + + + n = n(n + 1)/2 + + + + (2n - 1) = n2 a0 + a1 + a2 + + an = (an+1 - 1)/(a – 1) 1.2 + 2.3 + 3.4 + + n(n + 1) = n(n+1)(n+2) / 12 + 22 + 32 + + n2 = n(n + 1)(2n + 1) / 13 + 23 + 33 + + n3 = n2(n + 1)2 / 1k + 2k + 3k + + nk ≈ nk+1 / (k + 1), k ≠ -1 69 CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT - Duyệt toàn Đệ quy quay lui Chia để trị (Divide and Conquer) Chiến lược tham lam (Greedy) Quy hoạch động (Dynamic Programming) (sinh viên đọc thêm sách) 70 ... double, enum, 20 KIỂU DỮ LIỆU CÁC KIỂU DỮ LIỆU CÓ CẤU TRÚC Là kiểu liệu người lập trình định nghĩa cách kết hợp kiểu liệu để biểu di n liệu toán Các kiểu liệu gọi kiểu liệu trừu tượng (ADT -... "; cin >> t; xuatTuoi(nhom, n, t); return 0; } 16 CẤU TRÚC DỮ LIỆU Bài tập: Xây dựng cấu trúc liệu phù hợp để giải yêu cầu Ví dụ 17 CẤU TRÚC DỮ LIỆU TIÊU CHUẨN ĐÁNH GIÁ - Phản ánh thực tế - Phù... VỀ CTDL VÀ GT CẤU TRÚC DỮ LIỆU KIỂU DỮ LIỆU GIẢI THUẬT ĐỘ PHỨC TẠP CỦA GIẢI THUẬT CÁC CHIẾN LƯỢC THIẾT KẾ GIẢI THUẬT CẤU TRÚC DỮ LIỆU KHÁI NIỆM - Là cách tổ chức lưu trữ liệu máy tính để