美文网首页实用算法
什么是 二分法 ?

什么是 二分法 ?

作者: 魔都一只土拨鼠 | 来源:发表于2019-07-22 10:10 被阅读0次

    二分法

    原文:https://github.com/googege/AMAC/tree/master/basic/8
    主要是原文里有不少的代码,看字不如看代码

    二分法是针对的有序的序列,我们将要找的数字跟这个区间内的中位数进行比较,然后确定是做区间还是右区间,这点倒是很像分治的思想,例如快排中选择一个基点然后左右排列,递归,所以二分法很像分治的思想。

    二分查找的不可用的地方

    • 数据太少,直接遍历即可

    • 无序 如果是无序应该先排序再查找

    • 频繁进行io 这样的话就需要经常的排序,

    • 数据必须是顺序表不能是链表

    • 数据量太大也不行 因为 这么大的数组内存放不下啊。

    时间复杂度

    很明显每次都是对折如果我们反过来看从1开始每次都是2倍自己那么我们可以得到的是2^k = n 很明显是指数,所以当我们从n然后推出k的时候
    也很明显了,就是用的指数的对边 --- 对数 所以它的时间复杂度就是 log2n 我们可以简称为 logn 而且没有任何的其它项,所以说,这就是为什么
    二分法比某些O(1)还要快的原因 --- O(1)有可能常数项是100000 但是 log2n就比这个数字小的多.

    二分法的变形算法

    • 查找第一个值等于给定值的元素

    • 查找最后一个值等于给定值的元素

    • 查找第一个大于等于给定值的元素

    • 查找最后一个小于等于给定值的元素

    相关文章

      网友评论

        本文标题:什么是 二分法 ?

        本文链接:https://www.haomeiwen.com/subject/mqlilctx.html