Data Structure of Graphs: Understanding Vertices, Edges, and Adjacency Lists, Schemes and Mind Maps of Data Structures and Algorithms

An introduction to the data structure of graphs, focusing on vertices, edges, and adjacency lists. Graphs are a way to represent connections between objects, with vertices representing nodes and edges representing links. the basics of vertices and edges, as well as the two common ways to represent graph structures: adjacency matrices and adjacency lists. Real-world applications of graphs include computer science, social networks, and web page ranking.

Typology: Schemes and Mind Maps

2021/2022

Uploaded on 10/27/2022

viet-nguyen-djinh
viet-nguyen-djinh 🇻🇳

4 documents

1 / 6

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1. Cấu trúc dữ liệu đồ thị
Một đồ thị là một dạng biểu diễn hình ảnh của một tập các đối tượng, trong đó các cặp đối
tượng được kết nối bởi các link.
Các đối tượng được nối liền nhau được biểu diễn bởi các điểm được gọi các đỉnh
(vertices), và các link mà kết nối các đỉnh với nhau được gọi là các cạnh (edges).
Nói chung, một đồ thị là một cặp các tập hợp (V, E), trong đó V là tập các đỉnh và E là tập
các cạnh mà kết nối các cặp điểm. Bạn theo dõi đồ thị sau:
Trong đồ thị trên:
V = {a, b, c, d, e}
E = {ab, ac, bd, cd, de}
2. 1 số khái niệm cơ bản
2.1 Đỉnh (Vertex)
pf3
pf4
pf5

Partial preview of the text

Download Data Structure of Graphs: Understanding Vertices, Edges, and Adjacency Lists and more Schemes and Mind Maps Data Structures and Algorithms in PDF only on Docsity!

1. Cấu trúc dữ liệu đồ thị

Một đồ thị là một dạng biểu diễn hình ảnh của một tập các đối tượng, trong đó các cặp đối

tượng được kết nối bởi các link.

Các đối tượng được nối liền nhau được biểu diễn bởi các điểm được gọi là các đỉnh

(vertices), và các link mà kết nối các đỉnh với nhau được gọi là các cạnh (edges).

Nói chung, một đồ thị là một cặp các tập hợp (V, E), trong đó V là tập các đỉnh và E là tập

các cạnh mà kết nối các cặp điểm. Bạn theo dõi đồ thị sau:

Trong đồ thị trên:

V = {a, b, c, d, e}

E = {ab, ac, bd, cd, de}

2. 1 số khái niệm cơ bản

2.1 Đỉnh (Vertex)

Mỗi nút của hình được biểu diễn như là một đỉnh. Trong trên các hình tròn biểu diễn các

đỉnh. Do đó, các điểm từ A tới G là các đỉnh.

Chúng ta có thể biểu diễn các đỉnh này bởi sử dụng một mảng, trong đó đỉnh A có thể được

nhận diện bởi chỉ mục 0, điểm B là chỉ mục 1

2.2 Cạnh (Edge)

Cạnh biểu diễn một đường nối hai đỉnh. Trong hình dưới, các đường nối A và B, B và C, …

là các cạnh.

Chúng ta có thể sử dụng một mảng hai chiều để biểu diễn các cạnh này.

Trong hình trên, AB có thể được biểu diễn như là 1 tại hàng 0; BC là 1 tại hàng 1, cột 2, …

2.3 Kề nhau

Hai đỉnh là kề nhau nếu chúng được kết nối với nhau thông qua một cạnh. Trong hình trên, B

là kề với A; C là kề với B, …

2.4 Đường

Đường biểu diễn một dãy các cạnh giữa hai đỉnh. Trong hình trên, ABCD biểu diễn một

đường từ A tới D.

3. Các cách biểu diễn cấu trúc dữ liệu đồ thị

Đồ thị thường được biểu diễn theo hai cách:

3.1. Ma trận liền kề hay ma trận kề

Ma trận kề là một mảng 2 chiều gồm các đỉnh VxV. Mỗi hàng và cột đại diện cho một đỉnh.

Nếu giá trị của bất kỳ phần tử nào a[i][j] là 1, nó biểu thị rằng có một cạnh nối đỉnh i và đỉnh

j.

Ma trận kề cho biểu đồ chúng ta đã tạo ở trên như sau.

Danh sách kề có tính hiệu quả về mặt lưu trữ vì chúng ta chỉ cần lưu trữ các giá trị cho các

cạnh. Đối với một biểu đồ có hàng triệu đỉnh, điều này có nghĩa là rất nhiều không gian được

tiết kiệm.

4. Ứng dụng của đồ thị

 Trong khoa học máy tính, đồ thị được sử dụng để biểu diễn luồng tính toán.

 Bản đồ của Google sử dụng đồ thị để xây dựng hệ thống giao thông, trong đó giao điểm

của hai (hoặc nhiều) đường được coi là một đỉnh và đường nối hai đỉnh được coi là một

cạnh, do đó hệ thống điều hướng của chúng dựa trên thuật toán để tính toán ngắn nhất

đường đi giữa hai đỉnh.

 Trong mạng xã hội Facebook, người dùng được coi là đỉnh và nếu họ là bạn bè thì sẽ có

một cạnh chạy giữa họ. Thuật toán đề xuất bạn bè của Facebook sử dụng lý thuyết đồ thị.

Facebook là một ví dụ về đồ thị vô hướng.

 Các trang Web được coi là các đỉnh. Có một cạnh từ trang u sang trang khác v nếu có

một liên kết của trang v trên trang u. Đây là một ví dụ về đồ thị có hướng. Đó là ý tưởng

cơ bản đằng sau thuật toán xếp hạng trang của Google.

 Trong hệ điều hành, chúng ta bắt gặp đồ thị phân bổ tài nguyên, mà trong đó, mỗi tiến

trình và tài nguyên được coi là các đỉnh. Các cạnh được rút ra từ các tài nguyên tới tiến

trình được cấp phát hoặc từ tiến trình yêu cầu đến tài nguyên được yêu cầu. Nếu điều này

dẫn đến sự hình thành của một chu trình thì sẽ xảy ra bế tắc.

Ví dụ

Class Edge

package graph; class Edge { int src, dest, weight; Edge(int src, int dest, int weight) { this.src = src; this.dest = dest; this.weight = weight; } }

Class Graph

package graph; import java.util.ArrayList; import java.util.List; class Graph { // node of adjacency list static class Node { int value, weight; Node(int value, int weight) { this.value = value; this.weight = weight; } }; // define adjacency list List<List> adj_list = new ArrayList<>(); //Graph Constructor public Graph(List edges) { // adjacency list memory allocation for (int i = 0 ; i < edges.size(); i++) adj_list.add(i, new ArrayList<>()); // add edges to the graph for (Edge e : edges) { // allocate new node in adjacency List from src to dest adj_list.get(e.src).add(new Node(e.dest, e.weight)); } } // print adjacency list for the graph public static void printGraph(Graph graph) { int src_vertex = 0 ; int list_size = graph.adj_list.size(); System. out .println("The contents of the graph:"); while (src_vertex < list_size) { //traverse through the adjacency list and print the edges for (Node edge : graph.adj_list.get(src_vertex)) { System. out .print("Vertex:" + src_vertex + " ==> " + edge.value

" (" + edge.weight + ")\t"); } System. out .println(); src_vertex++; } } }

Class Main