2.3 基于排序的算法 (sort-based)
在基于排序的方法中首先把区域投影到每个坐标轴上并单独计算重叠情况,若在所有的坐标方向上均有重叠则此发布-订购对重叠。算法将应用两个集合来存储信息:前订购域集合SubscriptionsetBefore用来存储位于当前所处理的发布域坐标位置之前的定购域信息;后订购域集合SubscriptionsetAfter则用来存储位于当前所处理的发布域坐标位置之后的定购域信息。首先,把每个域的上界和下界在每个坐标方向上排序。当扫描排序的列表时,就可能得到当前点的前定购域集合和后订购域集合。因此,就能确切了解,对于每个更新区域是哪些订购区域在给定的坐标上与之匹配。 初始条件下,由于还没有任何扫描动作,假定所有的定购域信息均被存储与SubscriptionAfter集合中,所以SubscriptionBefore集合为空集而SubscriptionAfter集合为全集。当处理到某一定购域的下界点时,说明其坐标位置肯定不能位于下一发布域之后,因此将之从SubscriptionsetAfter集合中取出,当处理到某一定购域的上界点时,说明其坐标位置肯定位于下一发布域之前,因此将之插入倒SubscriptionsetBefore集合中。当处理到某个发布域的端点时,与此发布域的不重叠信息存储于SubscriptionsetAfter集合或SubscriptionsetBefore集合中。 例如图3所示,一系列点表示了在区域在x轴上投影后的边界情况。算法从左到右扫描列表并执行下列操作:对于每个在路径空间中的限域Ri作如下操作:
· { · 把Ri的下界点插入到列表L · 把Ri的上界点插入到列表L · } · 列表L进行排序 · 定购域前集Subscriptionsetbefore= · 把所有的定购域均插入定购域后集Subscriptionsetafter · 对于列表L中的所有点Pi作下列循环 · { · R