2015-06-15 13 views
1

尊敬的Netlogo社区,如何在Netlogo中形成一组数字的子集

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

回答

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]] 
+0

感谢您的答复。上面提到的代码的问题是,它给出了列表中多达21个元素的子集。在第22个元素上它抛出java堆空间的消息。我试图增加java的RAM分配,但它没有解决问题。寻找您的宝贵意见。谢谢 – user2293224

+0

我看到你已经在http://stackoverflow.com/q/31019305/86485上打开了一个新的问题 –

相关问题