Strassen矩阵乘法
问题描述
给出一个矩阵,求
。
核心思想
将矩阵进行分块之后再做乘法计算,令 ,
,
根据矩阵乘法的计算方法,可以得到
时间复杂度
设算法的执行次数,存在以下递推关系
主定理
如果一个分治算法的时间复杂度有以下形式的递推式
便可以通过比较a,b,d之间的大小关系来确定算法的时间复杂度
(1)如果,则算法时间复杂度为
;
(2)如果,则算法时间复杂度为
;
(3)如果,则算法的时间复杂度为
。
回到此题,显然使用主定理计算得到的算法时间复杂度为。
思考
如何优化
在现有的算法基础上,我们能否找到一个思路对于普通的矩阵乘法步骤进行优化。
考虑到在计算过程中,矩阵的乘法其实包括了8次乘法和4次加法,显然乘法的时间开销要大于加法,故我们是否可以通过进行更多的加法来代替现有的乘法次数,从而实现缩短算法的执行时间
时间复杂度
具体的优化步骤在这里就不做详细分析了,如果有兴趣的小伙伴可以自行查看。
经过优化后,一共将会进行18次加法运算和7次乘法运算,算法的递推式为
这样经过主定理计算后,得到算法此时的时间复杂度为
总结
通过这一种将时间消耗较高的运算步骤替换为几个时间消耗低的运算步骤,可以实现对于算法的优化,但是也不能盲目地进行转化,要找到两种运算步骤之间的平衡,才能更好更快地使用最优的算法解决问题。