我正在尝试生成一个给定长度为N的列表的所有2^N - 1个可能组合的集合。该集合将把组合中元素的数量映射到包含具有特定长度的组合的有序列表中。例如,对于列表:
[A, B, C, D]
我想生成地图:
{
1 -> [{A}, {B}, {C}, {D}]
2 -> [{A, B}, {A, C}, {A, D}, {B, C}, {B, D}, {C, D}]
3 -> [{A, B, C}, {A, B, D}, {A, C, D}, {B, C, D}]
4 -> [{A, B, C, D}]
}
生成的数据库应该保持原始顺序(其中[]
表示有序序列(List
),{}
表示无序组(Set
)),并且运行速度应尽可能快。
我一整天都在苦苦挣扎于一些递归代码中(我知道实现应该是递归的),但没能找到根源。
是否有参考资料/已有的此类算法的实现?
i
和大小为N-i
的列表。考虑将列表分成两个子集,并将每个子集添加到其中一个结果列表中。 - Patricia Shanahan