小陈第一天到“星辰科技”报到,HR 递给他一张公司组织架构图。图的最上方是 CEO,往下分产品、技术、运营三条线,再往下是各项目组和小组。奇怪的是,这张图只画了“直接汇报”的线:产品总监连到 CEO,产品经理连到产品总监,却没有一条线从产品经理直接画到 CEO——因为大家都默认“上级的上级也是上级”。这张图背后的数学结构,就是本文的主角:偏序关系与哈斯图。从“谁向谁汇报”这种最日常的场景出发,你会发现自反、反对称、传递、极大极小元、上界与确界、格与布尔代数,全都藏在这一张图里。学会这一课,你就拿到了一把通用的“层级结构解剖刀”——无论是编译依赖、数据血缘,还是权限模型,都能一眼看清骨架。

岗位关联

偏序与哈斯图是算法分析、任务调度、数据血缘建模的底层语言。掌握它,你能快速看懂各类 DAG 结构与层级依赖问题,为工程决策提供数学直觉。

目录
  1. 可视化演示
  2. 偏序关系定义:三个公理管住“不高于”
  3. 哈斯图绘制:三步化简法
  4. 极大元与极小元:层级的顶端与底端
  5. 上界与确界:找共同经理的艺术
  6. 格与布尔代数:任务合流系统
  7. 工程应用:依赖即偏序
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

偏序关系满足自反性、反对称性与传递性,是描述元素间层次结构的重要工具。本文详解偏序与全序的区别、极大元与极小元... 切换模式查看不同维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

一、偏序关系:核心原理 动态展示关键流程与数据流动 交互控件调节参数实时渲染 f(x) = transform(x) 核心概念的可视化呈现

偏序关系定义:三个公理管住“不高于”

小陈拿着组织图问 HR:“什么叫做‘比谁低’?”人事姐姐说,我们定义一个关系 ≤:“如果 x 的职位不高于 y,就记 x ≤ y。”比如“实习生 ≤ 组长”“组长 ≤ 总监”。这个关系有三个朴素的要求:第一,任何人都不高于自己;第二,如果两个人互相不高于对方,那他们只能是同一个人;第三,上级的上级依然是上级。这三条听着像废话,却是整个偏序世界的公理。

把这三条翻译成数学语言,“不高于”关系就叫偏序关系(partial order),带偏序的集合记为 (S, ≤)。注意,这里的 ≤ 不一定是我们熟悉的数字比大小——它可以是公司层级、集合包含、整数整除、字符串前缀。关键点在于:偏序不要求所有人都能比较。产品经理和算法工程师各在不同的汇报线上,谁更高?答案是“不可比”。这正是“偏”字的含义:只保证部分元素可比。

技术展开,偏序集的三条公理如下:

如果任意两个元素都能比较——即对任意 x, y,x ≤ y 或 y ≤ x 至少成立——这个关系就叫全序(total order)。公司里一条单一汇报线(实习生→组长→总监→CEO)是全序;整张组织图是偏序,因为两个部门的人不可比。实数上的 ≤ 是全序,正整数上的“整除”是偏序:2 和 3 谁也整除不了谁。所以 HR 那张图,本质上就是一个 (员工集合,不高于关系) 的偏序集。

