Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 1.332 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
1.332
Dung lượng
23,82 MB
Nội dung
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 on g 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 Cấu trúc liệu Thuật toán c om Khi bạn nói với bạn bè gia đình học mơn “Cấu trúc liệu Thuật tốn”, bạn nói với họ khóa học cho bạn kiến thức vấn đề gì? co ng Nội dung khóa học • Giới thiệu kiến thức cấu trúc liệu thuật tốn g th an • Học cách sử dụng cấu trúc liệu công cụ hỗ trợ việc phát triển thuật toán cu u du on • Trình bày thuật tốn xếp (sorting), tìm kiếm (searching), thuật tốn đồ thị (graphs) Mục tiêu khóa học • Biết lựa chọn phương pháp lưu trữ liệu thích hợp để cài đặt thuật toán giải toán thực tế ứng dụng • Biết cách tiếp cận để phát triển thuật toán giải toán thực tế CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung khóa học cu u du on g th an co ng c om Chương Các kiến thức 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 Tài liệu tham khảo cu u du on g th an co ng c om Robert Sedgewick Algorithms in C++, Parts 1-4: Fundamentals, Data Structures, Sorting, Searching 3th Edition, Addison-Wesley, 1999 Robert Sedgewick Algorithms in C++ Part 5: Graph Algorithms (3rd Edition) 3th Edition, Addison-Wesley, 2002 Michael T Goodrich, Roberto Tamassia, David M Mount, Data Structures and Algorithms in C++ 704 pages Wiley, 2003 T.H Cormen, C.E Leiserson, R.L Rivest Introduction to Algorithms Third Edition, MIT Press, 2009 (Có dịch tiếng Việt) Nguyễn Đức Nghĩa Cấu trúc liệu thuật toán NXB Đại học Bách khoa Hà nội, 2013 368 trang Đỗ Xuân Lôi Cấu trúc liệu giải thuật NXB ĐH Quốc gia, Hà nội, 2005 CuuDuongThanCong.com https://fb.com/tailieudientucntt on g th an co ng c om Tài liệu tham khảo cu u du Robert Sedgewick William O Baker Professor Department of Computer Science Princeton University CuuDuongThanCong.com https://fb.com/tailieudientucntt om c ng co an th Michael T Goodrich Chancellor's Professor at the Department of Computer Science, University of California, • Roberto Tamassia Professor, Department of Computer Science, Brown University • David Mount Professor in the Department of Computer Science and UMIACS cu u du on g • CuuDuongThanCong.com https://fb.com/tailieudientucntt Charles E. Leiserson Professor Department of Electrical Engineering and Computer Science (EECS), MIT cu u Thomas H. Cormen Professor Chair of the Dartmouth College Writing Program du on g th an co ng c om T.H Cormen, C.E Leiserson, R.L Rivest., C Stein Introduction to Algorithms Third Edition, MIT Press, 2009 CuuDuongThanCong.com Ronald Rivest Professor Department of Electrical Engineering and Computer Science (EECS), MIT Clifford Stein Professor IEOR, Columbia University. https://fb.com/tailieudientucntt Tài liệu tham khảo cu u du on g th an co ng c om • Nguyễn Đức Nghĩa Cấu trúc liệu thuật toán NXB Đại học Bách khoa Hà nội, 2013 368 trang 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 on g th a n 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 on g th a n 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 Tìm đỉnh rẽ nhánh du on g th an co ng c om Yêu cầu: Tìm đỉnh rẽ nhánh (cut vertex / articulation point) đơn đồ thị vô hướng G = (V, E) (không thiết phải liên thông) Trả lời: • Brute force: thời gian tính O(V(V + E)) • DFS sửa đổi: thời gian tính O(E + V) cu u Đỉnh v gọi đỉnh rẽ nhánh đồ thị G xóa đỉnh v khỏi đồ thị cạnh nối chúng tăng số thành phần liên thông đồ thị G CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh: thuật tốn brute force • Brute force: với đỉnh v đồ thị cu u du on g th Thời gian tính O(V(V + E)) an co ng c om – Xóa đỉnh v khỏi đồ thị : O(E) – Kiểm tra tính liên thơng đồ thị BFS/DFS : O(V+E) (nếu đồ thị không liên thông đỉnh v đỉnh rẽ nhánh) – Thêm lại đỉnh v vào đồ thị : O(E) CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh: thuật toán brute force cu u du on g th an co ng c om • adj[][]: ma trận kề kích thước VxV (adj[i][j]=1 đồ thị có cạnh (i, j); trái lại = 0) • count: trả số đỉnh rẽ nhánh đồ thị • cutVertex[i] = true đỉnh i đỉnh rẽ nhánh (i CuuDuongThanCong.com https://fb.com/tailieudientucntt cu u du on g th an co ng c om Tìm đỉnh rẽ nhánh: thuật tốn brute force 203 CuuDuongThanCong.com https://fb.com/tailieudientucntt Tìm đỉnh rẽ nhánh: thuật tốn DFS sửa đổi om Cạnh ngược (4, 2) nối đỉnh với tổ tiên đỉnh xóa đỉnh (cha DFS) khỏi đồ thị, tồn đường thông qua cạnh ngược (4, 2) an co ng c DFS(0) cu u du on g th Nếu tồn cạnh ngược (v, w) DFS: dù xóa đỉnh u cha v DFS, ta từ v đến w thơng qua cạnh ngược (v, w) xóa u khơng làm tăng số thành phần liên thông đồ thị u w đỉnh rẽ nhánh Đỉnh u đỉnh rẽ nhánh ?? CuuDuongThanCong.com https://fb.com/tailieudientucntt .c ng co y cu u du on g th an Giả sử DFS, đỉnh u có đỉnh v cho T(v) có gốc v: (a) Có đỉnh x kề với đỉnh y (y thăm trước đỉnh u), tức (x, y) cạnh ngược u bị xóa khỏi đồ thị, tồn đường từ đỉnh T(v) đến y điều với tất u đỉnh u khơng phải đỉnh rẽ nhánh (b) khơng có đỉnh (gọi chung x) kề với đỉnh y đỉnh thăm trước đỉnh u DFS (tức không tồn cạnh ngược (x, y)) đó, xóa đỉnh u khỏi đồ thị, khơng tồn đường đỉnh T(v) đỉnh thăm trước đỉnh u T(v) bị ngắt kết nối khỏi đồ thị đỉnh u bị xóa khỏi đồ thị đỉnh u đỉnh rẽ nhánh om Đỉnh u đỉnh rẽ nhánh ?? CuuDuongThanCong.com x (a) (b) https://fb.com/tailieudientucntt Đỉnh u đỉnh rẽ nhánh ?? co ng c om Đỉnh u đỉnh rẽ nhánh hai trường hợp sau xảy ra: • u gốc DFS u có nhiều • u khơng gốc DFS u có v cho khơng có đỉnh T(v) kề với tổ tiên u DFS (tức không tồn cạnh ngược nối đỉnh thuộc T(v) với đỉnh tổ tiên u) an th cu u du on g y Xác định trường hợp nào??? x CuuDuongThanCong.com https://fb.com/tailieudientucntt Đỉnh u đỉnh rẽ nhánh ?? low[u] = d[w]: với w nút có thời điểm thăm nhỏ nhất, w tổ tiên u, x đỉnh thuộc T(u) (x u), có cạnh (x, w) (tức cạnh ngược) đồ thị c • om Với đỉnh u: lưu • d[u] thời điểm bắt đầu thăm đỉnh u cu u du on g th an co ng low[u] = {d[u], {d[y]: tồn cạnh ngược (x, y) với x cháu u, y tổ tiên u}} Cách tính low[u]: giả sử gọi DFS(u) • Khởi tạo: low[u] = d[u] • For each v Adj[u]: – Cạnh (u, v): low[u] = (low[u], low[v]) v chưa thăm: visited[v]=false – Cạnh ngược (u, v): low[u] = min(low[u], d[v]) • v thăm: visited[v]=true CuuDuongThanCong.com • parent[u]!=v https://fb.com/tailieudientucntt Đỉnh u đỉnh rẽ nhánh ?? co ng c om Đỉnh u đỉnh rẽ nhánh hai trường hợp sau xảy ra: • u gốc DFS u có nhiều • u khơng gốc DFS u có v cho khơng có đỉnh T(v) kề với tổ tiên u DFS (tức không tồn cạnh ngược nối đỉnh thuộc T(v) với đỉnh tổ tiên u) an th if (parent[u] != NULL && low[v] >=d[u]) cutVertex[u] =true; cu u du on g y Xác định trường hợp nào??? x CuuDuongThanCong.com https://fb.com/tailieudientucntt om Tìm đỉnh rẽ nhánh main() for each u V parent[u] = NULL; visited[u] = false; cutVertex[u] = false; time = 0; for each u V if (visited[u] == false) DFS(u); for each u V //In danh sách đỉnh rẽ nhánh if (cutVertex[u]) coutd[u]) print(canh cau (u, v)); } 10 else if (parent[u] != v) low[u] = min(low[u], d[v]); CuuDuongThanCong.com https://fb.com/tailieudientucntt 214 ... https://fb.com/tailieudientucntt Thuật toán cu u du on g th a n co ng c om • Thuật tốn có đặc trưng sau đây: – Đầu vào (Input): Thuật tốn nhận liệu vào từ tập – Đầu (Output): Với tập liệu đầu vào, thuật toán đưa liệu tương... kiến thức cấu trúc liệu thuật tốn g th an • Học cách sử dụng cấu trúc liệu cơng cụ hỗ trợ việc phát triển thuật tốn cu u du on • Trình bày thuật tốn xếp (sorting), tìm kiếm (searching), thuật tốn... Press, 2009 (Có dịch tiếng Việt) Nguyễn Đức Nghĩa Cấu trúc liệu thuật toán NXB Đại học Bách khoa Hà nội, 2013 368 trang Đỗ Xuân Lôi Cấu trúc liệu giải thuật NXB ĐH Quốc gia, Hà nội, 2005 CuuDuongThanCong.com