javascript - 将邻接列表转换为无向图链接的高性能方法

标签 javascript data-structures graph

我有一个如下所示的邻接列表:

const list = [
 [1, 6, 8],
 [0, 4, 6, 9],
 [4, 6],
 [4, 5, 8],
 // ...
];

我需要为无重复的无向图创建一组链接(示例如下)。 [0,1][1,0] 等链接被视为重复。

const links = [
 [ 0, 1 ], // duplicates
 [ 0, 6 ],
 [ 0, 8 ],
 [ 1, 0 ], // duplicates
 [ 1, 4 ],
 // ...
]

现在我这样做:

const links = new Set;
const skip = [];

list.forEach( (v, i) => {
    v.forEach( j => {
        if (skip.indexOf(j) === -1) {
            links.add([i, j]);
        }
    })
    skip.push(i);
})

我想知道是否有更好的模式来解决大规模数组上的此类任务。

最佳答案

您可以对链接元组值进行排序,跳过检查 skip.indexOf(j) 并让 Set 处理重复项。

关于javascript - 将邻接列表转换为无向图链接的高性能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093472/

相关文章:

c - 链表问题 - 循环迭代错误的节点

javascript - D3 折线图 : Setting Y. 以特定数字为中心的域值

javascript - Google Maps API - 获取属性(property)边界数据

javascript - 使用 javascript 或 jQuery 激活加载时的复选框

javascript - 我的播放列表插件无法在 videojs 上运行?

algorithm - 具有任何源的最短路径的图遍历

javascript - 具有奇数个顶点的 D3.js 树,未显示边

javascript - 基本的类似 JSON 的对象结构?

arrays - 通过连接两个递增子数组构成的最大长度递增 super 数组

java - 是否可以仅更改已为 java 内置的数据结构的一种方法?