所有可能的函数列表的排列

时间:2014-02-13 23:05:50

标签: algorithm pseudocode

首先,我只了解伪代码。

我有一份功能列表。 我正在尝试将所有排列应用到列表中。然后,对于每个排列,应用pos 1中的第一个元素,然后应用pos 2中的第一个元素,直到结束。并重复每一个排列。

例如:

mylist = [ sum(1+1) , sum(2+2) , sum(3+3) ]

#This should outputs

[2 , 4 , 6]
[4 , 6 , 2]
[6 , 2 , 4]
[2 , 6 , 4]
[6 , 4 , 2]
[4 , 2 , 6]

真正的问题是,我知道一旦你有了它的库就很容易在C,Python,Java中设置,但我只能使用,并理解伪代码。

1 个答案:

答案 0 :(得分:0)

从列表中获取所有排列可以通过各种方式完成,其中一种是递归。

你问过伪代码:

findPermutations (list,i):
   if i == list.length:
        foo(list)
        return
   for each j from i to list.length:
        swap(list,j,i)
        findPermutations (list,i+1)
        swap(list,j,i) #clean up - return to previous condition.

swap(list,i,j)在索引i的元素与索引j的元素之间交换(易于实现)。

现在,你的foo(列表)可以是任何东西。例如,如果您有一个列表[a b c]并且您想要计算(a/b)/c(注释中的示例),则可以按如下方式完成:

foo(list):
  if list.size() == 0: //sanity check for empty lists
       return 0
  res = list[0]
  for each i from 1 to list.length:
      res = res / list[i]
  return res

很容易看出确实是n!使用findPermutations伪代码创建不同的排列,因为每个级别递归i次,i单调递减1。