Data structures 重组树的数据结构:父项是排列

Data structures 重组树的数据结构:父项是排列,data-structures,tree,Data Structures,Tree,我试图创建一个数据结构,它将描述某种类型的重组“组合”树(类似于) 首先,考虑一个树,其中每个节点都有一个特定的ID,它是通过到达节点所需要的序列来描述的。例如,以固定列表Q=[1,2,3]为例,根据序列图S将Q的可能排列排列排列到树T: S = _0_ / | \ 1 2 3 /| / \ |\ 2 3 1 3 1 2 | | | | | | 3 2 3 1 2 1 然后给每个节点一个字母,a,B,C

我试图创建一个数据结构,它将描述某种类型的重组“组合”树(类似于)

首先,考虑一个树,其中每个节点都有一个特定的ID,它是通过到达节点所需要的序列来描述的。例如,以固定列表

Q=[1,2,3]
为例,根据序列图
S
Q
的可能排列排列排列到树
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    
在哪里

现在,我的目标是提出一个数据结构,使树以一种方式重组,其中节点
J
L
是同一个对象(即重组),类似地
K
N
重组,最后
M
O
重组。重组的规则是它们的父级
D
F
E
H
G
I
包含相同的元素,并且序列中的下一个元素相同。更详细地说,导致
J
L
之间等价的规则是,它们的“父项”
D
F
被设置为等价(
={1,2}
)。我不确定这将如何寻找更大的列表
Q


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

从编辑中跟进。。。我认为最好在每个级别上表示各种组合,即:

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

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

将此图存储在任何类型的数据结构中都不是真正有用的,因为它的所有内容都可以在没有任何存储的情况下轻松计算。如果您真的愿意,您可以将其存储在任何类型的有向图数据结构中

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

与您正在绘制的图片类似的图片是电源组的“哈斯图”:


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

谢谢!我使用这个术语,然后,我想建立一个
Q
的修剪加权幂集格,其中图被修剪以移除权重低于某个阈值的边(并且移除没有边的对应顶点)。有没有替代使用加权有向图数据结构的方法?当您添加边权重和修剪时,它会变成一个非常任意的DAG。存储它的适当结构取决于你想用它做什么。啊,好的。我希望从DAG中生成许多路径序列——对于这种特殊用途,您是否建议使用任何参考?符号概率按边权重加权的随机路径?同样的事情。我可能会通过其对应的未闭合元素集(位掩码或排序列表)来识别每个顶点,并存储从每个顶点ID到这些未闭合元素的累积概率的映射。这将使你的随机行走变得非常容易。
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}