介绍
在试图做一个曲线图上节点的一些cathegorization(将呈现differenty),我发现自己面临着以下问题:分区的超集,让原来的集列表中的每个分区
的问题
鉴于元件S = {0, 1, ... M}
超集和非不相交子集其T_i
若干n
,与0 <= i < n
,什么是最好的ALG算法找出该集合的分区S
,称为P
?
P = S
是所有脱节分区原超S
的P_j
的工会,与0 <= j < M
,使得对所有的元素x in P_j
,每x
有“父母”的同一列表中的“原始”设置T_i
。
例
S = [1, 2, 3, 4, 5, 6, 8, 9]
T_1 = [1, 4]
T_2 = [2, 3]
T_3 = [1, 3, 4]
因此,所有P_j
s就:
P_1 = [1, 4] # all elements x have the same list of "parents": T_1, T_3
P_2 = [2] # all elements x have the same list of "parents": T_2
P_3 = [3] # all elements x have the same list of "parents": T_2, T_3
P_4 = [5, 6, 8, 9] # all elements x have the same list of "parents": S (so they're not in any of the P_j
问题
- 什么是好的功能/班在Python包计算所有
P_j
小号和他们的“父母”,理想的名单限制为numpy
和scipy
?也许已经有这样一个功能 - 什么是最好的算法找到这些分区
P_j
s 和为每一个,“父母”的列表?让我们注意T_0 = S
我觉得蛮力的方法是产生T
将所有2组合和拆分它们在至多3个不相交的集合,这将被添加回T
集和池然后重复这个过程直到所有产生的T
不相交,因此我们已经到达了我们的答案 - P
集合。有一点问题可能是在那里缓存所有的“父母”。
我怀疑 a 动态编程方法可以用来优化算法。
注:我会爱到写在乳胶(通过MathJax)数学部分,但不幸的是这不是:-(
以下内容可能会将您的想象力绘制成对您问题的解答:http://www.geekviewpoint.com/java/bitwise/power_set。在你的情况下,你已经开始了超集。但那里的逻辑应该有所帮助。 – kasavbere
@kasavbere我已经有那幅画了,但我不想要那个权力。子集已经给出。这基本上是一个导尿问题。 – Flavius
'0 WolframH