2017-06-15 20 views
-1

この構造体を使用して2つのスパース行列を乗算することはできますか?もしあなたが私にヒントや正しい構造を教えてもらえますか?スパース行列乗算構造

typedef struct node{ 
    int column; 
    int value; 
    int row; 
    struct node *next; 
} element; 
+0

* * *適切な*データ構造*を使用して行うことができます。リンクされたリストを使用するような、データ構造の実際の実装の詳細は、ほとんど無関係です。 –

+0

これは多くのメモリ使用量です。私はあなたがダブルポインタの単一の変数を使用し、それらにアクセスすることをお勧めします。 'malloc'を使ったメモリ割り当て。 – tilz0R

+0

@ tilz0R - リンクリストを使用してメモリを節約することがアイデアです - それは疎行列のためです – 4386427

答えて

0

はい、リンクされた要素のリストを介して疎な行列を表現できるように思われます。各要素は、マトリックスセルに対応し、そのセルの値を持ちます。

実際の乗算では、要素の掛け算や加算のためのリストの検索が必要になることはもちろんありません。

私は確かに乗算の実装をより効率的にする他の高度なデータ構造があると確信しています。

改良このデータ構造が含まれる場合があります:

  • は、検索時にいくつかの最適化を可能にするために、行及び/または列でソート要素を維持します。
  • トップレベルのMatrix構造体を追加すると意味があります。たとえば、行列の全体的な大きさを保持することができます(乗算するときにサイズの互換性をすばやく確認できます)。