首页 > 编程语言 >PHP二分法

PHP二分法

时间:2022-11-15 12:44:59浏览次数:40  
标签:val nums 复杂度 二分法 low key PHP

class HalfFind
{
    /**
     * @desc 二分法查找 效率老高了 前提: 必须是有序的数组
     * @desc 二分法时间复杂度为 O(log n)
     *
     * @param $nums
     * @param $val
     * @return float|int
     */
    function find($nums, $val)
    {
        if (count($nums) < 1) {
            return $nums;
        }
 
        $low = 0;
        $high = count($nums) - 1;
 
        // 易错点一: $low <= $high, 而不是<
        while($low <= $high) {
 
            // 易错点二 : 中间位置
            // 这种写法而不是$key = ($low + $high) / 2 是为了避免当low 和 high都很大的时候求和发生溢出
            // 比这种写法效率更高的写法是 : $key = ($low + ($high - $low) >> 1) Why? 因为计算机进行位运算比进行除法运算更快
            $key = floor($low + ($high - $low) / 2);
 
            if ($nums[$key] == $val) {
               return $key;
            }elseif ($nums[$key] < $val) {
                // 易错点三: 边界值变更是 key + 1 或是 key - 1
                // 

标签:val,nums,复杂度,二分法,low,key,PHP
From: https://www.cnblogs.com/chenhaoyu/p/16892040.html

相关文章

  • PHP的TP框架的limit使用注意事项
    使用limit时需要注意不要用find()需要用paginage或select这种多选的方法比如: Db::name('user')->limit($offset,1)->order('id','asc')->find();......
  • php zip下载附件到压缩包并浏览器下载
    /***下载图片并生成压缩包*@param$arr资源数组*@returnstring*/functiondownloadZipImg($arr){if(is_array($arr)&&$arr){foreach($arras......
  • php filter函数库 (与变量和类型有关的扩展),可以过滤常用邮件,IP,变量数组等...
     filter扩展库简介 Thisextensionfiltersdatabyeithervalidatingorsanitizingit.Thisisespeciallyusefulwhenthedatasourcecontainsunknown(orfore......
  • PHP parent 的注意点
    PHP5中使用parent::来引用父类的方法。parent::可用于调用父类中定义的成员方法。parent::的追溯不仅于直接父类。通过parent::调用父类方法<!--声明一个员工类,经理类继......
  • 好用的PHP高性能多并发restful的HTTP Client
    ThisishighperformancecurlwrapperwritteninpurePHP.It'scompatiblewithPHP5.4+andHHVM.Noticethatlibcurlversionmustbeover7.36.0,otherwiseti......
  • PHP三元运算符 ?? 和 ?:
      $c=$a?:$b;等效于$c=$a?$a:$b;$c=$a??$b;等效于$c=isset($a)?$a:$b;示例:$a=null;$b='b';$c=$a?:$b;//b$c......
  • PHP是最好的编程语言吗?
    编程语言很多,既然存在,就有每个存在的理由。不想评论,也没必要评论,哪个语言好,哪个语言不好,因为,其实,每个编程语言本身都不难,只要学会了一种语言,其他的都是相通的。难的,好......
  • PHP 7.3 比 PHP 7.0 快 22%,即将进入特性冻结阶段
    随着上周PHP7.3Alpha3的发布,意味着PHP7.3即将进入特性冻结阶段,不再有新的功能添加,后续的Beta和RC版本将主要进行修复,直到11月29日发布正式版本。从目前的......
  • PHP 网页
    PHP官网下载 https://windows.php.net/download/在PHP官网点击Download下载时不管选择哪个版本的都有两个类型:NonThreadSafe(非线程安全)和  ThreadSafe(线程安全)......
  • Centos7下yum安装php7.2
    因为php7.2是通过php命令控制,而php7.3是使用php73命令,所以根据网上某些教程部署应用时,会出错上一篇提供了php7.3和apache2.4的部署和配置,再补一篇php7.2的安装,参考连接中......