数据与算法之美 2020-06-10
1. 分解:
对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。
2. 合并:
将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
3. 分治算法的使用条件:
分治法所能解决的问题一般具有以下几个特征:
说明:因为问题的计算复杂性一般是随着问题规模的增加而增加,因此大部分问题满足这个特征。
这条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用能否利用分治法完全取决于问题是否具有这条特征,
如果具备了前两条特征,而不具备第三条特征,则可以考虑贪心算法或动态规划。这条特征涉及到分治法的效率,如果各子问题是不独立的,
则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好。
4. 分治算法的基本步骤:
说明: