如何在Netlogo中形成一组数字的子集

时间:2015-06-15 08:25:26

标签: netlogo

亲爱的Netlogo社区,

我希望生成一组数字的子集。 例如,如果一个集合是[1 2 3 4 5]那么子集将是[1 2] [1 3] [1 4] [1 5] [1 2 3] [1 2 4] .......我知道我们可以通过在java中使用位操作来轻松生成。但我不知道如何在Netlogo中实现。我注定了。任何帮助将非常感激。谢谢

1 个答案:

答案 0 :(得分:2)

使用递归最容易解决:

to-report subsets [xs]
  if empty? xs [ report [[]] ]
  let recurse subsets butfirst xs
  report sentence recurse
                  map [fput first xs ?] recurse
end

基本思路是,如果您想要[1 2 3]的子集,首先要找到[2 3]的所有子集。所有这些都是[1 2 3]的子集,如果你将1放在每个的前面,那么结果列表也是答案的一部分。

示例运行:

observer> print subsets [1 2 3]
[[] [3] [2] [2 3] [1] [1 3] [1 2] [1 2 3]]