ska*_*tek 7 ruby erlang set subset powerset
假设我们有一个S
包含几个子集的Set :
- [a,b,c]
- [a,b]
- [c]
- [d,e,f]
- [d,f]
- [e]
Run Code Online (Sandbox Code Playgroud)
我们还要说S包含六个独特的元素:a, b, c, d, e
和f
.
我们怎样才能找到S
包含每一个独特元素的所有可能子集S
?
函数/方法的结果应该是这样的:
[[a,b,c], [d,e,f]];
[[a,b,c], [d,f], [e]];
[[a,b], [c], [d,e,f]];
[[a,b], [c], [d,f], [e]].
有没有最佳实践或任何标准方法来实现这一目标?
我将非常感谢伪代码,Ruby或Erlang示例.
听起来您正在寻找的是集合/数组的分区。
执行此操作的一种方法是递归:
Ruby 实现看起来有点像
def partitions(x)
if x.length == 1
[[x]]
else
head, tail = x[0], x[1, x.length-1]
partitions(tail).inject([]) do |result, tail_partition|
result + partitions_by_adding_element(tail_partition, head)
end
end
end
def partitions_by_adding_element(partition, element)
(0..partition.length).collect do |index_to_add_at|
new_partition = partition.dup
new_partition[index_to_add_at] = (new_partition[index_to_add_at] || []) + [element]
new_partition
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2639 次 |
最近记录: |