是否有类似于树数据结构的半格的数据结构?


13

如果我们将树视为部分有序集,则它成为联接半格的特例。对于联接半格,我们希望能够高效地计算(或多或少)两个元素的(唯一)最小上限。在树的情况下,将使之成为可能的数据结构将是为对应节点中的每个元素存储指向父级的指针和到根的距离度量。(实际上,基于拓扑排序的标记通常用于“到根的距离度量”,实际上,所需的全部是可以有效评估的兼容部分顺序)。

每个有限的连接语义都可以表示为一个有限集合的子集集合,其包含顺序如下,使得最小上限由集合的并集给出。因此,用有限数量的标签表示每个元素,并通过对应标签的并集计算最小上限将是一种可能的数据结构。(通过观察补码,可以看到将最小上限定义为相应标签的交集也是可能的。)一种更为常见的数据结构是简单地使用矩阵来存储“ a <= b”,甚至是“ join(a,b)”的所有结果。

但是,使用这样的数据结构表示树会有些奇怪。联接符号是否还有更多类似树的数据结构,这些结构仍允许(或多或少)有效地计算两个元素的(唯一)最小上限?(也许某种有向无环图在节点中具有类似于树根的距离度量的附加信息?)


2
如上所述,来自math.hawaii.edu/~jb/math618/os2uh.pdf的定理2.2 表明,半格可以表示为一组子集(以相对琐碎的方式)。
Thomas Klimpel,2012年

Answers:


9

这个关于晶格理论的博客文章有一个有用的参考部分,其中包括Vijay K. Garg撰写的“晶格理论及其应用”。第2章“表示姿势集”描述了一些表示姿势的数据结构,并讨论了如何使用这种数据结构计算join(x,y)。

讨论的前两个数据结构是可及约简图(= Hasse图/覆盖关系)和可及闭合图(= poset关系)的邻接列表表示。在讨论之前先讲一下使用拓扑排序标记节点的优点。请注意,拓扑分类的标签足以作为“到根的距离度量”,这是问题中一棵树的数据结构的一部分。

讨论的其他表示形式是“骨骼表示”,“矩阵表示”和“基于维度的表示”。“骨骼表示”是有趣且有用的,但它基于摆臂的(=任意)链分解。“矩阵表示法”看似微不足道,但它可能是大多数实际问题的最佳表示法。“基于维度的表示形式”将波塞尔表示为线性阶的笛卡尔积的子集,但是计算此类最小表示形式是NP-困难的。

总之,这些的最树状表示是可传递约简的邻接表表示以及通过拓扑排序标记节点(而不是“到根的距离度量”)。这实际上是Sage使用的一种表示形式(另一种是“矩阵表示形式”)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.