Netlogo中具有可变列表lentgh的列表的重复排列

时间:2019-03-17 13:33:32

标签: permutation netlogo

我是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

我仍然希望有更好的选择。谢谢!

0 个答案:

没有答案