gpt4 book ai didi

c# - 评估数学表达式的最佳算法?

转载 作者:可可西里 更新时间:2023-11-01 08:05:23 25 4
gpt4 key购买 nike

评估数学表达式的最佳算法是什么?我希望能够稍微优化一下,因为我可能有一个包含各种变量的公式,我可能需要使用不同的变量对其进行数百次评估。所以基本上,如果我最初可以解析公式,以便以某种方式对其进行优化,然后我可以根据需要多次将变量传递给这个优化版本,每次它都会为我生成一个结果。

我将使用 Delphi 或 C# 编写此代码。我已经使用调车场算法编写了类似的东西,但每次我需要计算相同的公式时,我都必须经过解析阶段。必须有更好的方法来做到这一点。

最佳答案

如果你想用 Delphi 来做,你可以看看 JclExprEval 单元是如何工作的,它是 JEDI Code Library 的一部分。 .我几年前写的(它有点过度设计);它解析函数和变量,并可以返回一个快速计算表达式的方法指针。通过引用传入变量,你可以直接改变它们,重新计算的表达式将相应地计算。

无论如何,了解其工作原理的基础知识可能对您有所帮助。表达式的递归下降解析很容易,通过构建树,您可以多次求值而无需重新解析。 JclExprEval 实际上为一个简单的堆栈机器生成代码,因此它可以比树解释更快地工作;堆栈机器在很大程度上将它们的内存操作限制为数组并使用开关来处理操作码,而树解释遵循整个堆中的链接并且通常对操作码使用虚拟分派(dispatch)(或双重分派(dispatch)),因此它们通常以较慢的速度结束。

在解析中采用与 JclExprEval 相同的方法,但用 C# 编写,并构建一个 Expression,如 Marc 所建议的,是另一种完全有效的方法。 JIT 编译的表达式应该比解释表达式程序或树快很多,它们本身比解析快得多。

关于c# - 评估数学表达式的最佳算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/572796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com