在浩瀚的计算机世界里,图与我们的现实生活紧密交织
2023-09-04 10:24:56
在浩瀚的计算机世界里,有一种数据结构,它与我们的现实生活息息相关。它就是——图(Graph)。
图是一种由一系列顶点(Vertex)和连接这些顶点的边(Edge)组成的非线性数据结构。每个顶点都代表一个实体,而边则代表实体之间的关系。图广泛应用于各种领域,例如社交网络、交通网络、地图导航等。
1. 图的存储方式
图的存储方式主要分为两种:邻接矩阵和邻接表。
邻接矩阵
邻接矩阵是一种将图中的信息存储在二维数组中的方式。二维数组的行列数与图中的顶点数相同,数组中的每个元素表示两个顶点之间的权重或关系。邻接矩阵的优点是查询效率高,但缺点是占用空间较大。
// 创建一个邻接矩阵
const adjacencyMatrix = new Array(numVertices).fill(0);
// 在邻接矩阵中添加边
for (let i = 0; i < numVertices; i++) {
for (let j = 0; j < numVertices; j++) {
if (graph[i][j] > 0) {
adjacencyMatrix[i][j] = graph[i][j];
}
}
}
邻接表
邻接表是一种将图中的信息存储在数组中的方式。数组中的每个元素是一个顶点,每个顶点都有一个指向下一个顶点的指针。邻接表的优点是占用空间较小,但缺点是查询效率不如邻接矩阵高。
// 创建一个邻接表
const adjacencyList = new Array(numVertices);
// 在邻接表中添加边
for (let i = 0; i < numVertices; i++) {
for (let j = 0; j < numVertices; j++) {
if (graph[i][j] > 0) {
adjacencyList[i].push(j);
}
}
}
2. 图的遍历算法
图的遍历算法是指系统地访问图中的所有顶点和边。常用的图的遍历算法包括深度优先搜索(DFS)和广度优先搜索(BFS)。
深度优先搜索(DFS)
深度优先搜索是一种从一个顶点出发,沿着一条边走到下一个顶点,再沿着另一条边走到下下一个顶点,依此类推,直到遍历完所有的顶点。DFS的优点是能够快速找到图中的环,但缺点是可能无法找到图中的所有路径。
// 深度优先搜索
function DFS(graph, startVertex) {
const visited = new Array(graph.length).fill(false);
const stack = [startVertex];
while (stack.length > 0) {
const currentVertex = stack.pop();
if (!visited[currentVertex]) {
visited[currentVertex] = true;
console.log(currentVertex);
for (let i = 0; i < graph[currentVertex].length; i++) {
if (!visited[graph[currentVertex][i]]) {
stack.push(graph[currentVertex][i]);
}
}
}
}
}
广度优先搜索(BFS)
广度优先搜索是一种从一个顶点出发,沿着所有的边走到与该顶点相邻的所有顶点,再沿着这些顶点的边走到与它们相邻的所有顶点,依此类推,直到遍历完所有的顶点。BFS的优点是能够找到图中的所有路径,但缺点是可能需要更多的时间。
// 广度优先搜索
function BFS(graph, startVertex) {
const visited = new Array(graph.length).fill(false);
const queue = [startVertex];
while (queue.length > 0) {
const currentVertex = queue.shift();
if (!visited[currentVertex]) {
visited[currentVertex] = true;
console.log(currentVertex);
for (let i = 0; i < graph[currentVertex].length; i++) {
if (!visited[graph[currentVertex][i]]) {
queue.push(graph[currentVertex][i]);
}
}
}
}
}
3. 图的应用
图在计算机科学中有着广泛的应用,例如:
社交网络
社交网络中的用户可以看作是图中的顶点,用户之间的关系可以看作是图中的边。社交网络可以利用图来进行好友推荐、信息传播等。
交通网络
交通网络中的城市可以看作是图中的顶点,城市之间的道路可以看作是图中的边。交通网络可以利用图来进行路径规划、交通拥堵预测等。
地图导航
地图导航中的城市、道路、景点等都可以看作是图中的顶点,城市、道路、景点之间的关系