JavaScript中的加权有向图表示

时间:2019-10-27 04:43:38

标签: typescript directed-graph weighted-graph

用javascript表示加权有向图的最佳方法是什么(对于基本操作dfs,bfs等)?我尝试了几种方法,想知道是否还有更多共识。

我的第一种方法是将每个键映射到一组连接。其中连接具有“其他”键和代表重量的值。

interface Connection {
  key: string;
  value: number;
}

export default class Graph {
  size: number = 0;
  adj: Map<string, Array<Connection>> = new Map();

  constructor(size: number) {
    this.size = size;
  }

另一种方法可以使连接存储这样的from到and权重。我认为这有点多余,因为键是from键:

interface Connection {
   from: string;
   to: string;
   weight: number;
}
export default class Graph {
      size: number = 0;
      adj: Map<string, Array<Connection>> = new Map();

      constructor(size: number) {
        this.size = size;
      }

最后,我想我可以用地图设置像这样的东西:

interface Metadata {
  weight: number;
  metadata2: string;
  ...
}

export default class Graph {
  size: number = 0;
  adj: Map<string, Map<string, Metadata>> = new Map();
  constructor(size: number) {
    this.size = size;
  }

我的目标实际上是创建一些灵活的东西,以便可以对其执行不同的图形操作和算法。将两个映射与元数据一起使用而不是使用连接的想法有什么不利之处吗?我只是想听听别人的意见,而不是我自己的意见。我已经能够成功地使用连接的思想来实现我尝试过的所有内容,但是最近想到了将两个级别的映射用于to和from节点。有任何不利之处吗?有人有更好的方法吗?没有元数据,我能够轻松地表示边缘,但是加上权重后,我很好奇人们如何用js表示边缘。

0 个答案:

没有答案