2012-04-14 21 views
0

これは非常に簡単な質問です。三角形の行列で作業し、C++の疎行列で作業するのはどのようなベストプラクティスですか?C++の三角形と疎行列

は三角行列のために私は、カスタムクラス内のデータ構造として

double* myMatrix; 
int dimension; 

ように簡単なデータ形式を示唆しています。 (私はそれが完全な形の正方行列であることを示唆しています)。そして、要素の設定とアクセスのためのメソッドがあります。

スパース行列の場合 - 行/列内の要素の位置とその値を保存するという2つの方法があります。これはあなたの経験のための質問です - 疎な行列の実装は最高のものになりますか?

P.S.より少ないメモリ、より少ないCPU使用量 - それは私の目標です、私は最も簡単なソリューションではなく、最良のソリューションを探しています。すべての行列は、線形方程式のシステムを解くために使用されます。そして、行列のサイズは膨大になります。

アドバイスをいただきありがとうございます。

+2

Eigenのようなサードパーティライブラリはどうですか? –

+1

あなたが専門家でないかぎり、既存のライブラリを使用してください。 Tim Davisのコードをお勧めします。 CSparse、UMFPACK。 –

+0

私の状況ではサードパーティのライブラリは解決策ではありません。たぶん、私はオープンソースのソリューションを探して、ライセンスが許す限りいくつかのパーツを使うことができますが、何らかの理由でexternモジュールをプロジェクトにdllやlibsとして追加することはできません。 –

答えて

1

行列の構造がわからない場合は、マップと基本的に同じです。 std::map<std::pair<int,int>,double>を使用できます。あなたが持っていれば、おそらくstd::unordered_mapです。

+0

ありがとう、試してみます。 –