這是我第一次在這裏發表,所以在此先感謝,並且如果我不遵循格式指南,請耐心等待。在多項式表達式中收集不相交的詞條
我的問題如下:我在可變幾個多項式表達式的「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