巨大な隣接行列 AJM で表される、巨大な加重無向グラフを生成したいと考えています。したがって、i と j のループでは、
AJM[i][j] = AJM[j][i]
AJM[i][i] = 0
重みは、[0.01, 10.00] など、間隔内のランダムな倍精度数として生成されます。10k の頂点がある場合、行列は 10k x 10k の double タイプのエントリになり、これを保存するとメモリ内に巨大なチャンクになります。
ここで、必要な数のエッジにしきい値 E を設定し、しきい値 T より大きい重みを持つすべてのエッジを無視します (T は E によって決定され、E はユーザー定義です)。後で使用するためのベクトル内の T。これを効率的に達成する方法を教えてください。隣接行列全体のいかなる種類の保存も避け、ストリーミング構造を使用するのが最善です。それで、どのようにマトリックスを生成し、しきい値処理を行うべきか疑問に思っていますか?
ファイルの書き込みと読み取りが必要だと思いますよね?
1 つのアプローチは、ファイルを操作した後、しきい値 E を設定し、次のことを行うことです。
マトリックスから要素を 1 つずつ読み取り、マトリックス全体を読み取らないようにし (これを実現するための C++ コードの行をいくつか示してもらえますか?)、その重みを最小ヒープに挿入し、対応するエッジ インデックスを格納します。ベクトルで。ヒープのサイズが E に達したときに停止し、エッジ インデックスのベクトルが必要なものになります。
それを行う正しい方法だと思いますか?他の提案はありますか?Pls は、ここにある可能性のあるエラーを指摘します。どうもありがとう!