2014-02-13 65 views
0

首先,我只理解僞代碼。所有可能的功能列表排列

我有一個函數列表。 我試圖將所有可能的排列應用到列表中。然後,對於每個置換,將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

從列表中獲取所有排列可以通過各種方式完成,其中之一是遞歸。

您已要求僞代碼:

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. 

凡在指數i元素,並在索引j元素之間swap(list,i,j)掉期(容易實現)。

現在,你的foo(list)可以是任何東西。例如,如果你有一個列表[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.

+0

如果我不需要打印每個列表,而是對其進行一些進一步計算?例如,在第一個列表中,如果我想要將2除以4除以6,我該怎麼辦? – user3307705

+0

然後我不明白這個問題。而不是'print list',你可以做任何你想做的事情。 – amit

+0

例如,一旦我有了新的列表,我想將每個元素除以下一個元素,是否有可能? – user3307705