matlab实现二分法查找

上次谈到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在其一书中指出,尽管第一个二分法查找的程序与1964年就已经公布,但第一个无bug的二分法查找程序直到1962年才出现。

 

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

 

%二分法检测n值是否存在于数据中 m1=max(a);% m1%从左边趋近时的取值,每次取数组中的最小值 m2=min(a);% m2%从右边趋近时的取值,每次取数组中的最大值 for i=1:log2(a)+1 % for i=1:x m=fix((min(m1)+max(m2))/2); if n==m break

你可能感兴趣的:(娱乐MATLAB)