我正在尝试创建一个数据结构,该数据结构将描述某种类型的重组“组合”树(类似于here)。
首先,考虑一棵树,其中每个节点都有一个特定的ID,该ID由到达该节点所需的顺序来描述。例如,以固定列表Q = [1,2,3]
并根据序列图Q
将T
的可能排列到树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}
现在,我的目标是提出一种数据结构,使树以如下方式重组:节点J
和L
是同一对象(即重组),并且类似地{{ 1}}和K
重新组合,最后N
和M
重新组合。重新组合的规则是其父母O
和D
,F
和E
,以及H
和G
包含相同的元素,并且序列中的下一个元素是相同的。更详细地,导致I
和J
之间相等的规则是将其“父母” L
和D
设置为等效(F
)。我不确定如何查找较大的列表= {1,2}
...
像这样的树是否有特定名称?我是否应该研究现有资源或应该开始的地方?谢谢!
答案 0 :(得分:1)
以任何类型的数据结构存储该图并没有真正的用处,因为无需使用任何类型的存储就可以轻松计算出有关它的所有信息。如果确实需要,可以将其存储在任何类型的有向图数据结构中。
作为数学对象,我将其称为Q
的“幂集晶格”,任何知道这些单词的人都会知道我的意思,因为它是幂集的完整晶格。
您所绘制的图片是电源集的“哈西图”:https://demonstrations.wolfram.com/HasseDiagramOfPowerSets/
对于排列的集合,您也可以将其称为“最小确定性有限自动机”,但这会使算法变得比您所需的任何东西都要复杂。
答案 1 :(得分:0)
紧随编辑之后...我想最好代表每个级别的各种组合,例如:
及其之间的各种互连,以便2^(N-1) * N
有这样的边缘。