まばらな行列の3元のグループの表現と回転
18430 ワード
まばらな行列の3元のグループの表現と回転三元は を表しています.回転 -順番保持 -順番に取って直接に を保存します.
三元グループは
データ構造三元グループタイプ 三元組順表のタイプ 三元群は、疎行列の作成 である.三元グループの出力
-順次保存
直接三元グループの中にマトリックスの中に一列もないことを見つけて、三元グループの中に入れ直します.
転置の法則は補助データ構造として2つの配列を導入することが分かった.num[nu]:行列Aのある列の非ゼロ要素の個数を表す.cpot[nu]:初期値はマトリクスAのある列の最初の非ゼロ要素がBにある位置を表します.numとcpotのデリバリー関係: cpot[0]=0; cpot[col]=cpot[col-1]+num[col-1]1≦col<nu は、転置後のマトリクスBの行数、列数、および非ゼロ要素の個数を設定する. は、Aの各列の非ゼロ要素の個数を計算する. は、Aの各列の最初の非ゼロ要素のBにおける下付きを計算する. は、Aの各非ゼロ要素に対応する3つのタプルを順次取得する.2.1この元素のBにおける下付きpbを決定する.2.2この要素の行番号列番号を交換してBのpbの位置に預け入れる.2.3当該元素のある列の次の要素の保管場所を事前に置く.
三元グループは
データ構造
typedef struct
{
int r;//
int c;//
int d;//
}TupNode;//
typedef struct
{
int rows;//
int cols;//
int nums;//
TupNode data[Maxsize];
}TSMatrix;//
#include
#define Maxsize 100
#define N 5
#define M 5
void Create(TSMatrix &t,int A[N][M])//
{
t.rows=N;//
t.cols=M;
t.nums=0;//
for(int i=0;i<N;i++)//
{
for(int j=0;j<M;j++)
if(A[i][j]!=0)// 0
{
num[j+1]++; // num
t.data[t.nums].r=i;//
t.data[t.nums].c=j;
t.data[t.nums].d=A[i][j];
t.nums++;
}
}
}
void Disp(TSMatrix t)//
{
if(t.nums<=0)
return;
for(int i=0;i<t.nums;i++)
printf("\t%d\t%d\t%d
",t.data[i].r+1,t.data[i].c+1,t.data[i].d);
}
入れ替える?入れ換える-順次保存
直接三元グループの中にマトリックスの中に一列もないことを見つけて、三元グループの中に入れ直します.
void TranMat(TSMatrix ta,TSMatrix &tb)//
{
int q=0;
tb.rows=ta.rows;
tb.cols=ta.cols;
tb.nums=ta.nums;
if(ta.nums!=0)
{
for(int i=0;i<ta.cols;i++)//
for(int j=0;j<ta.nums;j++)//
if(ta.data[j].c==i)
{
tb.data[q].r=ta.data[j].c;
tb.data[q].c=ta.data[j].r;
tb.data[q].d=ta.data[j].d;
q++;
}
}
}
-直接保存する順番を取ります.転置の法則は補助データ構造として2つの配列を導入することが分かった.num[nu]:行列Aのある列の非ゼロ要素の個数を表す.cpot[nu]:初期値はマトリクスAのある列の最初の非ゼロ要素がBにある位置を表します.numとcpotのデリバリー関係:
int cp()// cpot
{
cpot[0]=0;
int i;
for(i=1;i<Maxsize;i++)
{
cpot[i]=cpot[i-1]+num[i];
}
return i;
}
void TranMat2(TSMatrix ta,TSMatrix &tb)//
{
tb.rows=ta.rows;
tb.cols=ta.cols;
tb.nums=ta.nums;
int a=cp();
for(int i=0;i<ta.nums;i++)
{
int pb=ta.data[i].c;
tb.data[cpot[pb]].r=ta.data[i].c;
tb.data[cpot[pb]].c=ta.data[i].r;
tb.data[cpot[pb]].d=ta.data[i].d;
cpot[pb]++;//
// ,2.3 ;
}
}
** **