我想问一个复杂的问题。
我必须为我的论文编写启发式代码。我需要以下:
所以我需要一种更快的编程语言来完成这些工作。你建议使用哪种语言?首先,我从Java开始,但采用积分成为一个问题。而且我不确定速度。
连接Java和MATLAB等其他软件可能是一个好主意。由于我不确定,我想听取您的意见。
谢谢!
答案 0 :(得分:1)
C,Java,...都是图灵完整的语言。他们可以以相同的精度计算相同的函数。 如果您想要达到性能目标,请使用C语言编译和高性能语言。可以减少计算时间,避免在Java等解释语言中出现方法调用和高级特性。
无论如何,请记住,您的实现可能会比您选择的语言更多地影响性能,因为增加输入维度是相关的计算复杂性(http://en.wikipedia.org/wiki/Computational_complexity_theory)。
答案 1 :(得分:1)
这不是编程语言,它可能是你的算法。确定算法的big0表示法。如果你在循环中使用循环,你可以在地图中使用散列搜索,那么你的算法可以快n
倍。
注意:现代JVM(JDK 1.5或1.6)将即时本机(如未解释)编译为特定操作系统和特定操作系统版本以及特定硬件体系结构。您可以更积极地尝试-server
到JIT(以更长的初始化时间为代价)。
这样做了一千多次。
你确定它不是更多,比如10^1000
吗?尝试准确计算运行该循环所需的次数,这可能会让您感到惊讶。使用启发式的问题类型往往具有非常大的搜索空间。
答案 2 :(得分:0)
在开始切换语言之前,我首先尝试执行以下操作:
答案 3 :(得分:0)
算法顺序
在语言之间切换只会减少常数因子所需的时间。假设您可以使用C将速度提高一倍,但如果您的算法为O(n^2)
,则无论使用何种语言,如果您将数据加倍,则需要处理四次。
JVM可以优化很多事情,从而获得良好的效果。
Java中的一些可行的优化
如果您有很多次调用的函数,请将它们 final 。整个班级也一样。编译器将知道它可以内联方法代码,避免为该调用创建方法调用堆栈帧。