matlab实现二分法查找

来源:互联网 发布:淘宝网红草宛儿服饰 编辑:程序博客网 时间:2024/05/21 06:35

上次谈到matlab实现数据的位图数结构,实现大量数据的排序和存储,节省时间和空间。
那么还是没有解决大量数据中查询特定数值的问题,有相关的解决办法,比如说,线性查找,即一个一个数据判断是否为真。
举个例子说,我们要用线性查找的办法判定n=100这个数值是否在1--250之间,将1--250之间的数字存储到a数组中,然后从从第一个数字开始,一个一个数字挨次做判断,n?=a(i),等于即为真,否则i++,那么做判断的次数的期望值即为250/2=125,得出最少要做125次才能判定n这个数是否存在于数组中。当遇到庞大的数据时候,这种方法显然力不从心,会浪费很多时间。

下面介绍用matlab实现二分法的查找,这将会打来很大的方便。
二分法的查找时通过记录数组中包含n(假设n在数组a中的某个位置)的元素范围的方式来解决问题。
注意:数组a已经使用位图数据结构的方法排序;
最初这个范围将是整个数组,将数组的中间元素和n进行比较,去掉该范围的一半以缩小范围。连续进行该程序,直到数组中发现n为止或者直到发现包含n的范围不存在时为止。在具有b个元素的数组a中,二分法大约要进行log2(b)次的查找。
到此看官可以关掉网页自己动手用熟悉的软件编译二分法查找的程序,有些代码看起来很简单,却要花费很多时间编译无bug的代码。历史上,knuth在其<sorting and searching>一书中指出,尽管第一个二分法查找的程序与1964年就已经公布,但第一个无bug的二分法查找程序直到1962年才出现。

 

下面是用matlab中实现二分法的查找的代码:

 

还是采用线性查找中用到的例子,用二分法模拟检测100是否在1--250之间,实验结果如下:

m1 = 250   125   109   101;

m2 = 1    63    94    97    99;

 

在处理海量的数据时候,二分法的优势一览无余,下面是处理130744314个数据,软件所用的时间(matlab中生成随机数最大的维数为130744314)

Elapsed time is 0.001722 seconds.(二分法)
Elapsed time is 0.588435 seconds.(线性法)

很明显线性法用的时间是二分法的341.7160倍。

 

注:上述在win7+matlab2009a下实现。

原创粉丝点击