小编典典

在F#中计算排列

algorithm

如何在F#中创建通用置换算法?Google对此没有任何有用的答案。

编辑:我在下面提供了最佳答案,但我怀疑Tomas更好(肯定更短!)


阅读 226

收藏
2020-07-28

共1个答案

小编典典

您也可以这样写:

let rec permutations list taken = 
  seq { if Set.count taken = List.length list then yield [] else
        for l in list do
          if not (Set.contains l taken) then 
            for perm in permutations list (Set.add l taken)  do
              yield l::perm }

“列表”参数包含您要置换的所有数字,“获取”是包含已使用数字的集合。当所有数字都取完后,该函数返回空列表。否则,迭代所有仍可用的数字,获取剩余数字的所有可能排列(递归使用“排列”),然后在返回前将当前数字附加到每个数字上(l:: perm)。

要运行它,您将给它一个空集,因为开头没有使用数字:

permutations [1;2;3] Set.empty;;
2020-07-28