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

Algorithm 函数列表的所有可能排列,algorithm,pseudocode,Algorithm,Pseudocode,首先,我只理解伪代码 我有一个函数列表。 我正在尝试将所有可能的排列应用到列表中。然后,对于每个排列,应用位置1中的第一个元素,然后应用位置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

首先,我只理解伪代码

我有一个函数列表。 我正在尝试将所有可能的排列应用到列表中。然后,对于每个排列,应用位置1中的第一个元素,然后应用位置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的库,就可以很容易地用C、Python、Java进行设置,但我只能使用并理解伪代码。

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

您要求提供伪代码:

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。

如果我不需要打印每个列表,而是需要对其进行进一步的计算?例如,在第一个列表中,如果我想做2除以4除以6,我怎么做?那么我不理解这个问题。你可以做你想做的任何事情,而不是
打印列表。例如,一旦我有了新列表,我想用下一个元素除以每个元素,这可能吗?@user3307705我不明白。你能提供一个详细的例子吗?从你问题中的例子来看,你似乎要求找到所有的排列。我需要得到所有可能的排列。然后,对于每个置换列表(在本例中,它们是其中的6个),我想做进一步的计算。在这个例子中,在第三个列表[6,2,4]中,我想用6除以2(=3),然后再除以4(=0.75)。