顾名思义,“分治”名字本身就已经给出了一种强有力的算法设计技术,它可以用来解决各类问题。在它最简单的形式里,一个分治算法把问题实例划分成若干子实例(多数情况是分成两个),并分别递归地解决每个子实例,然后把这些子实例的解组合起来,得到原问题实例的解。
寻找最大最小解
一种直接的算法如下所示,它返回一个数对(x,y),其中x是最小值,y是最大值
1 x<-A[1] ; y<-A[1]
2 for i <- 2 to n
3 if A[i] < x then x <- A[i]
4 if A[i] > y then y <- A[i]
5 end for
6 return (x,y)
很显然执行次数为2*n-2
下面使用分治策略。
思路: