我有一个表示加权有向图边缘的三元组(顶点1、顶点2、权重)列表。由于原型实现是在 Matlab 中进行的,因此这些被导入为 Nx3 矩阵,其中 N 是边数。所以这个天真的实现是
id1 = L(:,1);
id2 = L(:,2);
weight = L(:,3);
m = max(max(id1, id2)) % to find the necessary size
V = zeros(m,m)
for i=1:m
V(id1(i),id2(i)) = weight(i)
end
tribbles 的问题是“id1”和“id2”是不连续的;它们是代码。这给了我三个问题。(1) 具有太多“幻像”、虚假顶点的巨大矩阵,这会扭曲与该矩阵一起使用的算法的结果;(2) 我需要恢复所述算法结果中的代码(可以这么说如果连续 1:m 的 id 代码是微不足道的)。
Matlab 中的答案是可取的,但我认为我可以从其他语言的答案中破解(只要它们不是“R 具有执行此操作的库”之类的预打包解决方案)。
我是 StackOverflow 的新手,我希望尽快为社区做出有意义的贡献。暂时先谢谢了!
编辑:如果我们在多个顶点的原点没有顶点,这将是一个解决方案。(这意味着边源列表和身份列表之间存在 1:1 匹配)
for i=1:n
for j=1:n
if id1(i) >0 & i2(j) > 0
V(i,j) = weight(i);
end
end
end