任意多个区间的交,并

化简常量表达式可能会遇到任意多个区间的交,并。

下面简单描述算法。

一 任意多个交

集合分为六种类型。

1 单点集 x=a

2 空集

3 全集

4 两个参数的区间 a<x<b

5 正无穷 x>a

6 负无穷 x<b 

其中1,4可以多个。假设已经全为不交情形。

两个上述六种类型的并的交:

单点集,空集,全集都比较简单,可先不考虑。

只考虑多个4,及单个5,6情形。

1 如果两个都含有负无穷,取小的为a。保存x<a。否则空。继续。

2 如果两个都含有正无穷,取大的为b。保存x>b。否则空。继续。

3 记A为上述xa,B为上述xb。如果不存在则取所有区间的最小最大值。

4 对区间[xa,xb]遍历如下:从左到右

    设a1,b1;a2,b2;.....;an,bn;

       c1,d1;c2,d2;.....;cm,dm;

    取a1,c1最大值不妨设为a1。记A0=a1,B0=b1. 此时对于另一边有三种情况:

     d1>a1且d1<b1:保存(a1,d1) 取下一个区间继续。

     d1<a1:取下一个区间继续。

     d1>b1:保存(a1,b1)取下一个区间继续。

二 任意多个并:

1 前面留大的;

2 后面留小的;

3 同样处理;

4 区间遍历 (a1,b1)(a2,b2)设a1小,

      a2>b1或b2<b1 舍去继续;

      a2<b1且b2>b1 保存成一个(a1,b2)继续。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值