重み付き有向グラフのエッジを表すトライアド(vertex1、vertex2、weight)のリストがあります。プロトタイプの実装は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
トリブルの問題は、「id1」と「id2」が連続していないことです。それらはコードです。これは私に3つの問題を与えます。(1)「ファントム」のスプリアス頂点が多すぎる巨大な行列。これにより、その行列で使用するアルゴリズムの結果が歪められます。(2)上記のアルゴリズムの結果でコードを復元する必要があります(これは、連続する1:mのIDコードの場合は些細なことです)。
Matlabでの回答が望ましいですが、他の言語での回答からハックバックできると思います(「Rにはこれを行うライブラリがあります」という種類の事前にパッケージ化されたソリューションでない限り)。
StackOverflowは初めてですが、コミュニティに有意義な貢献をしたいと思っています。とりあえず、よろしくお願いします!
編集:複数の頂点の原点に頂点がない場合、これは解決策になります。(これは、エッジの原点のリストとIDのリストが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