本文共 703 字,大约阅读时间需要 2 分钟。
任何可以用计算机求解的问题所需要的计算时间都与问题的规模相关。规模越小,求解时间往往越短,也容易处理。要想解决一个规模较大的问题,有时会很困难。分治策略是将一个难以解决的问题分割成一些规模较小的问题,然后降低问题的处理难度。如果分割成的小规模问题都是可解的,就可以利用小规模问题的解求解出原问题的解。在这种情况下可以不断使用分治策略,使问题的规模不断的缩小,这样子问题缩小到很容易求解出解。由此自然引出递归算法。
使用分治策略的注意事项:
a:问题可以被分割
b:分割后的问题全部都有解
c:反复时候分治时仍然满足a和b
分治策略一般算法设计模式:
divide-and-merge(n){ if(n<=n0)process(n);// 问题规模可以直接解决的子问题 divide n into smaller subinstances n1,n2, ... ... ,nk; //分治 for(i=1;i
递归算法:直接或者间接地调用自身的算法
递归函数:用函数自身给出的定义的函数
例如:二叉树的定义是一种递归定义,遍历算法是递归算法,遍历函数是递归函数。
分治策略设计出的算法一般是递归算法,所以分治策略的算法计算效率可以用递归方程来进行分析。
T(n)<= O(1) n=0
T(n)<=kT(n/m)+f(n) n>1
n为原问题的规模,n/m为k个子问题的规模,T(n)为问题规模为n的计算时间,f(n)为k个子问题的解合并为原问题解所需要的时间。
遵循以上的思想指导可以采用分治策略设计递归算法来解决问题。如何将递归算法替换为非递归算法需要根据实际情况做进一步的判断。
转载地址:http://prpdi.baihongyu.com/