Giới thiệu
Graph là gì
Đồ thị (Graph) là tập hợp các đỉnh (Vertices) và cạnh (Edges), hay là tập hợp giữa các nút(Node) và mối quan hệ (Relationship) giữa các nút với nhau. Mối quan hệ có thể là một chiều hay hai chiều. Ví dụ: A và B có mối quan hệ "FRIEND" với nhau nhưng chỉ có A là "FOLLOW" B.
Cấu trúc dữ liệu
Có nhiều cách biểu diễn cấu trúc dữ liệu của Đồ thị như Danh sách cạnh, Danh sách kề, Ma trận kề, Ma trận liên thuộc.
Với Danh sách cạnh ta có thể biểu diễn dưới dạng list với mỗi phần tử là 1 Tuple(Node, Node, Relationship)
(A, B, Friend)
(B, A, Friend)
(A, B, Follow)
(C, A, Follow)
(C, B, Follow)
Trong khi đó với Ma trận Kề ta phải biểu diễn 2 ma trận khác nhau, mỗi ma trận có kích thước N x N với N là số Node và giá trị tại (X, Y) thể hiện 1 mối quan hệ từ X -> Y
FRIEND
X | A | B | C |
A | 0 | 1 | 0 |
B | 1 | 0 | 0 |
C | 0 | 0 | 0 |
FOLLOW
X | A | B | C |
A | 0 | 1 | 0 |
B | 0 | 0 | 0 |
C | 1 | 1 | 0 |
Có rất nhiều dạng đồ thị khác nhau, dưới đây là một số dạng
Ứng dụng của đồ thị
Khoa học xã hội
Như minh họa ở hình đầu tiên của bài viết, sự tương tác giữa người và người hình thành nên một mạng xã hội(social network). Facebook và Twitter là 2 mạng xã hội lớn mà chúng ta có thể hình dung được ứng dụng của đồ thị trong khoa học xã hội.
Ví dụ: Để tìm những người Nổi tiếng X trong mạng xã hội, chúng ta có thể thống kê số lượng Follow của X và đưa ra những người có số lượng Follow cao nhất. Nói theo cách toán học thì ta tìm bậc của đỉnh hay số lượng cạnh nối với đỉnh đó (X) và tìm ra những đỉnh có bậc cao nhất.
Trong diễn đàn, dựa vào những bình luận của người dùng ta có thể phân chia nhóm người dùng có cùng ý kiến với nhau.
Nghiên cứu sinh học
Các thành phần sinh học(protein, phân tử, gen) và các tương tác của chúng cũng tạo nên một đồ thị sinh học. Dựa vào đó người ta có thể tìm hiểu được quá trình trao đổi chất trong cơ thể, sự tương tác giữa các bộ phận khác nhau trên cơ thể.
Bài toán tìm đường đi
Websearch
Pagerank là thuật toán phân tích các liên kết được dùng trong Google Search để xếp hạng các trang web.
Tóm lại, Đồ thị hiện diện ở khắp mọi nơi miễn có Đối tượng(Node) và Các tương tác giữa các Đối tượng (Relationship) đều có thể tạo nên Đồ thị.
Graph Databases
Một hệ thống quản lý cơ sở dữ liệu đồ thị (graph database management system) là một hệ thống có thể Create, Read, Update và Delete (CRUD) . Graph Databases thường được xây dựng để áp dụng vào các hệ thống OLTP.
Có 2 đặc điểm mà chúng ta cần phải để ý khi nghiên cứu về Graph Database
- Cách thức lưu trữ cơ bản: Một số Graph Database sử dụng native graph storage (Neo4J)(hiểu nôm na là gồm đỉnh và cạnh) và một số Graph Database sử dụng cơ sở dữ liệu quan hệ (relational database) (FlockDB)và cơ sở dữ liệu đối tượng (object-oriented database)(Sones GraphDB).
- Processing Engine: sử dụng index-free adjacency.