我们在工作中时常需要对大量的数据进行分析,而这就应该用上二次线性的算法了。这就不得不说二次线性了;
什么是二次线性呢,说到二次线性就说一说递归( recursion)吧,递归是程序调用自身的编程技巧。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
而这我们就用实例来说明一下吧!
// 二分查找
var arr = [];//先创建一个数组来装我们所创建的大量数据
for(var i = 0; i < 10000; i++) {
arr[i] = i + 1;
}
function find(num, start, end) {//封装一个函数来进行二分查找,第一个用来装要查找的数,第二个用来装数组的最小值(就是0),第三个用来装数组的最大值(数组长度减一)
if(start > end) {//判断一下导入的是否是数组
return false;
} else if(start == end) { //说明数组中只有一个数
if(arr[start] == num) {
return true;
} else {
return false;
}
}
var center = Math.floor((start + end) / 2);//判断一个从哪切分,
if(num == arr[center]) {//
return true;
} else {
if(num < arr[center]) {
return find(num, 0, center);
} else {
return find(num, center + 1, end)
}
}
}
console.log(find(33333, 0, arr.length - 1))
console.log(find(3333, 0, arr.length - 1))
这样我们就会在页面中的控制台上看到两个值了,一个是false,一个是true。false是数组没有33333这个数的意思,true是指在数组中找到了3333这个数。
//以下是个人见解
二分线性算法就是这个样子。因为只用for循环来一个一个查找数据的话是非常浪费时间的,并且电脑的CPU是一个大的考验,如果数据过大,就会让页面卡死。
而二分线性算法就是将一个过于长的数据进行分段式的开始计算,注意,二分线性不光能分为两段,而更多的用法就看我们自个公司程序员中的算法工程师的能力了