我有以下python函数以递归方式查找集合的所有分区:
def partitions(set_):
if not set_:
yield []
return
for i in xrange(2**len(set_)/2):
parts = [set(), set()]
for item in set_:
parts[i&1].add(item)
i >>= 1
for b in partitions(parts[1]):
yield [parts[0]]+b
for p in partitions(["a", "b", "c", "d"]):
print(p)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我翻译成红宝石吗?这是我到目前为止:
def partitions(set)
if not set
yield []
return
end
(0...2**set.size/2).each { |i|
parts = [Set.new, Set.new]
set.each { |item|
parts[i&1] << item
i >>= 1
}
partitions(parts[1]).each { |b|
yield [parts[0]] << b
}
}
end
p partitions([1, 2, 3, …Run Code Online (Sandbox Code Playgroud) 在Java中,我有一个集合,我想获取它们的并集构成主要集合的子集的所有可能组合。(划分集合),例如:
set={1,2,3}
Run Code Online (Sandbox Code Playgroud)
结果应该是:
{ {{1,2,3}} , {{1},{2,3}} , {{1,2},{3}} , {{1,3},{2}}, {{1},{2},{3}}}
Run Code Online (Sandbox Code Playgroud)
到目前为止的代码:
public static <T> Set<Set<T>> powerSet(Set<T> myset) {
Set<Set<T>> pset = new HashSet<Set<T>>();
if (myset.isEmpty()) {
pset.add(new HashSet<T>());
return pset;
}
List<T> list = new ArrayList<T>(myset);
T head = list.get(0);
Set<T> rest = new HashSet<T>(list.subList(1, list.size()));
for (Set<T> set : powerSet(rest)) {
Set<T> newSet = new HashSet<T>();
newSet.add(head);
newSet.addAll(set);
pset.add(newSet);
pset.add(set);
}
return pset;
}
Run Code Online (Sandbox Code Playgroud)
输出数组的幂集:
[[], [1], [2], [1, …Run Code Online (Sandbox Code Playgroud)