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