在算法设计中,常见的设计思想有分治法,分支定界,回溯,动态规划等等。其中分治法是算法设计中最为重要的思想之一。分治法思想的本质就是分而治之,将解决一个问题的解空间一分为二,每个子问题的解空间步骤与原问题解法上类似,分治法很多时候用递归这种方式来实现。算法设计相关教材一般将归并排序作为分治法的典型应用,归并排序思想是将一个待排序的序列一分为二,递归地对每个子序列排序,这样一直分解下去,直到不能分解为止,然后从最小子序列(不能再分割的序列)排序后合并,自底向上来对整个序列排序。其实分治法还有很多运用,比如二叉树查找,快速排序等,都有分治法思想的影子。下面就拿简单的从1到n累计求和程序设计来说明分治法的思想。从1到n最简单的就是累加法,然后也有利用等差数列公式求和之后,再计算值;当然我们也可以根据求和的递归关系来用递归求解。下面给出几个版本的代码:
//================================================================