二分法的原理:用传统的方法 要找到一个数字,需要for循环一个一个遍历,这种写法,如果在1000个数字中,找一个数组,需要遍历1000次,非常的消耗资源
所以提出了另一种方法 二分法,先对数组进行排序,找出中间的数,和查找的数进行对比;
二分法作用:常用于数据查找的方法; 前端的数组搜索;
案例:
var arr=[2,26,36,45,67,89,12,46,53,42];
//二分查找的前提,一定要从小到大排序;
arr.sort(function(a,b){
return a-b;
})
//最小的数的索引 , 最大的书的索引;
var startindex=0;endindex=arr.length;
var findnum=prompt();
var middleindex=Math.floor((startindex+endindex)/2);
while(startindex!==middleindexendindex!==middleindex){
console.log(1);
if(arr[middleindex]findnum){
endindex=middleindex;
}
else if(arr[middleindex]findnum){
startindex=middleindex;
}
else if(arr[middleindex]==findnum){
break; //这里很重要,不然的话会一直遍历下去,因为是while循环 ,不加的话,很可能死机
}
middleindex=Math.floor((startindex+endindex)/2);
}
if(arr[middleindex]==findnum){
document.write("找到了");
}
else{
document.write("没找到");
}
excel中LOOKUP函数的二分法查找策略
二分法查找又称折半查找,它是一种效率较高的查找算法。二分法通常要求目标数组中的数据是有序排列的。LOOKUP函数所使用的查找策略就是二分法,不仅仅是LOOKUP,其实VLOOKUP/HLOOKUP函数在其第四参数为True时、MATCH函数在其第三参数为1时也都是遵循了二分法的'查找原则来进行运算的。
二分法的具体方法,通常会通过下面这个流程图来表达:
但流程图过于抽象,为了让这个查找过程更容易理解,尝试使用其他方法再进行一些解读。
首先是算法文字描述:
1, 将查找值与目标向量中的“中位值”进行对比
2, 大于中位值时,以中位作为边界,继续在其右侧取新的中位值继续对比
3, 小于中位值时,以中位作为边界,继续在其左侧取新的中位值继续对比
4, 等于中位值时,依次判断其右侧数值是否继续相等,直到不相等时返回最后一个相等的数值
5, 当中位位置与边界重叠时,中止对比,此时如果查找值大于中位值,则返回中位值;如果查找值小于中位值,则返回中位左侧数值。如果左侧数值不存在,返回#N/A
注:上面提到的“中位值”指的是目标数组中位置居中的数据(数据个数为偶数时,中位等于个数除以2;数据个数为奇数时,中位等于个数+1除以2),与统计学上传统意义上的中位值不完全相同
再配合下面两张运算过程图加深理解:
最后,再提供一个自动演示查找运算过程的Excel文档: ;
一、二分法的优点:
1、计算简单,方法可靠;
2、对f (x) 要求不高(只要连续即可) ;
3、收敛性总能得到保证;
4、二分法计算过程简单, 对)(xf要求不高(只要连续即可),程序容易实现。
二、二分法的缺点:可在大范围内求根,该方法收敛较慢,且不能求重根和复根, 其收敛速度仅与一个以 1/2为比值的等比级数相同,通常用于求根的初始近似值,而后在使用其它的求根方法。
扩展资料:
二分法的求法:
1、确定区间[a,b],验证f(a)·f(b)0,给定精确度ξ。
2、求区间(a,b)的中点c。
3、计算f(c):
(1)若f(c)=0,则c就是函数的零点;
(2)若f(a)·f(c)0,则令b=c;
(3)若f(c)·f(b)0,则令a=c;
(4)判断是否达到精确度ξ:即若|a-b|ξ,则得到零点近似值a(或b),否则重复2-4。
参考资料来源:
百度百科-二分法
二分法(Bisection method) 即一分为二的方法. 设[a,b]为R的闭区间. 逐次二分法就是造出如下的区间序列([an,bn]):a0=a,b0=b,且对任一自然数n,[an+1,bn+1]或者等于[an,cn],或者等于[cn,bn],其中cn表示[an,bn]的中点。
扩展资料
典型算法
算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。
基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较,
如果当前位置arr[k]值等于key,则查找成功;
若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];
若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],
直到找到为止,时间复杂度:O(log(n))。
参考资料:二分法(数学领域术语)百度百科