3.7.3 总结分治算法能解决什么类型的问题

分治算法所能解决的问题一般具有以下4个特征。

(1)当问题的规模缩小到一定程度时,就可以容易地解决问题。此特征绝大多数问题都可以满足,因为问题的计算复杂性一般随着问题规模的增加而增加。

(2)问题可以分解为若干个规模较小的相同子问题,即该问题具有最优子结构性质。此特征是应用分治算法的前提,也是大多数问题都可以满足的,此特征反映了递归思想的应用。

(3)利用该问题分解出的子问题的解可以合并为该问题的解;此特征最为关键,能否利用分治算法完全取决于问题是否具有特征③,如果具备特征①和特征②,而不具备特征③,则可以考虑用贪婪算法或动态迭代法。

(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。此特征涉及分治算法的效率问题,如果各子问题不是独立的,则分治算法要做许多不必要的工作,重复地解公共的子问题。此时虽然可采用分治算法,但一般用动态迭代法较好。