1.分治
算法原理:以减半的形式缩小逻辑范围,将答案范围变小。
例如:一组数列求最大值;先排序,然后取中间值,比较相邻前后两个值得大小,那一边的值大,就继续从较大的那一边的所有元素再分而划之。。。
例如:如果你知道一支股票在n天里的所有价格,如何确定买入和卖出的时间,使自己一次买卖赚最多?递归计算出前n/2的最佳买卖时间,后n/2天的最佳买卖时间。还有前n/2天最便宜的一天和后n/2中最贵的一天。答案一定是三者中最优的那个。
tips:需要主要的几个点,先买后卖,最小值肯定在最大值前面。
例如:两个数据库都有n个数据,且这2n个数据均不相同,数据库可查询第K个最小的值,试图用最少的步骤找出这2n个数据的中位数。取两个数据库的第n个数进行比较,较小的哪一个数据库中比较小数小的就没希望了!较大值的数据库当中比较大值大的也就没希望了。这样就少了一半,递归下去就找到了。