返回

基础数据结构(六):图结构 Graph(TS版)

前端

开启掘金成长之路!这是我参与「掘金日新计划 · 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 的实现,我们可以轻松创建和操作图结构,从而解决各种现实世界中的问题。掌握图结构的原理和应用,将为你的算法和数据结构技能增添重要的一笔。

附录:参考资料