java – 如何生成给定List的幂集?

我正在尝试生成长度为N的给定List的所有2 ^ N-1种可能组合的集合.该集合将组合中的元素数量映射到包含特定长度组合的有序组合列表.例如,对于List:

[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)),并尽可能快地运行.

我整天都在努力处理一些递归代码(我知道实现应该是递归的)但是无法深入了解它.

有没有我可以使用的参考/这种算法的现成实现?

解决方法:

你正在寻找的基本上是power set(减去可能是空集). Guava实际上有一个方法:Sets.powerSet().如果你想自己编写,你可以查看source of the Sets class以了解该方法的实现方式;您可能需要修改它以返回List而不是Set,因为您要保留顺序,尽管此更改不应过于激烈.一旦你获得了权力集,迭代它并构建你想要的地图应该是微不足道的.

上一篇:python – 制作列表的所有可能组合


下一篇:如何在PHP中将两个字符串组合在一起?