NỘI DUNG • Bao gồm các kiểu, cấu trúc dữ liệu cơ bản và nâng cao như danh sách, cây, hàng đợi ưu tiên, đồ thị vv.. • Bao gồm các thuật toán cơ bản nhất (tìm kiếm và sắp xếp) trên các cấu trúc dữ liệu đã được giới thiệu3 PHƯƠNG PHÁP • Từ mô hình dữ liệu, giải thuật hình thức đến hiện thực bởi các chương trình • Các kỹ thuật phát triển thuật toán như chia để trị, đệ qui, ánh xạ vv.., được áp dụng thường xuyên4 MỤC TIÊU • Nắm được phương pháp xây dựng và hiện thực các cấu trúc dữ liệu cơ bản • Nắm được ý tưởng, phương pháp thiết kế và nội dung giải thuật • Lựa chọn được các cấu trúc dữ liệu, giải thuật cho các bài toán thực tế5 CÁCH ĐÁNH GIÁ • Thi thực hành trên máy: 30% • Thi tự luận: 70%6 TÀI LIỆU THAM KHẢO • Thomas H. Cormen, Charles E. Leiserson, Ronald D. Rivest. Introduction to Algorithms, McGrawHill Book Company, 2001 • John Hopcroft Jeffrey Ullman. Data Structures and Algorithms, AddisonWesley Publishing Company, 19857 NỘI DUNG THAM KHẢO CHÍNH (Trong Introduction to Algorithms) • Algorithms (Introduction) • Growth of Functions • Elementary Data Structures • Binary Search Tree8 NỘI DUNG THAM KHẢO CHÍNH • Heapsort và Quicksort • Sorting in Linear Time • Elementary Graph Algorithms • Minimum Spanning Trees1 THUẬT TOÁN (Algorithms) • Thuật ngữ và khái niệm • Độ phức tạp về thời gian của thuật toán • Các ví dụ • Kết luận và lưu ý2 THUẬT NGỮ VÀ KHÁI NIỆM • Thuật toán là một thủ tục xác định bao gồm một dãy hữu hạn các bước cần thực hiện để thu được lời giải bài toán • Một thuật toán luôn có một tập dữ liệu đầu vào (input) và một tập dữ liệu đầu ra (output) tương ứng với yêu cầu và lời giải bài toán3 THUẬT NGỮ VÀ KHÁI NIỆM Có thể mô tả thuật toán bằng: • Ngôn ngữ tự nhiên (Natural language) • Mã giả (Pseudocode) • Ngôn ngữ lập trình cấp cao (High programming languages) như Pascal, CC++ vv4 THUẬT NGỮ VÀ KHÁI NIỆM Ví dụ: Tìm x trong dãy a1, a2, ...., an Đầu vào: Số x, dãy n số a1, a2, ..., an Đầu ra: Một giá trị logic true hoặc false Search(x, a, n) 1 for i ← 1 to n 2 do if a i = x 3 then return true 4 return false5 THUẬT NGỮ VÀ KHÁI NIỆM Độ phức tạp của thuật toán là chi phí về tài nguyên của hệ thống (chủ yếu là thời gian, bộ nhớ, CPU, đường truyền) cần thiết để thực hiện thuật toán6 THUẬT NGỮ VÀ KHÁI NIỆM Phân tích thuật toán (Analyzing of Algorithm) là quá trình tìm ra những đánh giá về tài nguyên cần thiết để thực hiện thuật toán7 THUẬT NGỮ VÀ KHÁI NIỆM Độ phức tạp về thời gian của thuật toán: • Được qui về đếm số lệnh cần thực thi của thuật toán • Đó là một hàm T(n) phụ thuộc vào kích thước n của input • Coi như có một máy trừu tượng (abstract machine) để thực hiện thuật toán
GIỚI THIỆU MÔN HỌC CẤU TRÚC DỮ LIỆU VÀ THUẬT GIẢI (Data Structures and Algorithms) NỘI DUNG • Bao gồm kiểu, cấu trúc liệu nâng cao danh sách, cây, hàng đợi ưu tiên, đồ thị vv • Bao gồm thuật tốn (tìm kiếm xếp) cấu trúc liệu giới thiệu PHƯƠNG PHÁP • Từ mơ hình liệu, giải thuật hình thức đến thực chương trình • Các kỹ thuật phát triển thuật toán chia để trị, đệ qui, ánh xạ vv , áp dụng thường xuyên MỤC TIÊU • Nắm phương pháp xây dựng thực cấu trúc liệu • Nắm ý tưởng, phương pháp thiết kế nội dung giải thuật • Lựa chọn cấu trúc liệu, giải thuật cho toán thực tế CÁCH ĐÁNH GIÁ • Thi thực hành máy: 30% • Thi tự luận: 70% TÀI LIỆU THAM KHẢO • Thomas H Cormen, Charles E Leiserson, Ronald D Rivest Introduction to Algorithms, McGraw-Hill Book Company, 2001 • John Hopcroft & Jeffrey Ullman Data Structures and Algorithms, Addison-Wesley Publishing Company, 1985 NỘI DUNG THAM KHẢO CHÍNH (Trong Introduction to Algorithms) • Algorithms (Introduction) • Growth of Functions • Elementary Data Structures • Binary Search Tree NỘI DUNG THAM KHẢO CHÍNH • Heapsort Quicksort • Sorting in Linear Time • Elementary Graph Algorithms • Minimum Spanning Trees THUẬT TỐN (Algorithms) • Thuật ngữ khái niệm • Độ phức tạp thời gian thuật tốn • Các ví dụ • Kết luận lưu ý THUẬT NGỮ VÀ KHÁI NIỆM • Thuật tốn thủ tục xác định bao gồm dãy hữu hạn bước cần thực để thu lời giải tốn • Một thuật tốn ln có tập liệu đầu vào (input) tập liệu đầu (output) tương ứng với yêu cầu lời giải tốn CÁC TÍNH CHẤT CỦA CÂY • Định lý: Đồ thị T vơ hướng n đỉnh thỏa tính chất sau T khơng chứa chu trình có n -1 cạnh T liên thơng có n -1 cạnh T liên thông cạnh cầu Hai đỉnh nối với đường T khơng chứa chu trình thêm vào cạnh có chu trình CÂY BAO TRÙM • Cây T= (V, F) gọi bao trùm (spanning tree) đồ thị vô hường liên thông G = (V, E) F ⊆ E v u v u v u y x y x y x G Cây BT T1 Cây BT T2 CÂY BAO TRÙM NHỎ NHẤT • Khái niệm • Thuật tốn Kruskal • Thuật tốn Prim KHÁI NIỆM • Cho G đồ thị vô hướng, liên thơng có trọng số, n đỉnh H đường đi, chu trình, cây, đồ thị con,… G Trọng số H, ký hiệu w(H), tổng trọng số tất cạnh nó: w(H) = Σe∈ H w(e) Bài tốn: Tìm bao trùm T có trọng số nhỏ (minimum spanning tree-MST) G THUẬT TỐN KRUSKAL Ý tưởng • Tại bước, thuật tốn tìm cạnh có trọng số nhỏ thêm vào tập cạnh bao trùm cho khơng gây chu trình • Thuật toán dừng số cạnh số đỉnh đồ thị trừ THUẬT TỐN KRUSKAL • Đồ thị G có trọng số cạnh 11 5 14 10 (2, 4), (6, 7), (5, 6), (1, 2), (1, 4), (3, 4), (4, 7), (3, 5), (4, 5) 3, 4, 5, 6, 7, 9, 10, 11, 14 10 THUẬT TỐN KRUSKAL • Cây bao trùm nhỏ G 5 10 (2, 4), (6, 7), (5, 6), (1, 2), (3, 4), (4, 7) 3, 4, 5, 6, 9, 10 11 THUẬT TOÁN KRUSKAL KRUSKAL(G, w) // G có n đỉnh, thực ⏐F⏐ = n-1 F ← ∅ Sort the edges of E into nondecreasng order by weight w while ⏐F⏐< n-1 and E≠ ∅ e ← x ⏐ w(x) = min{w(y), y∈E)} e có trọng số bé E ← E-{e} if F∪{e} not contain cycle then F ← F∪{e} if ⏐F⏐< n-1 then G is not connected else return T T= (V, F) 12 THUẬT TỐN KRUSKAL • Thời gian xếp O(E lgE) • Chi phí cho tất lần lặp vịng lặp while khơng q O(V lgE) • Do đó, tổng chi phí O(E lg E + V lg E) = O(E lg E) 13 THUẬT TOÁN PRIM Ý tưởng • Khởi đầu, thuật tốn chọn đỉnh đồ thị làm đỉnh gốc bao trùm bé • Tại bước chọn thêm đỉnh đồ thị mà trọng số cạnh nối với đỉnh nhỏ • Thuật toán kết thúc tất đỉnh đồ thị chọn 14 THUẬT TOÁN PRIM 15 THUẬT TỐN PRIM 16 THUẬT TỐN PRIM Lưu ý • Đối với đỉnh v, key[v] trọng số nhỏ cạnh nối v với đỉnh xây dựng • Ký hiệu π[v] biểu diễn cha v xây dựng 17 THUẬT TOÁN PRIM • Tổng thời gian cho tất lần gọi EXTRACT-MIN vịng lặp while O(V lg V) • Chi phí cho tất lần lặp vịng lặp for 8-11 vòng lặp while O(E lg V) • Do đó, tổng chi phí O(V lg V + E lg V) = O(E lg V) 18 Bài tập Chương Bài Cho đồ thị vô hướng liên thông G = (V,E) Gọi e = (u, v) ∈ E cạnh có trọng số bé G C/m có bao trùm bé chứa e Bài Cho G đồ thị vô hướng có số cạnh số đỉnh Chứng minh G có chu trình Bài G rừng gồm k cây, n đỉnh Tìm số cạnh G? Bài CMR đồ thị G có bao trùm G Bài Viết chương trình kiểm tra đồ thị vơ hướng có hay khơng Bài Viết chương trình kiểm tra đồ thị vơ hướng có trọng số có liên thơng hay khơng Bài Cho đồ thị có trọng số G = (E, V) ( Hình vẽ) Hãy dùng thuật tốn Kruskal để tìm bao trùm bé G u v s 10 x z y Bài Hãy dùng thuật toán Prim để tìm bao trùm bé đồ thị G tập Bài Viết chương trình thực thuật tốn Kruskal Bài 10 Viết chương trình thực thuật tốn Prim Bài 11 Cho đồ thị vơ hướng liên thơng có trọng số G Viết chương trình tính số phần trăm trọng số bao trùm nhỏ trọng số đồ thị G Bài 12 Giả sử phải nối mạng máy tính cục Hãy viết chương trình để tính tốn chi phí đường dây nối cho nhất, biết khoảng cách giửa máy tính (nguồn điện cho máy lấy từ máy khác có điện lấy từ trung tâm cung cấp chung cho tất máy- Có thể coi máy tính đặt trung tâm này) ... Bao gồm kiểu, cấu trúc liệu nâng cao danh sách, cây, hàng đợi ưu tiên, đồ thị vv • Bao gồm thuật tốn (tìm kiếm xếp) cấu trúc liệu giới thiệu PHƯƠNG PHÁP • Từ mơ hình liệu, giải thuật hình thức... cần thực để thu lời giải tốn • Một thuật tốn ln có tập liệu đầu vào (input) tập liệu đầu (output) tương ứng với yêu cầu lời giải toán THUẬT NGỮ VÀ KHÁI NIỆM Có thể mơ tả thuật tốn bằng: • Ngơn... kỹ thuật phát triển thuật tốn chia để trị, đệ qui, ánh xạ vv , áp dụng thường xuyên MỤC TIÊU • Nắm phương pháp xây dựng thực cấu trúc liệu • Nắm ý tưởng, phương pháp thiết kế nội dung giải thuật