两个时间段之间,一共有几种「关系」?
一根数轴上摆两条线段 A 和 B(想成两件事各自的起止时刻)。它俩能有多少种相对位置?答案是恰好 13 种——这就是 1983 年 James F. Allen 提出的区间代数 (interval algebra)。在画布里拖动整条 A / B 移动,或拖动两端的小圆把手改变长度,下面会实时报出当前落在 13 种里的哪一种,并把右侧 13 关系图谱里对应的那格点亮。它的本质是个一维问题——关系完全由四个端点 的相对大小决定。
端点会吸附到整数刻度,这样 相等 / 紧接 / 同时开始 这类「边界恰好对齐」的情形才能精确触发。点右侧网格里任意一格即可摆成那种关系;点 交换 A↔B 看关系如何变成它的转置 (converse)。
1 · 13 种关系图谱 · 点一格即可摆成它
上排是 6 种「A 在前 / A 更大」的基本关系,下排是它们各自的转置(把 A、B 角色对调),正中间 equals 自己是自己的转置——6 对 + 1 个 = 13。
2 · 为什么恰好是 13?——「6 对转置 + 1 个自反」
每种关系都有一个转置 (converse): 若 A before B,那么从 B 的视角看就是 B after A。把 13 种两两配对:、、、、、——6 对;而 equals 的转置还是它自己。6×2 + 1 = 13。在 demo 里点「交换 A↔B」,报出的关系总会跳到它的转置那一格。
| 关系 (relation) | 简写 | 转置 (converse) | 简写 |
|---|---|---|---|
| before 先于 | b |
after 后于 | bi |
| meets 紧接 | m |
met-by 被紧接 | mi |
| overlaps 重叠 | o |
overlapped-by 被重叠 | oi |
| starts 开始于 | s |
started-by 被开始 | si |
| during 期间 | d |
contains 包含 | di |
| finishes 完成 | f |
finished-by 被完成 | fi |
| equals 等于 | eq |
equals (自反) | eq |
3 · 它的内核是「点代数」:四个端点的相对次序
A、B 各有起点终点共四个端点
(本身满足
、)。只要确定
与
、
与
、以及跨端点
与
、
与
的 < / = / >,关系就唯一确定了——上面 demo 的读出条正是这四个比较。所以 Allen 代数等价于在四个端点上做点代数 (point algebra) 推理;classify 那段代码就是把这些比较串成一棵判定树,没有循环、没有几何,纯比较。
一个常见的记号混淆:简写 d 指 during(A 在 B 内部), di 是它的转置 contains (d + inverse)。同理 bi / mi / oi / si / fi 都是在基本关系后缀 i 表示「inverse / 转置」。注意不要把 d 和
di 记反。
4 · 它用在哪里
定性时序推理 (qualitative temporal reasoning): 当我们只知道事件间的相对关系(「会议在午饭之后」、「通话期间在记笔记」),而没有精确时刻时,Allen 代数能把这些约束表达成一张图,再用组合表 (composition table) 做约束传播——已知 A before B、B
before C,就能推出 A before C;多数情况下结果是若干关系的并集,通过路径一致性 (path-consistency) 收窄,这也是 AI 规划、日程排程、叙事时间线一致性检查的底层机器。NLP / 信息抽取里抽取事件时间线(如 TimeML / TimeBank 标注)直接用这 13
种关系;数据库 SQL:2011 的 PERIOD 与时态表的区间谓词、视频 / 多媒体同步 (SMIL)、项目管理甘特图里的先后依赖,本质都是这套区间关系。
它和本系列 sweep and prune 是同一枚硬币的两面: sweep 关心「两个区间是否重叠」(broad-phase 只要布尔), Allen 关心「以何种方式重叠」(13 选 1 的定性细分)。一维区间重叠检测 () 正是 sweep 沿单轴投影做的事。
5 · 细节 / 边界情形
端点是开还是闭决定了「紧接 (meets)」的语义:本页按
即判 meets——即把区间当成共享端点的闭区间,这是 Allen 原始定义(meets 表示「A 一结束 B 就开始,中间没有空隙」)。若按半开区间 [s, e) 实现,端点相等的判定与「是否算重叠」会和闭区间不同,工程里务必统一。零长度区间(时刻点) 不在经典 13 关系内(定义要求
);本页把最小长度限制为 1 个刻度,回避退化。真要支持「区间 vs 时刻」需扩展到 point-interval 关系(另成一套,5 种)。
6 · 🔗 相关链接
- Allen's interval algebra · Wikipedia — 13 种关系的定义、转置、组合表 (composition table) 与作为约束满足问题 (CSP) 的可处理子类总览。
- Maintaining Knowledge about Temporal Intervals · Allen 1983 (CACM) — 原始论文:提出 13 种区间关系与基于组合表的约束传播算法,定性时序推理的奠基之作。
- Qualitative spatial & temporal reasoning · Wikipedia — 把 Allen 区间代数放进更大的图景:RCC-8(区域)、点代数等同源的定性推理体系。
- SQL:2011 temporal features · Wikipedia — 标准里
PERIOD与 application-time 时态表如何用区间谓词(含OVERLAPS)表达这些关系。