重组树的数据结构:父母是排列

时间:2019-05-14 18:53:10

标签: data-structures tree

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

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

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是同一对象(即重组),并且类似地{{ 1}}和K重新组合,最后NM重新组合。重新组合的规则是其父母ODFE,以及HG包含相同的元素,并且序列中的下一个元素是相同的。更详细地,导致IJ之间相等的规则是将其“父母” LD设置为等效(F)。我不确定如何查找较大的列表= {1,2} ...

像这样的树是否有特定名称?我是否应该研究现有资源或应该开始的地方?谢谢!

2 个答案:

答案 0 :(得分:1)

以任何类型的数据结构存储该图并没有真正的用处,因为无需使用任何类型的存储就可以轻松计算出有关它的所有信息。如果确实需要,可以将其存储在任何类型的有向图数据结构中。

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

您所绘制的图片是电源集的“哈西图”:https://demonstrations.wolfram.com/HasseDiagramOfPowerSets/

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

答案 1 :(得分:0)

紧随编辑之后...我想最好代表每个级别的各种组合,例如:

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

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