我的程序中有一个数学公式,它接受两个介于 0 和 1 之间的值,并且需要做大量工作才能找到答案。
我也希望能够做相反的事情,即我想知道什么输入值会产生特定的输出。我无法通过分析来做到这一点,因为可以从大量输入中得出相同的答案,而且公式太复杂了。
我的问题是我目前正在做这样的事情,这需要相当长的时间来计算
for(double i = 0; i <= 1 ; i += 0.0001)
for(double j = 0; j <= 1; j+= 0.0001)
answer = formula(i,j); //do the math
if( Math.abs(answer - answerWanted) < 0.001)
//close match found
鉴于公式是静态的,我当然可以预先计算这些值。我认为查找一个值比执行许多计算要快得多。
我以前从来没有做过这样的事情。有谁知道要使用什么数据结构/如何索引/如何存储结果?目前我唯一的想法是我可以以某种方式对答案进行排序以减少搜索空间,或者只是在运行时初始化一个巨大的数组。如果重要的话,答案只能在 0 到 2000 之间。
最佳答案
另一种方法是使用更智能的搜索算法。最佳选择将取决于您的功能,但一个好的开始可能是 Nelder-Mead(下坡单纯形)算法:
http://en.wikipedia.org/wiki/Nelder–Mead_method
这样会大大减少计算量。局部最小值对于某些搜索算法来说可能是个问题,但 Nelder-Mead 可以解决其中的许多/大部分问题。
如果您发现重复搜索相同的值,您还可以添加一个简单的缓存机制。
关于java - 预计算大型值表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5545998/