举个简单的分治算法场景:求指定整型数组的最大值和最小值。
传统做法就是遍历一遍下来求出最大值和最小值,时间复杂度是O(n)。
下面说下用分治怎么实现。
1、为什么选择分治算法?
因为本题具有以下属性
(1)、当该问题缩小到一定规模的时候,比如,该数组只有两个元素,这个时候,这个问题就很好解决。
(2)、该问题可以分解为若干规模较小的相同问题。
(3)、分解的问题的答案可以合并为该问题的解。
2、本题如何用分治算法实现?
直接上代码:
function divide_conquer(arr,from,to){
if(to - from == 1){
return {"max":Math.max(arr[from],arr[to]),"min":Math.min(arr[from],arr[to])}
}else if(to - from == 0){
return {"max":arr[from],"min":arr[to]}
}else{
var middle = parseInt(from+(to-from)/2);
var result1 = divide_conquer(arr,from,middle);
var result2 = divide_conquer(arr,middle+1,to);
var result = {};
if(result1["max"] > result2["max"]){