隣接行列 (100k x 100k 以上) として表している大規模なスパース グラフがあり、エッジの配列として格納されています。(非スパース) 4 x 4 行列の例:
0 7
4 0
example_array = [ [7,1,2], [4,2,1] ]
たとえば、[4,1,2] は、ノード 1 からノード 2 への値/重み 4 の有向エッジがあることを示します。マトリックス用語では、これは本質的に [値、行、列] です。
また、この「エッジの配列」は最初の要素でソートされます。上記の例では、ソート後、配列は次のようになります。
example_array = [ [4,2,1], [7,1,2] ]
問題
特定の値 について、i
この並べ替えられた「エッジの配列」内のすべての要素を、2 番目の値が に等しいものとして検索する必要がありますi
。j
つまり、そのようなものを見つけますexample_array[j][1] = i
。
これの私の予備的な実装は、各要素の 2 番目の値を と比較して、配列内のすべての要素を単純に反復することi
です。これは、ループする要素がまだたくさん (たとえば 500k) ある可能性があるため、計算コストが高くなります。
質問
これを行うより効率的な方法はありますか?マトリックス/グラフの別の表現を使用してもかまいません。私はこれをCで書いています。
追加情報
これは本質的に、ノードのすべての隣接ノードi
とそれらのエッジの重みを見つけることです。i
つまり、エッジ リストから、別のノードへのすべての有向エッジを検索します。