返回
基础数据结构(六):图结构 Graph(TS版)
前端
2023-10-29 07:50:05
开启掘金成长之路!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情。
前言
图结构是计算机科学中一种重要的数据结构,广泛应用于各种领域,如社交网络、交通网络、知识图谱等。本文将从 TypeScript 的角度出发,深入探索图结构的原理、实现和应用。
图是由一系列节点(vertex)和边(edge)组成的。节点表示图中的元素,边表示节点之间的关系或连接。图可以用邻接表或邻接矩阵来表示。
- 邻接表: 使用哈希表或数组来存储每个节点及其相邻节点。
- 邻接矩阵: 使用二维数组来表示图中的节点关系,其中元素表示节点之间的边权重或距离。
TypeScript 中的图结构实现
在 TypeScript 中,我们可以使用邻接表来实现图结构:
class Graph {
private adj: Map<number, number[]>;
constructor() {
this.adj = new Map();
}
addVertex(vertex: number) {
if (!this.adj.has(vertex)) {
this.adj.set(vertex, []);
}
}
addEdge(vertex1: number, vertex2: number) {
if (!this.adj.has(vertex1)) {
this.addVertex(vertex1);
}
if (!this.adj.has(vertex2)) {
this.addVertex(vertex2);
}
this.adj.get(vertex1)?.push(vertex2);
this.adj.get(vertex2)?.push(vertex1);
}
getVertices(): number[] {
return Array.from(this.adj.keys());
}
getEdges(): number[][] {
return Array.from(this.adj.values());
}
}
图结构的应用
图结构在现实世界中有广泛的应用,包括:
- 社交网络: 表示用户之间的关系,如关注、好友关系。
- 交通网络: 表示城市或道路之间的连接,如公路、铁路。
- 知识图谱: 表示概念之间的关系,如实体、属性和类别。
- 最短路径算法: 寻找图中两点之间的最短路径,如 Dijkstra 算法和 A* 算法。
- 拓扑排序: 对图中的节点进行排序,使其没有循环依赖,如 Kahn 算法。
总结
图结构是一种强大的数据结构,它可以表示复杂的关系和网络。通过 TypeScript 的实现,我们可以轻松创建和操作图结构,从而解决各种现实世界中的问题。掌握图结构的原理和应用,将为你的算法和数据结构技能增添重要的一笔。