c语言对称矩阵的压缩存储_【数据结构】对称矩阵及对称矩阵的压缩存储
對稱矩陣:
設一個N*N的方陣A,A中任意元素Aij,當且僅當Aij == Aji(0 <= i <= N-1 &&?0 <= j <= N-1),則矩陣A是對稱矩陣。以矩陣的對角線為分隔,分為上三角和下三角。
如下面矩陣:
對稱矩陣壓縮存儲時只需要存儲i*(i+1)/2個數據。
對稱矩陣與壓縮矩陣的關系是:
對稱矩陣SymmetricMatrix[i][j] =壓縮矩陣Array(i*(i+1)/2+j)。
下面我實現一下對稱矩陣存儲在壓縮矩陣以及將壓縮矩陣中的元素還原成對稱矩陣打印出來的代碼。
代碼如下:#include
using?namespace?std;
template
class?SymmtrixMatrix
{
public:
SymmtrixMatrix(T*?a,?size_t?size)
:_a(new?T[size*(size+1)/2])
,?_size(size*(size?+?1)?/?2)
{
for?(int?i?=?0;?i?
{
for?(int?j?=?0;?j?
{
if?(i?>=?j)
{
//將對稱矩陣轉換為壓縮矩陣
_a[i*(i?+?1)?/?2+j]?=?a[i*size+j];
}
}
}
}
//壓縮矩陣的訪問打印
void?Print(size_t?size)
{
for?(int?i?=?0;?i?
{
for?(int?j?=?0;?j?
{
int?row?=?i;
int?col?=?j;
if?(row?
{
swap(row,?col);
}
cout?<
}
cout?<
}
cout?<
}
private:
T*?_a;
size_t?_size;????//即n,對稱矩陣為方陣
};
void?Test()
{
int?a[5][5]?=?{
{?0,?1,?2,?3,?4?},
{?1,?0,?1,?2,?3?},
{?2,?1,?0,?1,?2?},
{?3,?2,?1,?0,?1?},
{?4,?3,?2,?1,?0?},
};
SymmtrixMatrix?sm((int*)a,?5);
sm.Print(5);
}
int?main()
{
Test();
system("pause");
return?0;
}
總結
以上是生活随笔為你收集整理的c语言对称矩阵的压缩存储_【数据结构】对称矩阵及对称矩阵的压缩存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java数据传递给安卓_Android数
- 下一篇: java出现errors是什么错误_ja