PHP——二分法查找数据
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<?php //函数名称为 Dichotomy ,$php 为数组,$k 为要查找的值,$low 为最小的值,$max 为最大值
function Dichotomy($php,$k,$low,$max)
{
if(count($php)!= 0 and $max == 0)
{
$max = count($php);
}
if($low <= $max)
{
$mid = intval(($low+$max)/2);
Βιβλιοθήκη Baidu
if($php[$mid] == $k)
{
return $mid;
}
else if($k < $php[$mid])
{
return Dichotomy($php,$k,$low,$mid-1);
}
else
不论在 PHP 中还是在其他的编程语言中,使用顺序法查找数据都面临着一个很大的问题,那就是:如果数 组中的数据很多时,该怎么办?
继续使用顺序法查找数据会使得 PHP 的效率变低。 这时我们引入了二分法查找数据。
二分法就是在 PHP 的数组中假象数组排好序了,然后通过对数组元素的比较得到结果。比较一次就会排出 1/2的数组。 例如:
{
return Dichotomy($php,$k,$mid+1,$max);
}
}
return -1;
}
$php = array('1','2','3','4','5','6');
echo Dichotomy($php,5);
?> 结果: Warning: Missing argument 3 for Dichotomy(), called in E:\xampp\htdocs\php\Test\8.5.2.php on line 29 and defined inE:\xampp\htdocs\php\Test\8.5.2.php on line 3 Warning: Missing argument 4 for Dichotomy(), called in E:\xampp\htdocs\php\Test\8.5.2.php on line 29 and defined inE:\xampp\htdocs\php\Test\8.5.2.php on line 3 4 这是我第一次做的时候呈现的错误。问题出在哪里呢? 好吧:新手问题。因为在函数刚开始没有给$low 和$max 赋值,使得函数的 if 没有办法进行。 正确的代码如下: <?php //函数名称为 Dichotomy ,$php 为数组,$k 为要查找的值,$low 为最小的值,$max 为最大值
{
return $mid;
}
else if($k < $php[$mid])
{
return Dichotomy($php,$k,$low,$mid-1);
}
else
{
return Dichotomy($php,$k,$mid+1,$max);
}
}
return -1;
}
$php = array('1','2','3','4','5','6');
function Dichotomy($php,$k,$low=0,$max=0)
{
if(count($php)!= 0 and $max == 0)
{
$max = count($php);
}
if($low <= $max)
{
$mid = intval(($low+$max)/2);
if($php[$mid] == $k)
echo Dichotomy($php,5);
?> 结果是: 4 返回的是键值。 这个 PHP 例子说的是在已知数组排序的情况和所需要查找的数据下所进行的: 将数组中的最小和最大值相 加取平均,因为已经知道所要查找的元素了,就比如我这个例子,所以从$mid+1到$max 开始查找。 这样我们会想:天下哪里有这么便宜的事,谁实现知道所有的数组呢。所以,这种方法也不是很方便。 那么,你有什么建议呢?