C程序:如何优化矩阵幂运算
最近写了个C程序来计算矩阵的幂,代码如下:
/* 矩阵幂运算,例如
1 2 1 0
3 4 ^ 0 => 0 1
1 2 1 2
3 4 ^ 1 => 3 4
1 2 199 290
3 4 ^ 4 => 435 634
*/
uint32_t* matrix_pow(const uint32_t* matrix, uint32_t exponent) {
uint32_t* result = new_matrix();
if (exponent == 0){
result = identity_matrix();
} else{
result = cloned(matrix);
for (int c = 1; c < exponent; c++){
result = matrix_mul(result, matrix);
}
}
return result;
}
其中, exponent
是幂次,cloned()
方法是复制矩阵,identity_matrix()
返回一个单位矩阵,matrix_mul()
用来计算两个计算的乘积。
不知有哪些优化的方法(可以完全改写上面的程序),可以使上面的函数效率更高,可以使用多线程,分治等。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
主要还是优化时间复杂度吧,主要是使用快速幂
这样只要进行
log(exponent)
次矩阵乘法即可;另外不知道你的matrix_mul是怎么实现的,如果一般方法是
O(n^3)
的,改用Strassen算法则仅需O(n^2.81)
复杂度即可;进行如上改进之后,再考虑通用的优化方法,对于矩阵乘法常用的是SIMD指令集优化,矩阵乘法部分可以嵌入汇编优化
SIMD...
属于指令上的优化了...
你在哪个平台上运行,arm还是ia?