相关疑难解决方法(0)

翻译函数,用于查找从Python到Ruby的集合的所有分区

我有以下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)

ruby python

6
推荐指数
1
解决办法
1321
查看次数

获取集合中所有可能的分区

在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)

一组n元素的可能分区B(n)称为贝尔数

到目前为止的代码:

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)

java collections partitioning set

6
推荐指数
1
解决办法
915
查看次数

标签 统计

collections ×1

java ×1

partitioning ×1

python ×1

ruby ×1

set ×1