Rete Algorithm 是一种高效的模式匹配算法,可将大量模式集与大量对象进行比较。我现在正在研究的专家系统外壳之一中也使用了它:drools
。
根据我拥有的规则数量,算法的时间复杂度是多少?
以下是Rete算法的链接:http://www.balasubramanyamlanka.com/rete-algorithm/ 也适用于Drools:https://drools.org/
答案 0 :(得分:0)
估计RETE的复杂性是一个不小的问题。
首先,您不能使用规则数量作为维度。您应该查看的是规则的单个约束或匹配项。您可以将规则视为约束在一起的集合。这就是RETE的全部理由。
一旦您对规则库具有的约束量有一个大概的估计,就需要查看那些相互依赖的约束。相互依赖的约束是最复杂的匹配,并且在概念上与SQL查询中的JOINS非常相似。它们的复杂性取决于它们的性质以及工作记忆的状态。
然后,您将需要查看工作内存的大小。您在基于RETE的专家系统中断言的事实数量会极大地影响其性能。
最后,您需要考虑引擎冲突解决策略。如果您有几个冲突的规则,则可能需要花费大量时间来找出执行它们的顺序。
关于RETE的性能,有一个非常好的PhD dissertation,我建议您考虑一下。作者是Robert B. Doorenbos,标题是“大型学习系统的生产匹配”。