Algorithm 函数列表的所有可能排列
首先,我只理解伪代码 我有一个函数列表。 我正在尝试将所有可能的排列应用到列表中。然后,对于每个排列,应用位置1中的第一个元素,然后应用位置2中的元素,直到结束。并对每个排列重复 例如: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
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)。