【问题标题】:data structure for recombining tree: parents are permutations重组树的数据结构:父母是排列
【发布时间】:2019-05-14 18:53:10
【问题描述】:

我正在尝试创建一个数据结构来描述某种类型的重组“组合”树(类似于here)。

首先,考虑一棵树,其中每个节点都有一个特定的 ID,该 ID 由到达该节点所需的序列描述。以固定列表Q = [1,2,3]为例,根据序列图SQ的可能排列排列成一棵树T

S =
        _0_
      /  |  \
     1   2   3
    /|  / \  |\
   2 3 1   3 1 2
   | | |   | | |
   3 2 3   1 2 1

然后给每个节点一个字母,A, B, C,...T可以表示为:

T = 
        _0_
      /  |  \
     A   B   C
    /|  / \  |\
   D E F   G H I
   | | |   | | |
   J K L   M N O    

在哪里

A = {1}
B = {2}
C = {3}

D = {1,2}
E = {1,3}
F = {2,1}
G = {2,3}
H = {3,1}
I = {3,2}

J = {1,2,3}
K = {1,3,2}
L = {2,1,3}
M = {2,3,1}
N = {3,1,2}
O = {3,2,1}

现在,我的目标是提出一个数据结构,使得重组的树以节点JL 是同一个对象(即重组)的方式重组,同样K 和@987654334 @重组,最后是MO重组。重组的规则是它们的父母DFEH,以及GI包含相同的元素,并且序列中的下一个元素相同。更详细地说,导致JL 之间等价的规则是它们的“父母”DF 被设置为等价的(= {1,2})。我不确定这会如何查找更大的列表Q...

像这样的树有特定的名字吗?有没有我应该研究的现有资源,或者我应该从哪里开始?谢谢!

【问题讨论】:

    标签: data-structures tree


    【解决方案1】:

    将此图存储在任何类型的数据结构中并不是很有用,因为它的所有内容都可以轻松计算而无需任何类型的存储。如果你真的想的话,你可以将它存储在任何类型的有向图数据结构中。

    作为一个数学对象,我将其称为Q 的“幂集格”,任何知道这些词的人都会知道我的意思,因为它是幂集上的完整格。

    与您正在绘制的图片类似的是电源组的“哈斯图”:https://demonstrations.wolfram.com/HasseDiagramOfPowerSets/

    您也可以将其称为排列集的“最小确定性有限自动机”,但这会导致算法比您需要的任何东西都复杂得多。

    【讨论】:

    • 谢谢!然后,我使用这个术语,我想构建一个经过修剪和加权的Q 的幂集晶格,其中对图表进行修剪以删除权重低于某个阈值的边(并且也删除了相应的没有边的顶点)。有没有使用加权有向图数据结构的替代方法?
    • 当你添加边权重和剪枝时,它变成了一个非常随意的 DAG。存储它的适当结构取决于你想用它做什么。
    • 啊,好的。我希望从 DAG 生成许多路径序列——您可能会建议这种特殊用途的参考吗?
    • 符号概率按边权重加权的随机路径?
    • 同样的事情。我可能会通过未选择元素的相应集合(位掩码或排序列表)来识别每个顶点,并将每个顶点 ID 的映射存储到这些未选择元素的累积概率。这将使您的随机游走变得非常容易。
    【解决方案2】:

    从编辑跟进...我想在每个级别表示各种组合可能会更好,即:

    • 0 级:|Q|选择 0 个节点
    • 1 级:|Q|选择 1 个节点
    • 2 级:|Q|选择 2 个节点
    • 3 级:|Q|选择 3 个节点

    以及它们之间的各种互连,使2^(N-1) * N有这样的边缘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多