java - 预计算大型值表

标签 java algorithm

我的程序中有一个数学公式,它接受两个介于 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/

相关文章:

Java Netbeans 在单独的窗口中打开 jFrame 文件选择器

java - SLF4J 绑定(bind)问题

algorithm - count min sketch 如何找到流中出现频率最高的项目? - 重击手

algorithm - 使用四叉树算法的图像压缩

algorithm - 有向无环图算法中单源最短路径的运行时间

algorithm - 设置数组中的最后 N 位

java - Android 日历重复事件有错误的结束日期/时间

java - 尝试在空对象引用上调用虚拟方法 'int android.view.View.getImportantForAccessibility()'

java - JVM 在启动时锁定 JAR 文件

algorithm - 改进慢速算法的反馈