请高手指教下面这个问题的效率最高的算法!?
在VB.net中,从一个double型数组arr[100]中查找满足条件 Abs((a*c)/(b*d))-p <0.00001(误差范围)的四个元素a,b,c,d,其中变量p由文本框输入的值决定。求效率最高的算法。。请高手指教!!!
例如数组中有20,40,30,60,50,100,120共七个数值,p=0.25,则可以有
a=20,b=40,c=30,d=60
a=20,b=40,c=50,d=100
a=30,b=60,c=50,d=100
a=20,b=40,c=60,d=120
而不允许存在
a=20,b=40,c=20,d=40
a=20,b=20,c=30,d=12
之类的组合存在
[解决办法]
如果你的数组是常量,还可以用查表的方式,这样效率就大大提高了,比如100的数组,其实表里只要一万条记录记录这100个数字两两相乘的结果.然后计算时候就省去了了乘法运算了,变成
(p-0.00001)*X
(p+0.00001)*X
然后去查表.再去重复,会快得多,不过如果你的数组是变化的,就不好办了,因为构建这张表就要很多时间了.