一、归并分类
插入分类算法在最坏情况下的计算时间较长,有没有在最坏情况下比这个要好的算法?
合并函数的算法思想和描述:
归并排序算法的缺点:
- 当子集合的元素很少时,算法多数时间消耗在哪里?在递归的处理上
改进:
- 当子集合的元素个数适当少时
- 采用 在小规模集合上能有效工作的排序算法,而非继续划分,以此克服上述缺点带来的时间消耗
- 小规模集合上有效排序方法:插入排序算法
- 辅助数组增加了空间内复杂度;每次调用merge时,都需要将辅助数组中的结果复制回A中,消耗时间
改进:
- 用一个链接数组link代替B,链接数组即,其index的位置上保存了应该排在其下一个位置的元素的index,不保存真实数值,从而构成一条链。
link数组空间没变,但是不在需要每次将数组元素复制A中了
其他改进:
可以消去递归,取消栈的使用,
- 自底向上的方法,将元素两两配对
- 自然归并排序法
自然归并排序如何实现,扫描一遍找出已排序子数组组段?
在n/2比较是刚好两个数组每个元素对应比较,所以是n/2;
n-1是在一个数组用一个,另一个数组全部,所以是n-1,最差情况。
其实可以从n个数的排序数来考虑,n个数全排列,即可得到。每一个外节点对应一个排序的话,就自然是n!个外节点了。
考虑任何排序算法对应的二元比较树
设🌲的高度是k
- 内节点的级数最大为k
- 外节点级数最大为k+1
- 外节点最多有2k,至少有n!,所以有n!<=2k
二、特斯拉森矩阵乘法
矩阵最基本的运算是:矩阵相加和矩阵相乘
特斯拉森矩阵乘法就在于通过==分治法+处理技巧 ==,计算矩阵相乘。
稍微记一下strassen算法的计算方法。