这是我第一次在这里发表,所以在此先感谢,并且如果我不遵循格式指南,请耐心等待。在多项式表达式中收集不相交的词条
我的问题如下:我在可变几个多项式表达式的“s”到10度每个系数然后其他高达10个变量的函数。总的来说,所有系数函数的代码占用大约800个文本包装的代码行,其中单个系数具有多达40行代码。我正在用C++编写一个优化例程,试图确定系数所依赖的10个变量中每一个的最优值。
剖析我的代码,我看到,我花我的时间78%,在这一个功能。为了优化,我想搜索整个代码并找到冗余计算,在例程开始时计算它们,并用先前计算的表达式替换它们的所有出现。问题是,最频繁出现的表达可能是这样的:
a0 = ... + R1*R2*G1*R3 + R1*R2*H1*R3 + ...;
我想找到一种方法,通过线搜寻和整理出R1*R2*R3
方面的东西来取代它们像X
其中X = R1*R2*R3;
在代码的开始处声明。这些正则表达式在整个代码中可能会出现几百次,所以我相信这可以大大提高我的运行时间。另外,我只能将由乘法分隔的事物分组,而不是加法分组。
基本上,我需要一个替换字符串函数,可以找到不相交的字符串,其成员条款因其他条款和*
迹象是分开的,但不+
迹象。这可能是一个高难度的命令,或者非常简单,我真的不确定。
我有数学,MATLAB,并提供给我枫树和运行Debian的,这样我就可以下载东西,如果它是可能更有帮助开源。我通常使用Emacs进行编程,但我绝不熟悉它的所有功能。我愿意接受任何建议,并非常感谢您的帮助。
如果我理解正确,你想要一个预处理工具来扫描你的源代码的文本,并发布修改后的源代码? – thb 2012-04-01 15:00:02
(顺便说一句,你有数学,MATLAB和Maple运行在* Debian的?*使用Wine吗?这是一个巧妙的技巧。) – thb 2012-04-01 15:02:50
这有可能是你的编译器已经做了一定的[*常见的子表达式消除*]( http://en.wikipedia.org/wiki/Common_subexpression_elimination)。 – 2012-04-01 15:43:36