发布于2012.11.26,作者Stoimen
引言
Strassen的矩阵相乘方法是一种典型的分治算法。目前为止,我们已经见过一些分治策略的算法了,例如归并排序和Karatsuba大数快速乘法。现在,让我再来看看分治策略的背后是什么。
同动态规划不同,在动态规划中,为了得到最终的解决方案,我们经常需要把一个大的问题“展开”为几个子问题,但是这里,我们会更多的谈到如何把一些子解决方案组合到一起。这些子问题的解决方案是对等的,他们的归并方式也是通过某种方式定义好的。
一个典型的例子就是归并排序算法。在归并排序中,我们有两个有序数组,我们想要这两个数组在合并之后仍然保持有序。当然了,在归并排序中,最复杂的部分当属自我合并,而原因在于,我们不得不传递两个数组,A和B,然后去比较每一“对”分别来自数组A和数组B的元素。有一点离题,但是,这是归并排序的一个弱点,虽然,它的最坏情况的时间复杂度是 O(n.log(n)),但是,快速排序却往往是实践中更为有效的排序方法,因为,它没有“合并”的过程。快速排序仅仅把两个子数组连接到一起,请注意,在快速排序中,子数组一般并不具有相同的长度,虽然他的最坏时间复杂度是O(n^2),但它的性能却经常好于归并排序。
在上文中,那个简单的例子告诉我们:有时候如何合并两个子问题并不是一个简单的事情。因此,当我们使用分治策略的时候,我们必须非常谨慎。
历史
Volker Strassen是一位出生于1936年的德国数学家。他因为在概率论上的工作而广为人知,但是在计