规则匹配引擎——思路2
2011-11-26 22:58
169 查看
上篇分析到想通过运用规则间关系来尽量减少比较次数,然后初步得出的结果是比较乱,然后呢?
不能因为乱,这条路就不走了,规则间的关系是很好的信息可供利用,那问题就是,为什么运用这关系会比较乱?有没有不乱的情况?
我们可以很容易的想到如下两条规则,保证不乱:
对于这两条规则,当满足任何一个,另一个肯定不满足,原因是因为这两条规则的范围是相异的。想到这里,那之前规则乱的原因也找出来了:规则范围有重叠!
我们把之前的三条规则,连同上述两个规则的2作为规则4,放在同一个数轴上来看他们的范围:
从这个数轴可以直观的看出规则间的重合的范围,凡是落在两个规则重合范围内的数据,在匹配到1条规则的一个边界的时候,总是需要去判断是否满足另一条规则的另一个边界(包含关系中只要能匹配较小的范围规则,较大的范围规则一定能满足,但是由于不好确定哪个较小的范围需要被先匹配,因此若先匹配大的范围,被包含的小范围仍需被匹配两个端点,因此计算量扯平了)。
由此我们得出一个最简单的认识:相异好,重叠坏!
假定在一个没有重合范围的规则集合,规则范围会是这样的:
当一个规则被匹配到,其他的规则都是不能被匹配的,忠诚的都让我感动了。
而且而且,对于放在数轴上的这些范围段,难道我们还需要一个一个的匹配么?难道我们还想不到一种方法叫做2分查找么!这个如此简单而又强大的算法,蕴含的是信息论世界的基石,用抽象而又具体的话来说,就是一个蛋糕一切两份,要想自己不吃亏,那就切均匀。至此,规则匹配的问题,我们可以变成了通过二分查找数据所属的范围问题,O(N)和O(Log2N)的差异我不用解释了。
但是,我们还有个问题遗留着没有解决。我们上述的乐观,来源于我们的假定“在一个没有重合范围的规则集合中”,可这明显又是不可能的,我们的4条规则明显是不相异的。
但是,肯定是不可能的么?我们能不能让不可能变可能呢?
不能因为乱,这条路就不走了,规则间的关系是很好的信息可供利用,那问题就是,为什么运用这关系会比较乱?有没有不乱的情况?
我们可以很容易的想到如下两条规则,保证不乱:
1, {'price': '0<x<50'} 2, {'price': '50<x<150'}
对于这两条规则,当满足任何一个,另一个肯定不满足,原因是因为这两条规则的范围是相异的。想到这里,那之前规则乱的原因也找出来了:规则范围有重叠!
我们把之前的三条规则,连同上述两个规则的2作为规则4,放在同一个数轴上来看他们的范围:
-------50----75----------------150------ 1. -------------------------------- 2. -------- 3. -------------- 4. ------------------------
从这个数轴可以直观的看出规则间的重合的范围,凡是落在两个规则重合范围内的数据,在匹配到1条规则的一个边界的时候,总是需要去判断是否满足另一条规则的另一个边界(包含关系中只要能匹配较小的范围规则,较大的范围规则一定能满足,但是由于不好确定哪个较小的范围需要被先匹配,因此若先匹配大的范围,被包含的小范围仍需被匹配两个端点,因此计算量扯平了)。
由此我们得出一个最简单的认识:相异好,重叠坏!
假定在一个没有重合范围的规则集合,规则范围会是这样的:
---10---20---30---40---50---60------> 1. ----- 2. ----- 3. --------------
当一个规则被匹配到,其他的规则都是不能被匹配的,忠诚的都让我感动了。
而且而且,对于放在数轴上的这些范围段,难道我们还需要一个一个的匹配么?难道我们还想不到一种方法叫做2分查找么!这个如此简单而又强大的算法,蕴含的是信息论世界的基石,用抽象而又具体的话来说,就是一个蛋糕一切两份,要想自己不吃亏,那就切均匀。至此,规则匹配的问题,我们可以变成了通过二分查找数据所属的范围问题,O(N)和O(Log2N)的差异我不用解释了。
但是,我们还有个问题遗留着没有解决。我们上述的乐观,来源于我们的假定“在一个没有重合范围的规则集合中”,可这明显又是不可能的,我们的4条规则明显是不相异的。
但是,肯定是不可能的么?我们能不能让不可能变可能呢?
相关文章推荐
- 规则匹配引擎——思路3
- 规则匹配引擎——思路1
- 旗正规则引擎设计思路
- 【java规则引擎】模拟rete算法的网络节点以及匹配过程
- 调试nginx匹配规则的一个思路
- 漫话规则引擎(2): 模式匹配算法
- Drools 规则引擎的使用总结
- 数据库设计(二)(引擎,命名规则,字段类型的选择比较)
- 烂泥:haproxy学习之手机规则匹配
- Spring MVCServlet拦截匹配规则可以自已定义,Servlet拦截哪种URL合适?
- 基于Rete算法的JAVA规则引擎
- JBoss Rules 学习(四): Drools规则引擎 (下)
- servlet的url-pattern匹配规则详细描述
- Android中的Intent Filter匹配规则介绍
- php正则表达式匹配用户名规则:由字母开头的6-16位字母和数字组成的字符串
- 规则引擎Ilog Jrules开发基础教程【连载1】-- 概述篇
- 规则引擎处理海量数据实现工作日志(一)
- Android屏适配-资源文件夹命名与匹配规则
- Drools6.1规则引擎环境搭建
- iptables time 时间匹配规则