1
尊敬的Netlogo社区,如何在Netlogo中形成一组数字的子集
我期待生成一组数字的子集。例如,如果一组是[1 2 3 4 5],那么子集将是[1 2] [1 3] [1 4] [1 5] [1 2 3] [1 2 4] ...... 。我知道我们可以通过在java中使用位操作来轻松生成。但我不知道如何在Netlogo中实现。我注定了。任何帮助将非常感激。由于
尊敬的Netlogo社区,如何在Netlogo中形成一组数字的子集
我期待生成一组数字的子集。例如,如果一组是[1 2 3 4 5],那么子集将是[1 2] [1 3] [1 4] [1 5] [1 2 3] [1 2 4] ...... 。我知道我们可以通过在java中使用位操作来轻松生成。但我不知道如何在Netlogo中实现。我注定了。任何帮助将非常感激。由于
这是最简单的使用递归来解决:
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]]
感谢您的答复。上面提到的代码的问题是,它给出了列表中多达21个元素的子集。在第22个元素上它抛出java堆空间的消息。我试图增加java的RAM分配,但它没有解决问题。寻找您的宝贵意见。谢谢 – user2293224
我看到你已经在http://stackoverflow.com/q/31019305/86485上打开了一个新的问题 –