运行时间中的对数

运行时间中的对数

分析算法混乱的地方大概集中在对数上,某些分支算法是以O(NlogN)时间来运行的,除了分值算法以外,还包括其他的算法,可将对书中最长出现的规律概括为以下法则,如果一个算法用常熟时间(O(1))将问题的大小削减为其中一部分(通常是1/2),那么这个算法就是O(logN)算法的时候,通常假设数据是提前读入

1)对分查找

对分查找:

给定一个整数X和证书A(0),A(1),....,A(N-1) 后者已经预先安排并且在内存中,求使Ai = X的下标i,如果X不在数据中则返回-1

明显的解法是从左到右的扫描数据,其运行话费线性时间。然而这个算法没有用到该表已经排序的实事,这就使得这个算法不是最好的,一个好的验证策略是验证X是否是居中的元素。如果是答案就找到了,如果x小于居中的元素,那么我们可以用同样的策略于居中元素的左边排序子序列,同理,如果X大于居中元素,那么我们检查数据的右边部分。

对分查找例子:

    function searchValueByArray($arr,$value,$len)
    {
        $low = 0;
        $high = $len;
        while($low<=$high)
        {
        $mid = intval(($low+$high)/2);
        if($arr[$mid] < $value)
        {
            $low = $mid+1;

        }else if($arr[$mid]>$value)
        {
            $high = $mid-1;

        }else{
            return $mid;
        }
        }
        return null;
    }

    $r = searchValueByArray($arr,-5,sizeof($arr));
    var_dump($arr[$r]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值