问题决策树如下:重构使用自动学习
我开发了一个表达式计算引擎,它提供了类似XPath语言给用户,因此他可以构建表达式。这些表达式然后被解析并存储为表达式树。有很多种表达式,包括逻辑(和/或/不),关系式(=,!=,>,<,> =,< =),算术(+, - ,*,/)和if/then /其他表达式。
除了这些行动,表达可以有常量(数字,字符串,日期等),也可以通过使用类似XPath的语法在Java对象树导航访问外部信息。
鉴于上述情况,我们可以建立这样的表达式:
/some/value and /some/other/value
/some/value or /some/other/value
if (<evaluate some expression>) then
<evaluate some other expression>
else
<do something else>
由于当时部分和IF-THEN-ELSE表达式是表达式本身的其他部分,一切都被认为是一个表达式,那么任何东西都可以出现在那里,包括其他的if-then-else,允许用户通过嵌套if-then-else来构建大型决策树。
由于这些表达式是手动建立和容易出现人为错误,我决定建立能够优化基于共同的外部数据的分析这些表达式树的自动学习过程。例如:在上面的第一个表达式(/一些/值和/一些/其他/值),如果/一些/其他/值是假大部分时间,我们可以重新排列树的结果所以这分支将是左侧分支以利用短路评估(由于左侧已经确定了结果,所以AND的右侧未被评估)。
另一种可能的优化是重新排列嵌套的if-then-else表达式(决策树),以便基于最常用的外部数据采用的最频繁路径将在未来更早执行,避免不必要的评估大部分时间都是分支。
你有什么是最好的或推荐的方法/算法,以用于执行这些表达式树的这种自动重构的任何想法?
我不明白,优化会如何帮助您解决人为错误? – svick