zoukankan      html  css  js  c++  java
  • 二分查找法

    二分法:输入必须是一个有序的元素列表

    最多需要log2^n步(对数):将2^n=x(假如列表包含8个元素,2^n=8 n=3,最多需要3步可以找到该元素)

    练习:

    1.假设有一个包含128个名字的有序列表,你要使用二分查找在其中查找一个名字,请 问最多需要几步才能找到?(7步 2^7=128)

    2.上面列表的长度翻倍后,最多需要几步?(8步)

    代码 :

    <?php
    //前提条件:必须是一个有序列表
    //解题思路:
    //1 将数组排序
    //2 寻找中间数。中间数=(开始数+结尾数)/2
    //3 判断中间数。如果中间数比查找数小,就在中间数和结尾数中查找。反之在开始数和中间数中查找
    //4 多次循环,找出查找数的下标
    $a = [4,3,3,2,1,1234,3,4,5,6,7,7,8,4,21,3243,54,5,2,32,2,32,3,2,32,32,3,2,14254,5,99,43,65,6,653,65,4];
    //$a =[4,3,1,2];
    sort($a);
    $guess = 324322;
    
    $len = count($a);
    $start = 0;
    $end = $len -1;
    
    while($len >= $end){
       $mid = intval(($start + $end)/2);
        if ($guess == $a[$mid]){
            echo $mid;exit;
        }
        if ($guess > $a[$mid]) {
            $start= $mid;
        }else{
            $end = $mid;
        }
    }

    大O表示法:指出最糟情况下的运行时间

    算法的时间指的是操作数的增速

    算法的运行时间是以大O表示法来表示 

  • 相关阅读:
    ImportError: cannot import name 'render_to_response' 解决方法
    python 操作zookeeper详解
    Appium swipe实现屏幕滑动
    Appium 环境配置
    pytest 常用方法介绍
    Allure+pytest 生成测试报告
    Pytest 使用简介
    python 实现线程之间的通信
    python 使用 thrift 教程
    nginx 配置简单反向代理
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/12419357.html
Copyright © 2011-2022 走看看