From 9d175e8576bfa7ccf6964381e4d25b05c9f1bc3c Mon Sep 17 00:00:00 2001 From: Le Tien Tai Date: Wed, 4 Jan 2017 20:12:36 +0700 Subject: [PATCH] Translate "Graphs" section Also leave one TODO for adding anchor to Books section --- README-vn.md | 76 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 6 deletions(-) diff --git a/README-vn.md b/README-vn.md index 1231a60..7d4b09c 100644 --- a/README-vn.md +++ b/README-vn.md @@ -75,12 +75,12 @@ Thêm vào đó, nếu bạn muốn trở thành một kỹ sư hệ thống (Sy - Sắp xếp chọn vun đống (Heapsort) - Sắp xếp nhanh (Quicksort) - Sắp xếp trộn (Merge Sort) -- [Graphs](#graphs) - - directed - - undirected - - adjacency matrix - - adjacency list - - traversals: BFS, DFS +- [Đồ thị](#đồ-thị) + - có hướng + - vô hướng + - ma trận kề + - danh sách kề + - duyệt đồ thị: BFS, DFS - [Even More Knowledge](#even-more-knowledge) - [Recursion](#recursion) - [Object-Oriented Programming](#object-oriented-programming) @@ -911,5 +911,69 @@ Nếu bạn muốn biết thêm chi tiết trong chủ đề này, xem qua phầ > TODO replace sections anchor after translate "Additional Detail on Some Subjects" +## Đồ thị + +Đồ thị có thể được sử dụng để miêu tả nhiều bài toán trong khoa học máy tính, vậy nên phần này cũng khá dài, tương đương với [Cây](#cây) và [Sắp xếp](#sắp-xếp). + +- Ghi chú từ Yegge: + - Có 3 cách cơ bản để thể hiện một đồ thị trong bộ nhớ: + - Các đối tượng (objects) và con trỏ (pointers) + - Ma trận + - Danh sách kề (adjacency list) + - Hãy làm quen với mỗi cách thể hiện và nắm vững ưu, nhược của nó. + - BFS và DFS - biết về độ phức tạp tính toán của chúng, ước lượng những sự được và mất khi sử dụng, và cài đặt chúng như thế nào + - Khi được trao cho một bài toán, hãy thử tìm một giải thuật sử dụng đồ thị trước khi nghĩ đến các hướng giải quyết khác. + +- [ ] Các bài giảng của giáo sư Skiena, tốt để dẫn nhập: + - [ ] [CSE373 2012 - Lecture 11 - Graph Data Structures (video)](https://www.youtube.com/watch?v=OiXxhDrFruw&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=11) + - [ ] [CSE373 2012 - Lecture 12 - Breadth-First Search (video)](https://www.youtube.com/watch?v=g5vF8jscteo&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=12) + - [ ] [CSE373 2012 - Lecture 13 - Graph Algorithms (video)](https://www.youtube.com/watch?v=S23W6eTcqdY&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b&index=13) + - [ ] [CSE373 2012 - Lecture 14 - Graph Algorithms (con't) (video)](https://www.youtube.com/watch?v=WitPBKGV0HY&index=14&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 15 - Graph Algorithms (con't 2) (video)](https://www.youtube.com/watch?v=ia1L30l7OIg&index=15&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + - [ ] [CSE373 2012 - Lecture 16 - Graph Algorithms (con't 3) (video)](https://www.youtube.com/watch?v=jgDOQq6iWy8&index=16&list=PLOtl7M3yp-DV69F32zdK7YJcNXpTunF2b) + +- [ ] Đồ thị (ôn tập và mở rộng) (tên video được giữ nguyên vì có quá nhiều thuật ngữ và viết tắt): + - [ ] [6.006 Single-Source Shortest Paths Problem (video)](https://www.youtube.com/watch?v=Aa2sqUhIn-E&index=15&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Dijkstra (video)](https://www.youtube.com/watch?v=2E7MmKv0Y24&index=16&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [6.006 Bellman-Ford (video)](https://www.youtube.com/watch?v=ozsuci5pIso&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=17) + - [ ] [6.006 Speeding Up Dijkstra (video)](https://www.youtube.com/watch?v=CHvQ3q_gJ7E&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb&index=18) + - [ ] [Aduni: Graph Algorithms I - Topological Sorting, Minimum Spanning Trees, Prim's Algorithm - Lecture 6 (video)]( https://www.youtube.com/watch?v=i_AQT_XfvD8&index=6&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm) + - [ ] [Aduni: Graph Algorithms II - DFS, BFS, Kruskal's Algorithm, Union Find Data Structure - Lecture 7 (video)]( https://www.youtube.com/watch?v=ufj5_bppBsA&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=7) + - [ ] [Aduni: Graph Algorithms III: Shortest Path - Lecture 8 (video)](https://www.youtube.com/watch?v=DiedsPsMKXc&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=8) + - [ ] [Aduni: Graph Alg. IV: Intro to geometric algorithms - Lecture 9 (video)](https://www.youtube.com/watch?v=XIAQRlNkJAw&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&index=9) + - [ ] [CS 61B 2014 (starting at 58:09) (video)](https://youtu.be/dgjX4HdMI-Q?list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&t=3489) + - [ ] [CS 61B 2014: Weighted graphs (video)](https://www.youtube.com/watch?v=aJjlQCFwylA&list=PL-XXv-cvA_iAlnI-BQr9hjqADPBtujFJd&index=19) + - [ ] [Greedy Algorithms: Minimum Spanning Tree (video)](https://www.youtube.com/watch?v=tKwnms5iRBU&index=16&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Strongly Connected Components Kosaraju's Algorithm Graph Algorithm (video)](https://www.youtube.com/watch?v=RpgcYiky7uw) + +- Khóa học đầy đủ về đồ thị trên Coursera: + - [ ] [Các thuật toán trên đồ thị (video)](https://www.coursera.org/learn/algorithms-on-graphs/home/welcome) + +- Yegge: Nếu bạn có cơ hội, hãy thử nghiên cứu các thuật toán đẹp hơn: + - [ ] Thuật toán tìm đường đi ngắn nhất của Dijkstra - xem phần trên - 6.006 + - [ ] A* + - [ ] [Thuật toán tìm kiếm A sao (A*)](https://en.wikipedia.org/wiki/A*_search_algorithm) + - [ ] [Hướng dẫn cài đặt thuật toán tìm đường đi A* - video](https://www.youtube.com/watch?v=KNXfSOx4eEE) + - [ ] [Thuật toán tìm đường A* (E01: giải thích thuật toán) - video](https://www.youtube.com/watch?v=-L-WgKMFuhE) + +- Tôi sẽ viết mã cài đặt: + - [ ] DFS với danh sách kề (đệ quy) + - [ ] DFS với danh sách kề (lặp với stack) + - [ ] DFS với ma trận kề (adjacency matrix) (đệ quy) + - [ ] DFS với ma trận kề (adjacency matrix) (lặp với stack) + - [ ] BFS với danh sách kề + - [ ] BFS với ma trận kề + - [ ] Đường đi ngắn nhất từ một nút đến các nút khác (single-source shortest path) (Dijkstra) + - [ ] Cây khung (spanning tree) nhỏ nhất + - Các thuật toán dựa trên DFS (xem lại các video của Aduni): + - [ ] tìm chu trình (đường đi mà trên đó tồn tại một nút được ghé qua ít nhất 2 lần) trong đồ thị (cần thiết cho sắp xếp topo (topological sort), vì tôi sẽ kiểm tra có chu trình không trước khi bắt đầu sắp xếp) + - [ ] Sắp xếp topo (topological sort) + - [ ] Đếm các thành phần liên thông trong một đồ thị + - [ ] Liệt kê các thành phần liên thông mạnh + - [ ] Kiểm tra tính song phương của đồ thị (Bipartite graph: dạng đồ thị mà tập định có thể chia thành 2 tập con không chứa phần tử chung, sao cho không có cặp 2 điểm nào trong cùng một tập hợp là kề nhau). + +Bạn sẽ biết thêm nhiều ứng dụng của đồ thị trong sách của Skiena (xem danh mục sách bên dưới) và các sách về phỏng vấn. + +> TODO Add anchors link for the "danh mục sách" > In progress