《算法》学习之二分查找

Posted 算法小白的进阶之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《算法》学习之二分查找相关的知识,希望对你有一定的参考价值。

这段程序接受一个白名单文件(一列整数)作为参数,并会过滤掉标准输入中的所有存在于白名单中的条目,仅将不在白名单上的整数打印到标准输出中。

import java.util.Arrays;public class BinarySearch{ public static int rank(int key, int[] a) { // 数组必须是有序的 int lo = 0; int hi = a.length - 1;        while (lo <= hi)        {  // 被查找的键要么不存在,要么必然存在于a[lo..hi]中            int mid = lo + (hi - lo) / 2;            if      (key < a[mid]) hi = mid - 1;            else if (key > a[mid]) lo = mid + 1;            else                   return mid;        }        return -1;    }    public static void main(String[] args)    {       int[] whitelist = In.readInts(args[0]);       Arrays.sort(whitelist);       while (!StdIn.isEmpty())       {  // 读取键值,如果不存在于白名单中则将其打印          int key = StdIn.readInt();          if (rank(key, whitelist) < 0)             StdOut.println(key);       }    }   }             

白名单过滤

如果可能,我们的测试用例都会通过模拟实际情况来展示当前算法的必要性。这里该过程被称为白名单过滤。

性能

public static int rank(int key, int[] a){   for (int i = 0; i < a.length; i++)    if (a[i] ==key) return i;   return -1;}

如上,计算机用rank()方法的暴力实现处理大量输入非常慢。没有如二分查找或者归并排序这样的高效算法,解决大规模的白名单问题是不可能的。

以上是关于《算法》学习之二分查找的主要内容,如果未能解决你的问题,请参考以下文章

递归分治算法之二维数组二分查找(Java版本)

4.机器学习之逻辑回归算法

python学习之第四天补充

机器学习之Logistic 回归算法

从0到1学算法二分查找法

从0到1学算法二分查找法