在过去,我不得不开发一个程序,作为规则评估者。您有一个先行词和一些后继词( Action ),因此,如果该先行词逃避了执行,那么这些 Action 就是真实的。
那时,我使用了RETE algorithm的修改版本(只有三种版本的RETE,只有第一个是公开的),用于进行先前的模式匹配。我们在这里谈论的是一个大型系统,每个规则有数百万个操作,而一些操作符在多个规则中“重复”了。
我可能必须用其他语言重新实现,即使我在RETE方面经验丰富,有人知道其他模式匹配算法吗?有什么建议还是我应该继续使用RETE?
最佳答案
TREAT算法类似于RETE,但不记录部分匹配项。因此,在某些情况下,它使用的内存可能少于RETE。同样,如果您修改了大量已知事实,那么TREAT可以更快,因为您不必花时间在撤回上。
还有RETE*,它通过保存一些联接节点状态来平衡RETE和TREAT之间的关系,具体取决于您要使用多少内存。因此,您仍然可以节省一些断言时间,还可以根据调整系统的方式节省内存和收回时间。
您可能还需要 checkout LEAPS,它使用了惰性评估方案并结合了RETE和TREAT的元素。
我在RETE方面只有个人经验,但似乎RETE *或LEAPS是更好,更灵活的选择。
关于algorithm - 模式识别算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33076/