会员
周边
众包
新闻
博问
闪存
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
Powerlc的BLog
.net程序
博客园
首页
新随笔
新文章
联系
管理
订阅
算法 ZZ
★稀疏矩阵的快速转置算法:
template
<
class
T
>
SpreMatrix
<
T
>
::FastTranspos( )
{
int
*
rowSize
=
new
int
[Cols];
//
建立辅助数组,记录原数组每列(即新数组每行)的元素个数
int
*
rowStart
=
new
int
[Cols];
//
建立辅助数组,记录新数组非零元素在三元组表中的位置
SpreMatrix
<
T
>
b(Cols,Rows);
b.Rows
=
Cols; b. Cols
=
Rows; b.Terms
=
Terms;
if
(Terms
>
0
)
{
for
(
int
i
=
0
;i
<
Cols; i
++
) rowSize[i]
=
0
;
for
(
int
i
=
0
;i
<
Terms; i
++
) rowSize[smArray[i].col]
++
;
//
smArray[i]为原数组三元组表数组
rowStart[
0
]
=
0
;
//
求出非零元素(每行第一个)在新数组三元组表中的位置
for
(
int
i
=
1
; i
<
Cols; i
++
)
rowStart[i]
=
rowStart[i
-
1
]
+
rowSize[i
-
1
];
for
(
int
i
=
0
;i
<
Terms; i
++
)
//
填写三元组表
{
int
j
=
rowStart[smArray[i].col];
b.smArrary[j].row
=
smArrary[i].col;
b. smArrary[j].col
=
smArrary[i].row;
b. smArrary[j].value
=
smArrary[i].value;
rowStart[smArrary[i].col]
++
;
//
同行(新数组中)的下一个元素位置
}
}
delete[] rowSize; delete[] rowStart;
return
b;
}
posted on
2005-08-26 21:56
powerlc
阅读(
418
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告