标签:分解 class 排序算法 思维 第一个 div das 就是 意思
我们以下面的数组为例子,用归并排序的方法将上述数组排序。方法:递归:
9 7 8 4 1 6
首先,先表明在归并排序中的第一个要点:将数组均等的一分为二.,这是什么意思呢?,也就是我们不是将数组拆分成:
9 7 8 4 1 6 ——>9 7|8 4 1 6
尽管这也是将原问题分解成同类的子问题,但是这些子问题的规模不一致,但是请别搞错了,这仍然是分治,而且我们仍然可以采用递归的方式继续求解这些子问题。也就是说:分治与递归并不要求我们必须将子问题划分成同等规模大小的问题(尽管这好像看起来划分成同等规模似乎更为合理)。实际上,快速排序算法就不是采用均分策略,但人家依然采用的是分治思想。因此,请记住:
归并排序采用了递归的策略,但是数组均分策略是归并的第一特点! 也就是,我们会将数组划分成:
9 7 8 4 1 6 ——>9 7 8|4 1 6
那么现在,我们问自己:现在这个子问题,我能解决吗?很多人会回答?还不能...因为子问题还不够小。
你之所以会这么回答,也是因为经验主义,这样会限制你修改算法的思维,假如我们将数组划分的很小了,只要我们认为能解决了,那么这个划分的过程就可以结束了。比如上述我们可以采用O(n2)的算法解决子问题,也不是不可以。所以,没有任何算法是完美的和绝对的。
标签:分解 class 排序算法 思维 第一个 div das 就是 意思
原文地址:https://www.cnblogs.com/guangdayuan/p/12977664.html