“亲戚+”运营商有什么用?

时间:2012-07-11 00:45:36

标签: computer-science regular-language

我正在阅读Composite event specification in active databases: Model and implementation。在其中,描述了一种指定复合事件的方法,它类似于正则表达式。我先解释一下基础知识:事件历史记录。这些是原始事件的集合,每个事件具有唯一的时间戳(因此可以将它们视为序列,但可以对它们使用集合操作)。还有事件表达式。这些是从历史到历史的功能。应用于Eh)的表达式E[h]h的子集,其中E得到满足。例如,原始表达式a与a匹配:
a[a, b, a, c, b] = a, a(隐含时间戳)。

有这个运算符relative(E, F),它是这样定义的: 让E_i[h]成为E[h]中的第i个事件。通过删除时间戳小于或等于h_i的时间戳的所有事件发生,从h获取E_i[h]。然后是relative(E, F)[h] = union over all i:s F[h_i]。不那么正式地,relative(E, F)h中的事件发生,F满足h,假设历史在E relative(a, b)[b, c, a, c, b] = b中发生的事件后立即开始relative+(E)发生了。例如。 relative_1(E) = E(第二个b,因为之前有一个a)。

现在,有一个运算符relative_i(E) = relative(relative_i-1(E), E),我不明白这一点。定义如下:
relative+(E) = union over all positive i:s relative_i(E)
relative+(E)
E

relative(E, E)[h]E[h]的区别如何?我理解它的方式,E[h]始终是{{1}}的子集,因此它们的联合将等于{{1}}。

1 个答案:

答案 0 :(得分:1)

我明白了。要查看E[h]relative+(E)[h]的结果之间的差异,E需要比仅匹配特定类型的所有事件的基本表达式更复杂。例如:假设我们有一个事件表达式first,它始终与历史记录中的第一个事件匹配。那么first[h]当然是h的第一个元素,而relative+(first)[h]本身就是h,因为它是h中的第一个,然后是第一个h等等。