用户定义的公式,评估和速度

时间:2012-12-06 10:52:43

标签: c#

假设我们有一个包含一百万个元素的数组,我们希望接受用户输入什么样的数学应用于每个元素。

程序是否需要为每个元素评估一百万次的用户公式(字符串)。或者公式本身可以以某种方式保存和解释一次?然后在循环中应用到百万元素?

我只想弄清楚它是如何工作的。因为现在看来excel类型的程序总是被解释,这对我的数据研究来说太慢了。基本上我正在做的是每次更改时重新编译用户定义的数学。似乎无法编译程序,并在程序运行时重新编译它。这样它就可以接受用户输入,编译并运行它,而不会退出。也许使用DLL和单独的应用程序域,但所有数据都必须进行编组。

当一切都不利于你时,我只是不知道如何获得数据研究的最高速度。包括由于安全问题而无法允许卸载,加载DLL的愚蠢操作系统。或者其他的东西。然而,也许我只是在胡说八道,因为几个月前我刚刚开始编程。

2 个答案:

答案 0 :(得分:0)

如果您希望针对数据集和动态编译的表达式进行用户输入,请查看合适的C# REPL

您应该能够输入您的转换等,并让REPL编译并应用它们。它是在类/组件中正确编码之前尝试解决方案的有用工具/技术。

答案 1 :(得分:0)

如果您对自己感兴趣或者更喜欢自己实现解决方案,可以将公式解析为(二进制)树,其中每个节点代表一个运算符(+, - ,*,..)或一个函数( cos(),max(),..)和每个叶子代表一个常量或一个公式的变量。

这可以通过非常有效的方式完成,然后通过递归计算根的值同时在叶子上填充正确的变量来应用于整个数据集。

要弄清楚如何最好地做到这一点,这个问题可能会提供一些指示(尽管我相当肯定答案只提供了几种方法中的一种): Create Binary Tree from Mathematical Expression

希望这有助于或者至少对其他读者有一定的兴趣!