算法基础期末考点总结四——矩阵乘法时间复杂度

这只是一个科普性质的部分,矩阵乘法老师没有细讲,就介绍了一下原理和时间复杂度为多少。
这里一个需要了解的概念就是分治法,其包括三个步骤:
在这里插入图片描述
这也是后面递归式的由来,子问题的时间复杂度和合并问题的时间复杂度构成了递推式(分解问题所需时间一般都是O(1))。

额外介绍一个例子:求最大子数组问题。
这个问题的应用一般是股票的买进卖出分别在什么时候最好(有点马后炮),书上为了贴合分治法的主题,设计了一种算法:将整个数组分成两块,最大子数组要么在左边,要么在右边,要么跨越两边。
在这里插入图片描述
在这里插入图片描述
这是求跨越两边的最大子数组。
在这里插入图片描述
这是算法主体。
当时我写这个算法的时候,用的是结构体来存返回值,如果用全局变量不知道行不行。

课后习题延申了一种做法
在这里插入图片描述
关于这个题目,网上有很多种理解,在我看来很多都是错误的理解,这个题目本身也有点问题,A[1,…j]的最大子数组也不一定是以A[j]结尾的,所以要算形如A[i, … ,j+1]的最大子数组,不得不让i从1遍历到j+1,时间不可能是线性的,所以我认为的最符合题意的方法是利用后面动态规划,设计一个数组s,s[i]代表以i为结尾的最大子数组,那么s[i+1]要么是A[i+1],要么是s[i]+A[i+1],这样才算是线性时间。

老师课上也说了一种方案,最简单的,线性时间。
在这里插入图片描述
从左端开始,扫描一遍过去,遇到和比当前最大和大的,就更新。如果和为负的,就从下一个元素开始,继续扫描,十分巧妙。

然后说了这么多,和矩阵乘法没什么关系的东西,还是回到正题。
线性代数里面,两个nxn的矩阵做乘法,要做n ^ 3 次乘法,对应到算法,时间复杂度当然也是n ^ 3啦。那么还能不能改进呢?利用nxn矩阵加法只需要O(n^2)的时间这一点,可以改进。
首先
在这里插入图片描述
他们满足:
在这里插入图片描述
所以我们实际上求的就是:
在这里插入图片描述
书上也中肯的说,strassen算法说得很不充分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们大概了解以下原理就行,知道它的时间复杂度从O(n^3)改进到O(n ^ lg7)就行了。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值