Bài giảng "Cấu trúc dữ liệu và thuật toán - Chương 1: Các kiến thức cơ bản" cung cấp cho người học các kiến thức: Thuật toán và độ phức tạp, ký hiệu tiệm cận, giả ngôn ngữ, một số kỹ thuật phân tích thuật toán. . | Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 1 - Nguyễn Đức Nghĩa CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN Data Structures and Algorithms NguyỄN ĐỨC NGHĨA Bộ môn Khoa học Máy tính Đại học Bách khoa Hà nội Tel: 0438696121 (Off), 0903210111 (Mob) nghiand@ Chương 1 CÁC KIẾN THỨC CƠ BẢN Cấu trúc dữ liệu và thuật toán - . Nghĩa. Bộ môn KHMT NỘI DUNG . Ví dụ mở đầu . Thuật toán và độ phức tạp . Ký hiệu tiệm cận . Giả ngôn ngữ . Một số kĩ thuật phân tích thuật toán Cấu trúc dữ liệu và thuật toán - . Nghĩa. Bộ môn KHMT Ví dụ mở đầu • Bài toán tìm dãy con lớn nhất: Cho dãy số a1, a2, , an Dãy số ai, ai+1 , , aj với 1 ≤ i ≤ j ≤ n được gọi là dãy con của dãy đã cho và ∑jk=i ak được gọi là trọng lượng của dãy con này Bài toán đặt ra là: Hãy tìm trọng lượng lớn nhất của các dãy con, tức là tìm cực đại giá trị ∑jk=i ak. Để đơn giản ta gọi dãy con có trọng lượng lớn nhất là dãy con lớn nhất. • Ví dụ: Nếu dãy đã cho là -2, 11, -4, 13, -5, 2 thì cần đưa ra câu trả lời là 20 (là trọng lượng của dãy con 11, -4, 13) Cấu trúc dữ liệu và thuật toán - . Nghĩa. Bộ môn KHMT Thuật toán trực tiếp • Thuật toán đơn giản đầu tiên có thể nghĩ để giải bài toán đặt ra là: Duyệt tất cả các dãy con có thể ai, ai+1 , , aj với 1 ≤ i ≤ j ≤ n và tính tổng của mỗi dãy con để tìm ra trọng lượng lớn nhất. • Trước hết nhận thấy rằng, tổng số các dãy con có thể của dãy đã cho là C(n,2) + n = n2/2 + n/2 . Cấu trúc dữ liệu và thuật toán - . Nghĩa. Bộ môn KHMT Thuật toán trực tiếp • Thuật toán này có thể cài đặt trong đoạn chương trình sau: int maxSum = 0; for (int i=0; iThuật toán nhanh hơn • Để ý rằng tổng các số hạng từ i đến j có thể thu được từ tổng của các số hạng từ i đến j-1 bởi 1 phép cộng, cụ thể là ta có: j j 1 a[k ] a[ j ] a[k ] k i k i • Nhận xét này cho phép rút bớt