【问题标题】:Generating permutations of a list in NetLogo在 NetLogo 中生成列表的排列
【发布时间】:2015-11-19 22:39:00
【问题描述】:

我试图在 NetLogo 中生成一个列表,其中包含几个不同的唯一数字列表,从 0 到 n。比如我有这行代码

set mylists [[0 1 2] [0 2 1] [1 0 2] [1 2 0] [2 0 1] [2 1 0]]

我写的是为了使 0 1 和 2 的所有可能的唯一组合不重复列表中的数字。我希望能够做同样的事情,但 n 更大。是否有一个如何做到这一点的例子,或者任何人都知道我可以检查的某种伪代码算法?谢谢!

【问题讨论】:

标签: list permutation netlogo


【解决方案1】:

如果您不介意递归解决方案,您可以这样做:

to-report permutations [#lst] ;Return all permutations of `lst`
  let n length #lst
  if (n = 0) [report #lst]
  if (n = 1) [report (list #lst)]
  if (n = 2) [report (list #lst reverse #lst)]
  let result []
  let idxs n-values n [?]
  foreach idxs [
    let xi item ? #lst
    foreach (permutations remove-item ? #lst) [
      set result lput (fput xi ?) result
    ]
  ]
  report result
end

编辑:更新语法以响应评论。

to-report permutations [#lst] ;Return all permutations of `lst`
  let n length #lst
  if (n = 0) [report #lst]
  if (n = 1) [report (list #lst)]
  if (n = 2) [report (list #lst reverse #lst)]
  let result []
  let idxs range n
  foreach idxs [? ->
    let xi item ? #lst
    foreach (permutations remove-item ? #lst) [?? ->
      set result lput (fput xi ??) result
    ]
  ]
  report result
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多