如何在Netlogo中形成一组数字的子集
尊敬的Netlogo社区: 我希望生成一组数字的子集。如何在Netlogo中形成一组数字的子集,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 b
例如,如果一个集合是[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堆空间的消息抛出memeory。我试图增加java的RAM分配,但没有解决这个问题。寻找你有价值的反馈。谢谢,我看到你在这里提出了一个新问题