我是Netlogo的新手,也是在以下问题上进行编程和挣扎的工作:我需要在Netlogo中实现函数Permu [k,n]
,其中k是元素列表,例如[1 2]
,而n是结果列表的长度,例如3
。该函数应返回所有长度为n的排列语句列表,其中元素取自k。
示例1:Permu [1 2] 3
的结果应是所有重复的排列[[1 1 1] [1 1 2] [1 2 1] [1 2 2] [2 1 1] [2 1 2] [2 2 1] [2 2 2]]
示例2:Permu [1 2 3] 2
应该返回[[1 1] [1 2] [1 3] [2 1] [2 2] [2 3] [3 1] [3 2] [3 3]]
实际上,Mathematica中的等效函数为Tuples[{1,2},3]
我已经检查了Generating permutations of a list in NetLogo个帖子,但无法根据自己的需要进行调整。
您对如何执行此操作有任何想法,还是知道某种伪代码?预先感谢!
修改
我想出了一个(不好的)解决方案,方法是简单地创建由k个元素组成的随机列表,直到找到所有可能的组合:
to-report permu [k n]
let number-of-all-combinations ( length k ) ^ n ;; stopping condtion
let results []
let temp-results []
while [ length results < number-of-all-combinations ] [
set temp-results []
repeat n [ set temp-results fput (one-of k) temp-results ]
if not member? temp-results results [set results fput temp-results results ] ;; makes sure that there are no duplicates in the result.
]
report results
end
我仍然希望有更好的选择。谢谢!