matlab实现二分法查找
2009-12-28 18:46
274 查看
上次谈到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下实现。
那么还是没有解决大量数据中查询特定数值的问题,有相关的解决办法,比如说,线性查找,即一个一个数据判断是否为真。
举个例子说,我们要用线性查找的办法判定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中实现二分法的查找的代码:
%二分法检测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; elseif n<m m1=cat(2,m1,m); elseif n>m m2=cat(2,m2,m); end end
还是采用线性查找中用到的例子,用二分法模拟检测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下实现。
相关文章推荐
- 二分法查找的C语言实现:
- JAVA 二分法查找实现
- Java二分法查找实现
- 二分法查找、快速排序思想与实现
- 二分法(折半)查找java实现
- 用PHP实现二分法查找之递归和迭代
- 二分法查找 --JS 实现
- 计算方法中方程的近似解法中二分法matlab实现
- 实现二分法查找——java实现
- 顺序表的冒泡排序算法及二分法查找代码实现
- 使用Matlab实现英文单词的"形近词"查找
- 算法代码实现之二分法查找,Golang(Go语言)实现
- 二分法的使用之MATLAB实现
- 快速排序、二分法查找的PHP实现代码
- 用c语言实现二分法查找表格【数据结构】
- 数据结构之二分法查找、快速排序思想与实现
- 数据结构之二分法查找、快速排序思想与实现
- 求n的阶乘(递归&&非递归),Fibonacci函数,二分法查找,汉诺塔实现,排列组合,整数划分,一元多项式的加减乘
- 算法代码实现之二分法查找,Java实现
- PHP基于二分法实现数组查找功能示例【循环与递归算法】