PHP二分法查找,MYSQL索引即为用了此查找
来源:互联网 发布:linux命令进入e盘 编辑:程序博客网 时间:2024/06/06 00:54
算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。主要思想是:(设查找的数组区间为array[low, high])
(1)确定该区间的中间位置K
(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半,递归找,即可。时间复杂度:O(log2n)。
比如说我有排序好的数组$arr = [1,5,7,8,10,34,35,70,90],我想找里面的$key70
判断取所有值的长度,对半/2这里有9个数字/2这里是4.5,当然数组里也没有4.5的下标,我们可以强制转为intval这里得到的是4为基数
我们拿$arr[4]也就是这里的10再和$key70进行对比,发现10是比70小的,所以我们再把下标刚刚的4再加1再查找,这样的话,又缩小了一半的查询,但如果你想找的$key小于10,只要把4减1可以查找
PHP写法
/**
* 二分查找
* @param Array $arr 待查找的数组
* @param Int $key 要查找的关键字
* @return Int
*/
function bin_search(Array $arr,$key)
{
$high = count($arr);
if($high <= 0)
return 0;
$low = 0;
while($low <= $high)
{
//当前查找区间arr[low..high]非空
$mid=intval(($low + $high) / 2);
if($arr[$mid] == $key)
return $mid; //查找成功返回
if($arr[$mid] > $key)
$high = $mid - 1; //继续在arr[low..mid-1]中查找
else
$low = $mid + 1; //继续在arr[mid+1..high]中查找
}
return 0; //当low>high时表示查找区间为空,查找失败
}
$arr = array(1,2,4,6,10,40,50,80,100,110);
echo bin_search($arr,80);
* 二分查找
* @param Array $arr 待查找的数组
* @param Int $key 要查找的关键字
* @return Int
*/
function bin_search(Array $arr,$key)
{
$high = count($arr);
if($high <= 0)
return 0;
$low = 0;
while($low <= $high)
{
//当前查找区间arr[low..high]非空
$mid=intval(($low + $high) / 2);
if($arr[$mid] == $key)
return $mid; //查找成功返回
if($arr[$mid] > $key)
$high = $mid - 1; //继续在arr[low..mid-1]中查找
else
$low = $mid + 1; //继续在arr[mid+1..high]中查找
}
return 0; //当low>high时表示查找区间为空,查找失败
}
$arr = array(1,2,4,6,10,40,50,80,100,110);
echo bin_search($arr,80);
阅读全文
0 0
- PHP二分法查找,MYSQL索引即为用了此查找
- php数组二分法查找
- php数组二分法查找
- 二分法查找-php实例
- PHP 二分法查找
- php 简单的二分法查找
- Scala、PHP、Golang 二分法查找
- PHP二分法(折半查找)
- C++ 二分法查找元素及其索引
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 神经网络结构在命名实体识别(NER)中的应用
- listview 性能优化总结
- UVA 11827 Maximum GCD
- 单线程和多线程//笔记
- 开源爬虫软件汇总
- PHP二分法查找,MYSQL索引即为用了此查找
- iOS 打包ipa后无法收到推送消息的解决方法
- 第十周项目一 2
- 老郭的《Dalvik虚拟机垃圾收集机制简要介绍和学习计划》
- spring+mybatis 多数据源切换失败的可能原因
- ListView的多条目加载
- sql 排序 并以排序结果作为一个字段
- eclipse importing maven project 卡死
- Linux下的重要目录