首先,我只了解伪代码。
我有一份功能列表。 我正在尝试将所有排列应用到列表中。然后,对于每个排列,应用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中设置,但我只能使用,并理解伪代码。
答案 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。