Chương 1. Các khái niệm cơ bản. Trong chương này, người học có thể hiểu được một số kiến thức cơ bản về: Ví dụ mở đầu, thuật toán và độ phức tạp, kí hiệu tiệm cận, giả ngôn ngữ (pseudo code), một số kĩ thuật phân tích thuật toán, giải công thức đệ quy.
co ng c om TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Nguyễn Khánh Phƣơng cu u du o ng th an Cấu trúc liệu thuật toán Computer Science department School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung khóa học cu u du o ng th an co ng c om Chương Các khái niệm Chương Các sơ đồ thuật toán Chương Các cấu trúc liệu Chương Cây Chương Sắp xếp Chương Tìm kiếm Chương Đồ thị CuuDuongThanCong.com https://fb.com/tailieudientucntt co ng c om TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Nguyễn Khánh Phƣơng cu u du o ng th an Chương Các khái niệm Computer Science department School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung c om 1.1 Ví dụ mở đầu 1.3 Kí hiệu tiệm cận an co 1.4 Giả ngơn ngữ (Pseudo code) ng 1.2 Thuật tốn độ phức tạp th 1.5 Một số kĩ thuật phân tích thuật tốn cu u du o ng 1.6 Giải công thức đệ quy CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung c om 1.1 Ví dụ mở đầu 1.3 Kí hiệu tiệm cận an co 1.4 Giả ngôn ngữ (Pseudo code) ng 1.2 Thuật toán độ phức tạp th 1.5 Một số kĩ thuật phân tích thuật tốn cu u du o ng 1.6 Giải công thức đệ quy CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du o ng th an co ng c om Ví dụ: Tìm dãy lớn (The maximum subarray problem) CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Tìm dãy lớn (The maximum subarray problem) cu u du o ng th an co ng c om 1.1.1 Duyệt tồn (Brute force) 1.1.2 Duyệt tồn có cải tiến 1.1.3 Thuật toán đệ quy (Recursive algorithm) 1.1.4 Thuật toán quy hoạch động (Dynamic programming) NGUYỄN KHÁNH PHƢƠNG7 Bộ mơn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Tìm dãy lớn (The maximum subarray problem) cu u du o ng th an co ng c om 1.1.1 Duyệt toàn (Brute force) 1.1.2 Duyệt toàn có cải tiến 1.1.3 Thuật tốn đệ quy (Recursive algorithm) 1.1.4 Thuật toán quy hoạch động (Dynamic programming) CuuDuongThanCong.com https://fb.com/tailieudientucntt 1.1.1 Thuật tốn duyệt tồn giải tốn dãy lớn c om • Thuật tốn đơn giản nghĩ để giải tốn đặt ng là: Duyệt tất dãy : co ai, ai+1 , …, aj với ≤ i ≤ j ≤ n, th an tính tổng dãy để tìm trọng lượng lớn u cu dãy cho là: du o ng • Trước hết nhận thấy rằng, tổng số dãy C(n, 1) + C(n, 2) = n2/2 + n/2 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ ứng dụng 10 Giá 100 112 109 85 105 102 86 63 81 101 11 12 13 14 15 16 17 94 106 101 79 93 89 95 c om Ngày du o ng th an co ng Ta cần mua số cổ phiếu, lần, bán ngày sau Làm để tối đa hóa lợi nhuận ? – Chiến lược: mua vào lúc giá thấp, bán lúc giá cao [buy low, sell high] lúc cho lợi nhuận cao Ví dụ: Cho giá cổ phiếu đồ thị Ta thu lợi nhuận cao 3$ mua vào thứ với giá 7$, bán ngày thứ với giá 10$ Giá 7$ mua vào ngày giá thấp nhất, giá 10$ bán ngày giá cao u • • Giả sử ta biết giá cổ phiếu công ty A từ ngày i đến ngày j sau: cu • – Lời giải: Ta dễ dàng tìm cách duyệt hết tất khả năng: • Có cặp ngày mua/bán có khoảng thời gian n ngày? • Tính lợi nhuận thu cho cặp ngày, để tìm cặp ngày có lợi nhuận cao – Liệu ta làm tốt hay khơng? • Câu trả lời: Có, cách quy tốn dãy lớn CuuDuongThanCong.com https://fb.com/tailieudientucntt 10 du o ng th an co ng c om Ví dụ 1: Giải cơng thức đệ quy: T(n) = 2T(n/2) + n, T(1) = cu u • Giá trị hàm T(n) tổng giá trị tất mức: n*4 • Vì mức cuối (sâu nhất) log2n có giá trị = 4n, ta có CuuDuongThanCong.com https://fb.com/tailieudientucntt 1.6 Giải cơng thức đệ quy: Phương pháp 3: Cây đệ quy u du o ng th an co ng c om Ví dụ 2: Giải công thức đệ quy T(n) = T(n/ ) + f(n), T( ) = c cu • CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ 2: Giải công thức đệ quy T(n) = T(n/ ) + f(n), T( ) = c Iteration T(n/ ) c om TT(n) T(n/ ) f(n/ ) T(n/ ) • th T(n/ 2) T(n/ u du o ng T(n/ 2) cu T(n/ 2) i log n an co ng Cost f(n) Giá trị hàm tổng giá trị tất mức cây: CuuDuongThanCong.com https://fb.com/tailieudientucntt 2) 2f(n/ 2) i f(n/ i) Ví dụ 3: Tìm kiếm nhị phân dạng đệ quy ng c om Đầu vào: Mảng S gồm n phần tử: S[0],…,S[n-1] xếp theo thứ tự tăng dần; Giá trị key Đầu ra: số phần tử có giá trị key có; -1 key khơng xuất mảng S cu u du o ng th an co int binsearch(int low, int high, int S[], int key) { if (low