Trong lý thuyết đồ thị, việc tổ chức dữ liệu cho từng bài toán, thuật toán rất quan trọng, nó quyết định kích thước dữ liệu bài toán, thời gian thực tế của bài toán. Vì vậy trong bài viết này mình sẽ giới thiệu các bạn một số cách tổ chức dữ liệu trong […]
Archives
Đây là Series học Lý thuyết đồ thi căn bản bằng c++ và pascal
Bài 2: Danh sách cạnh C++ Lý thuyết đồ thị
Danh sách cạnh trong lý thuyết đồ thị là một cách tổ chức dữ liệu thường được dùng trong thuật toán tìm cây khung nhỏ nhất Kruskal, nó giúp bạn tiết kiệm chi phí lưu trữ và chi phí duyệt với đồ thị thưa. 1. Tổng quan về danh sách cạnh trong lý thuyết đồ […]
Bài 3: Danh sách kề C++ Lý thuyết đồ thị
Để khắc phục yếu điểm của danh sách cạnh về việc tìm đỉnh kề, mà vẫn đảm bảo tổ chức dữ liệu tối ưu nhất phục vụ duyệt tìm trong đồ thị mà Danh sách kề được ra đời. 1. Ý tưởng danh sách kề a. Ý tưởng a.1 Tổ chức bằng mảng Tổ chức […]
Bài 4: Thuật toán tìm kiếm theo chiều sâu DFS pascal c++
Thuật toán tìm kiếm theo chiều sâu DFS là thuật toán tìm kiếm trên cây hoặc đồ thị. Thuật toán này khác với BFS ở chỗ BFS duyệt theo chiều rộng (những đỉnh gần đỉnh gốc sẽ được thăm trước), còn DFS duyệt theo chiều sâu (Xuất phát từ đỉnh gốc, từ đỉnh đó phát […]
Bài 5: Thuật toán tìm kiếm theo chiều rộng BFS pascal c++
Thuật toán tìm kiếm theo chiều rộng BFS là thuật toán tìm kiếm trong đồ thị bằng cách tìm kiếm dựa trên 2 thao tác chính là: cho trước một đỉnh của đồ thị và thêm các đỉnh kề với nó vào danh sách chờ duyệt. Phương pháp cài đặt này là “lập lịch” để […]
Bài 6: Thuật toán loang trên ma trận
Thuật toán loang (Thuật toán vết dầu loang) là một trong những thuật toán được dùng khá nhiều trong tin học, điển hình là thuật toán loang trên ma trận này được ứng dụng để đếm số thành phần liên thông trên ma trận. Nó trong các trò chơi nổi tiếng như line 98, trò […]
Cấu trúc dữ liệu Disjoint Sets
Nguồn đề bài: http://www.spoj.com/KSTN/problems/DS2509/ 1. Đề bài Cấu trúc dữ liệu Disjoint Sets Disjoint-set hiểu 1 cách đơn giản là 1 cách lưu trữ các tập hợp phần tử của 1 tập lớn cho trước. Các phép toán thường được quan tâm tới trong disjoint-set là: MakeSet(i): tạo ra 1 tập chỉ có i. FindSet(i): tìm tập […]