(S,≤) 是偏序集  ⟺  {∀x∈S: x≤x(自反性)x≤y∧y≤x⇒x=y(反对称性)x≤y∧y≤z⇒x≤z(传递性)\displaystyle (S,\le)\ \text{是偏序集} \iff\begin{cases}\forall x \in S:\ x \le x & \text{(自反性)}\\x \le y \land y \le x \Rightarrow x=y & \text{(反对称性)}\\x \le y \land y \le z \Rightarrow x \le z & \text{(传递性)}\end{cases}
通俗地说:人人不高于自己;双向都不高于对方就是同一个人;汇报链可以跨级推导。
  1. 集合与关系先有一个集合 S(公司全体员工),再有一条规则 ≤(职位不高于),合起来构成 (S, ≤)。
    S×S={(x,y)∣x,y∈S, x≤y}\displaystyle S \times S = \{(x,y) \mid x,y \in S,\ x \le y\}
  2. 自反性任意元素 x 都要满足 x ≤ x——每个人当然不高于自己。
    ∀x∈S: x≤x\displaystyle \forall x \in S:\ x \le x
  3. 反对称性若 x 不高于 y,同时 y 也不高于 x,二者必是同一个元素,杜绝循环。
    x≤y∧y≤x⇒x=y\displaystyle x \le y \land y \le x \Rightarrow x = y
  4. 传递性x 是 y 的下级、y 是 z 的下级,则 x 是 z 的下级,汇报关系可“跳级”。
    x≤y∧y≤z⇒x≤z\displaystyle x \le y \land y \le z \Rightarrow x \le z

哈斯图绘制:三步化简法

小陈想把人缘关系画清楚,把“不高于”关系全连上线。结果:每个员工先画个自环,再把自己和所有上级全连起来,图瞬间糊成一团。HR 笑着说:“画组织图,只画直接汇报线。”这句话,就是哈斯图的灵魂。

把完整关系图变成极简组织图的算法,叫哈斯图(Hasse diagram)。它只有三步:第一步,删掉所有指向自己的自环——自反性不需要表达;第二步,删掉能由别的边“推导出来”的传递边,比如既然有 实习生→组长→总监 的路径,那条从实习生直接连到总监的边就是冗余的;第三步,约定方向统一向上——较小的元素放下面,较大的元素放上面,从此不画箭头,读者默认自下而上解读。删完自环和传递边,剩下的边恰好是“覆盖关系”:

小陈恍然大悟:公司墙上那张只有直接汇报线的组织架构图,就是一张哈斯图;a→c→f 这类绕行路径根本不需要出现,因为走路的人自己会走。哈斯图让我们从密密麻麻的关系网中解放出来,只保留支撑整个层级的最少信息。

y 覆盖 x  ⟺  x<y ∧ ∄ z∈S: x<z<y\displaystyle y\ \text{覆盖}\ x \iff x < y \ \wedge\ \nexists\, z \in S:\ x < z < y
通俗地说:y 是 x 的顶头上司,中间没有隔着任何缓冲层。
  1. 严格小于x < y 表示 x ≤ y 且 x ≠ y,即 x 是 y 的真下级,不是平级。
    x<y  ⟺  x≤y ∧ x≠y\displaystyle x < y \iff x \le y \ \wedge\ x \ne y
  2. 不存在中间层找不到任何 z 夹在 x 与 y 之间,x 和 y 之间没有“缓冲层级”。
    ∄ z∈S: x<z<y\displaystyle \nexists\, z \in S:\ x < z < y
  3. 覆盖的整体含义覆盖边就是哈斯图里的直接连线,是“直接汇报”而非“跨级汇报”。
    x≤y ∧ y 是 x 的直接上级\displaystyle x \le y \ \wedge\ y\ \text{是}\ x\ \text{的直接上级}

极大元与极小元:层级的顶端与底端

小陈继续看这张哈斯组织图,最上面是 CEO——没有顶头上司;最下面是一批实习生——没有下属。在偏序集的语言里,这种“顶端”和“底端”有精确的名字:极大元和极小元。

定义非常直观:极大元(maximal element)是没有严格上位者的元素;极小元(minimal element)是没有严格下位者的元素。注意,极大元不等于最大元:最大元(greatest element)要求大于等于所有元素,且若存在必然唯一;而极大元可以有很多个。比如公司实行双 CEO 制,两个 CEO 互不可比,他们都是极大元,但没有最大元。

在哈斯图里,极大元就是没有边从自己向上伸出去的点,极小元就是没有边从下面伸进来的点。组织图顶部可能站着好几位并列大佬,底部蹲着一大批实习生——这就是“多个极大元、多个极小元”的直观画面。而在一条汇报链(全序子集)上,极大元自然就是最大元,两者合一。

\displaystyle m \text{ 是极大元} \iff \nexists x \in S:\ m < x;\qquadM \text{ 是最大元} \iff \forall x \in S:\ x \le M
\displaystyle n \text{ 是极小元} \iff \nexists x \in S:\ x < n;\qquadm_0 \text{ 是最小元} \iff \forall x \in S:\ m_0 \le x
通俗地说:极大元像“没有老板的人”,最大元像“全公司唯一的老板”;前者可以有多个,后者有且仅有一个。
  1. 极大元找不到任何一个元素严格大于 m,m 在哈斯图顶部“无人压制”。
    ∄x∈S: m<x\displaystyle \nexists x \in S:\ m < x
  2. 最大元所有元素都 ≤ M,M 能压住全公司每一个人,是唯一的“总老板”。
    ∀x∈S: x≤M\displaystyle \forall x \in S:\ x \le M
  3. 两者的区别极大元允许并列且互不可比;最大元因为反对称性,最多只有一个。
    m1≤m2 ∧ m2≤m1⇒m1=m2\displaystyle m_1 \le m_2 \ \wedge\ m_2 \le m_1 \Rightarrow m_1 = m_2
  4. 极小与最小的对称性把箭头反过来,“没人管”换成“不管别人”,一切照推。
    ∄x∈S: x<n\displaystyle \nexists x \in S:\ x < n

上界与确界:找共同经理的艺术

公司要做“AI 客服”项目,需要前端组 a 和后端组 b 合作。两个小组各说各话吵翻天,谁有权拍板?HR 提示小陈:“别吵了,去找他们的共同上级。”在偏序集里,“共同上级”有一个正式名字叫上界。

更精确地:给定子集 A(比如跨部门项目成员集合),如果存在 u 使得 A 里所有元素都 ≤ u,u 就叫 A 的上界(upper bound)——也就是共同上级。所有上界里最“低”的那个,即距离 A 最近的共同经理,称为上确界(supremum),记作 sup A。对称地,下界是同时低于所有元素的“共同下属”,下确界(infimum)是其中最高的那个。

上确界有时不存在:两个部门各走各的汇报线,没有任何人同时管辖两边,那上界不存在,sup 也就无从谈起。这与下一节的格密切相关——格之所以特殊,就是因为它要求“任意两人都一定有共同上级和共同下级”。“两个小组的最近共同经理”就是一次求 sup 的操作:前端和产品向上 ping,ping 到了技术 VP,技术 VP 就是那次 ping 的 sup。

u 是 A 的上界  ⟺  ∀a∈A: a≤u;sup⁡A=min⁡{u∣∀a∈A, a≤u}\displaystyle u \text{ 是 } A \text{ 的上界} \iff \forall a \in A:\ a \le u;\qquad\sup A = \min\{u \mid \forall a \in A,\ a \le u\}
ℓ 是 A 的下界  ⟺  ∀a∈A: ℓ≤a;inf⁡A=max⁡{ℓ∣∀a∈A, ℓ≤a}\displaystyle \ell \text{ 是 } A \text{ 的下界} \iff \forall a \in A:\ \ell \le a;\qquad\inf A = \max\{\ell \mid \forall a \in A,\ \ell \le a\}
通俗地说:上确界是“最近共同上司”,下确界是“最高共同下属”。先找共同点,再在共同点里挑最近的那个。
  1. 上界的定义u 要同时罩住 A 里的每个元素,缺一个都不行。
    ∀a∈A: a≤u\displaystyle \forall a \in A:\ a \le u
  2. 上确界把所有上界收集起来,取其中“最小”的一个。
    sup⁡A=min⁡{u∣∀a∈A, a≤u}\displaystyle \sup A = \min\{u \mid \forall a \in A,\ a \le u\}
  3. 下界与下确界方向反过来,找“共同下属”里最高的那个。
    inf⁡A=max⁡{ℓ∣∀a∈A, ℓ≤a}\displaystyle \inf A = \max\{\ell \mid \forall a \in A,\ \ell \le a\}
  4. 存在性提醒上界不一定存在,上确界自然也无从谈起。
    ∄u∈S: ∀a∈A, a≤u ⇒ sup⁡A 不存在\displaystyle \nexists u \in S:\ \forall a \in A,\ a \le u \ \Rightarrow\ \sup A\ \text{不存在}

格与布尔代数:任务合流系统

星辰科技内部有一套“任务合流系统”:任何两个需求单都能自动找到一张“汇总任务单”(共同上级),也都能拆到一张“公共子任务单”(共同下属)。HR 说:这样的偏序集,数学家叫它“格”。

严格定义:若偏序集 (L, ≤) 中任意两个元素 a, b 都有上确界和下确界,就称 L 为格(lattice)。上确界又叫并(join,记 a ∨ b),下确界又叫交(meet,记 a ∧ b),它们很像集合的并和交。进一步:若 ∨ 与 ∧ 互相满足分配律,叫分配格(distributive lattice);若有最大元 1 和最小元 0,叫有界格(bounded lattice);若每个元素 x 都有唯一的补元 ¬x 满足 x ∨ ¬x = 1 且 x ∧ ¬x = 0,并且分配律成立,就得到布尔代数(Boolean algebra)——数字电路、权限系统、命题逻辑的公共骨架。

权限系统就是布尔代数:用户权限是集合 {读,写},两个角色取并就是合并权限,取交就是交集权限;最高权限 1 是“全部权限”,最低权限 0 是“无权限”,每个权限集合都有补集。小陈感叹:原来自己在 OA 系统里每天都在点布尔代数。

(L,≤) 是格  ⟺  ∀a,b∈L: sup⁡{a,b} 和 inf⁡{a,b} 都存在\displaystyle (L,\le)\ \text{是格} \iff \forall a,b \in L:\ \sup\{a,b\}\ \text{和}\ \inf\{a,b\}\ \text{都存在}
布尔代数:a∨¬a=1,a∧¬a=0\displaystyle \text{布尔代数}:\quad a \vee \lnot a = 1,\qquad a \wedge \lnot a = 0
通俗地说:格像“任务合流系统”,任何两个任务都能合并也能拆分;布尔代数再多给每个元素配一个“反面对立面”。
  1. 格的条件任意两个元素都能求 sup 和 inf,像任意两人都有共同上司和共同下属。
    ∀a,b∈L: sup⁡{a,b} 与 inf⁡{a,b} 存在\displaystyle \forall a,b \in L:\ \sup\{a,b\}\ \text{与}\ \inf\{a,b\}\ \text{存在}
  2. 并运算a ∨ b 是“向上合流”到最近的共同上级。
    a∨b=sup⁡{a,b}\displaystyle a \vee b = \sup\{a,b\}
  3. 交运算a ∧ b 是“向下分流”到最近的共同下级。
    a∧b=inf⁡{a,b}\displaystyle a \wedge b = \inf\{a,b\}
  4. 补元律与布尔代数每个元素都有唯一“补元”,像权限集合的补集。
    a∨¬a=1,a∧¬a=0\displaystyle a \vee \lnot a = 1,\quad a \wedge \lnot a = 0

工程应用:依赖即偏序

老板让小陈负责一次版本发布:需求评审 → 编码 → 写用例 → 联调 → 发布。这些任务之间存在“必须先做”的依赖:编码和写用例都要等需求评审,联调要等两者完成,发布最后做。小陈画出来一看——这不就是哈斯图吗?

把任务看作元素,把“必须先于”看作偏序关系(严格版用 <,非严格版用 ≤ 表达“不晚于”),整个依赖关系就是一张有向无环图(DAG),也就是偏序集的图表示。工程上最常见的操作是拓扑排序(topological sort):把全部任务排成一列,使得每条依赖边 (u, v) 都满足 u 排在 v 前面。Kahn 算法每次摘掉“没有未完成前置”的节点,反复执行,得到的就是偏序的一个线性扩展——把不可比的元素强行排成一条全序,但不破坏原有的比较关系。

编译器、Gradle、make、数据仓库的血缘分析,全都在做同一件事:把依赖图拓扑排序后按序执行。小陈终于明白,星辰科技的版本发布流水线、CI 的构建顺序,甚至“前端等后端接口”的协作顺序,都只是同一张哈斯组织的不同投影。偏序与哈斯图,就是理解一切层次的通用语法。

拓扑排序:∀(u,v)∈E: pos(u)<pos(v)\displaystyle \text{拓扑排序}:\quad \forall (u,v) \in E:\ \mathrm{pos}(u) < \mathrm{pos}(v)
通俗地说:把一锅“谁先谁后”的偏序,拉直成一条合理排队序列;依赖关系全部从左到右满足。
  1. 依赖边集合 E每条边 (u, v) 表示 u 必须先于 v,E 是全体依赖约束。
    E={(u,v)∣u 必须先于 v}\displaystyle E = \{(u,v) \mid u\ \text{必须先于}\ v\}
  2. 位置函数pos(u) 表示任务 u 在最终序列中的排位。
    pos: V→N\displaystyle \mathrm{pos}:\ V \to \mathbb{N}
  3. 约束条件对每条边,出发点的位置必须小于终点,依赖关系零违例。
    ∀(u,v)∈E: pos(u)<pos(v)\displaystyle \forall (u,v) \in E:\ \mathrm{pos}(u) < \mathrm{pos}(v)

AI 应用场景

数据血缘与故障根因定位

阶段:数据工程 / 特征工程

解决的问题:特征表被多条下游任务消费,一旦指标异常,传统排查靠人肉翻脚本,效率极低。AI 数据平台用偏序关系把“表依赖”组织成 DAG 哈斯图,异常时沿边向上回溯,快速找到最近公共上游(上确界),定位故障源头。

具体案例:某推荐系统特征表 T 和标签表 L 都依赖中间表 M,M 又依赖原始表 O。某天 T 的指标骤变,血缘平台按偏序图回溯,两步定位到 O 的清洗逻辑变更,避免了逐层排查。

训练任务调度与流水线编排

阶段:MLOps 流水线

解决的问题:训练、评估、打包、上线有严格先后,同时又存在可并行分支(数据增强 vs 特征工程)。用“不晚于”偏序建模任务依赖,再用拓扑排序生成合法执行顺序,替代手工写死脚本。

具体案例:某推荐团队每天 12 个 job 编排成 DAG,Kahn 算法生成执行序列,并行分支自动并发,流水线总耗时缩短到原来的三分之一。

大模型权限策略与布尔代数

阶段:AI 系统准入与策略管理

解决的问题:企业 LLM 网关的权限策略按“能力子集”组织,本质是布尔代数。管理员角色拥有 {对话,知识库,文件解析},普通角色仅 {对话},角色合并=权限集合取并,交集权限=取交,补元=撤销某类能力。

具体案例:某金融公司部署 LLM 网关,按格结构合并角色权限后,自动推导出“普通员工 + 临时分析师”的最终能力集,上线审批从 2 天缩短到 10 分钟。

Python 演示

python68 行
def make_poset(elements, direct):    # build full partial order by transitive closure    edges = set(direct) | {(x, x) for x in elements}    changed = True    while changed:        changed = False        for (a, b) in list(edges):            for (c, d) in list(edges):                if b == c and (a, d) not in edges:                    edges.add((a, d))                    changed = True    return edges  def hasse_reduce(edges):    # keep only covering edges: no z exists with x < z < y    vertices = {v for e in edges for v in e}    hasse = set()    for (a, b) in edges:        if a == b:            continue        redundant = any((a, z) in edges and (z, b) in edges                        for z in vertices if z != a and z != b)        if not redundant:            hasse.add((a, b))    return hasse  def check_poset(elements, edges):    # verify the three axioms of partial order    reflexive = all((x, x) in edges for x in elements)    antisym = all((y, x) not in edges or x == y for (x, y) in edges)    transitive = True    for (a, b) in edges:        for (c, d) in edges:            if b == c and (a, d) not in edges:                transitive = False    return reflexive, antisym, transitive  def topo_sort(elements, direct):    # Kahn: keep taking tasks with no unfinished dependency    indeg = {x: 0 for x in elements}    out = {x: [] for x in elements}    for (a, b) in direct:        out[a].append(b)        indeg[b] += 1    queue = [x for x in elements if indeg[x] == 0]    order = []    while queue:        x = queue.pop(0)        order.append(x)        for y in out[x]:            indeg[y] -= 1            if indeg[y] == 0:                queue.append(y)    return order  if __name__ == "__main__":    # example: release a feature, same DAG as the article    tasks = ["需求评审", "编码", "写用例", "联调", "发布"]    deps = [("需求评审", "编码"), ("需求评审", "写用例"),            ("编码", "联调"), ("写用例", "联调"), ("联调", "发布")]    full = make_poset(tasks, deps)    print("偏序边数:", len(full), "公理检查:", check_poset(tasks, full))    print("哈斯图(覆盖关系):", sorted(hasse_reduce(full)))    print("拓扑排序:", topo_sort(tasks, deps))
目的:把“版本发布”的任务依赖做成偏序集,先补传递闭包验证三公理,再抽出覆盖边得到哈斯图,最后用 Kahn 算法输出合法执行顺序。
  1. edges = set(direct) | {(x, x) for x in elements}把直接依赖变成集合,并给每个元素补自环,让关系先满足自反性。
  2. if b == c and (a, d) not in edges:发现 a≤b 且 b≤d 时补上 a≤d,用循环跑出传递闭包。
  3. redundant = any((a, z) in edges and (z, b) in edges ...检查是否存在中间人 z;有则说明 (a,b) 是传递边,冗余。
  4. if not redundant:只把覆盖边收进 hasse,这正是哈斯图。
  5. reflexive = all((x, x) in edges for x in elements)逐条验证自反公理,另外两条同理。
  6. queue = [x for x in elements if indeg[x] == 0]Kahn 算法起点:所有没有前置依赖的任务。
  7. for y in out[x]: indeg[y] -= 1一个任务完成后,解除它对后继任务的阻塞。

常见误区

误区“偏序不就是 ≤ 吗?数轴上所有数都能比大小,偏序集里也应该任意两个元素都能比较吧?”

正解≤ 只是一个符号,它可以是上下级、整除、包含、前缀。偏序只保证部分元素可比,不保证任意两元素可比;只有全序才要求任意两元素可比。公司里产品经理和算法工程师谁更高?“不可比”是偏序的正常状态,不是 bug。

为何常见:数学课从实数 ≤ 入门,先入为主地把 ≤ 和“数字大小”绑定,忽略了偏序允许“平行部门”存在。

误区“哈斯图里没有箭头,所以边没有方向,谁连谁都一样。”

正解哈斯图的箭头没有消失,而是被“自下而上”的约定吸收:读图时默认边从下往上,小在下、大在上。方向性是偏序的灵魂,丢掉方向就退回普通无向图,极大元极小元都没法辨认。

为何常见:视觉上确实没有箭头,初学者容易把“不画箭头”误解为“无方向”,忽略了排版的隐含语义。

误区“极大元应该只有一个,而且它就是比所有人都大的那个,也就是最大元。”

正解只要没有严格上位者,就叫极大元,可以有多个;最大元是唯一能压制所有元素的“总老板”。双 CEO 时两位都是极大元,但没有最大元。全序集中两者等价,偏序集中完全不同。

为何常见:在数轴全序上习惯了“唯一最大”的直觉,忘了偏序下存在“并列老大”这种常见结构。

误区“格就是全序,所有元素都能排成一条线。”

正解格只要求任意两元素都有上确界和下确界,两元素依然可以不可比。比如布尔方格 {0, a, b, 1} 中 a 与 b 不可比,但 a∨b=1、a∧b=0 都存在,它是典型的格。

为何常见:把“任何两元都能求交并”误当成“任何两元都能比较”,混淆了格与链的区别。

面试题

Q1. 偏序关系必须满足下面哪三组性质?

单选题 · easy

  • A.自反、对称、传递
  • B.自反、反对称、传递← 正确答案
  • C.反自反、反对称、传递
  • D.自反、反对称、幂等

答案:B。对称性属于等价关系,偏序要求的是反对称——双向不比对方高就是同一个人,正如公司里“互相不高于”只能是一个人。选 B。

Q2. 设 (S, ≤) 是偏序集,若 a ≤ b 且 b ≤ a,则可以推出?

单选题 · easy

  • A.a 是 b 的上级
  • B.a 与 b 不可比
  • C.a = b← 正确答案
  • D.这种情况不可能发生

答案:C。反对称公理直接给出 x≤y ∧ y≤x ⇒ x=y。公司里两个人互相“不高于”对方,只能是同一个人的两张工卡。选 C。

Q3. 正整数集合上定义 a ≤ b 当且仅当 a 整除 b,该关系是?

单选题 · mid

  • A.全序关系
  • B.偏序关系但不是全序← 正确答案
  • C.等价关系
  • D.无法构成关系

答案:B。整除满足自反(x|x)、反对称(互整除必相等)、传递(整除可跳级),是偏序。但 2 和 3 不能整除,不可比,所以不是全序。和公司组织图完全同理。

Q4. 画哈斯图时应该删除哪类边?

单选题 · mid

  • A.覆盖边
  • B.传递边← 正确答案
  • C.所有边
  • D.只有自环

答案:B。哈斯图只保留覆盖边,删除自环和传递边。传递边可由两跳路径推导,如 a→c→f 存在时 a→f 冗余,画了反而破坏“直接汇报”语义。选 B。

Q5. 设 S = {1, 2, 3, 4},偏序为整除关系,则 S 的极大元是?

单选题 · mid

  • A.1
  • B.4
  • C.3 和 4← 正确答案
  • D.2、3、4

答案:C。极大元是没有严格上位的元素。1|2、1|3、2|4,2 上方有 4;3 和 4 在 S 内没有严格整除它的元素,所以极大元是 3 和 4。正是“双 CEO”的画面。

Q6. 关于最大元,下列说法正确的是?

单选题 · mid

  • A.极大元等于最大元
  • B.最大元若存在则唯一← 正确答案
  • C.每个偏序集都有最大元
  • D.最大元可以有多个

答案:B。假设存在两个最大元 M1、M2,则 M1≤M2 且 M2≤M1,由反对称得 M1=M2,所以唯一。极大元可以不唯一,最大元必唯一。选 B。

Q7. 偏序集 S = {a, b, c} 满足 a ≤ b、a ≤ c,且 b 与 c 不可比。子集 {b, c} 的上确界是?

单选题 · hard

  • A.存在且为 a
  • B.存在且为 b
  • C.不存在← 正确答案
  • D.存在且为 c

答案:C。b、c 的上界需要同时满足 b≤u 且 c≤u。u=b 时 c≤b 不成立,u=c 时 b≤c 不成立,集合里没有能同时管住 b 和 c 的“共同上级”,上确界不存在。注意 a 是下界而非上界。

Q8. 在偏序集 (L, ≤) 中成为格需要满足哪些条件?

多选题 · mid

  • A.任意两元素都有上确界← 正确答案
  • B.任意两元素都有下确界← 正确答案
  • C.所有元素排成一条链
  • D.存在最大元 1 和最小元 0

答案:AB。格只要求任意两元素的 sup 和 inf 都存在(A、B 正确);C 把格误当全序;D 是有界格的要求,不是格的基础要求。布尔方格 {0, a, b, 1} 中 a、b 不可比,但它是格。

Q9. 下列哪些关系是偏序关系?

多选题 · hard

  • A.正整数上的整除关系← 正确答案
  • B.集合上的包含关系 ⊆← 正确答案
  • C.实数上的小于关系 <
  • D.字符串上的前缀关系← 正确答案

答案:ABD。整除、包含、前缀都满足自反+反对称+传递;< 不满足自反,是“严格偏序”,不在本文偏序定义内。前缀关系像文件夹路径:/a/b 是 /a/b/c 的前缀,构成严格层级。

Q10. 关于偏序集中的界,下列说法正确的有?

多选题 · extreme

  • A.上确界是所有上界中最小的← 正确答案
  • B.下确界是所有下界中最大的← 正确答案
  • C.只要有上界就一定有上确界
  • D.空集的上确界一定存在

答案:AB。sup=最小上界(最近共同经理)、inf=最大下界(最高共同下属),A、B 对。C 错:只有完备格才保证任意子集有 sup;D 错:空集上确界需要全局最小元 0,一般偏序集没有。