遞迴演算法簡單實現列表全排列(Python為例)

2021-09-22 16:48:39 字數 1082 閱讀 8470

輸出給定列表array的全部排列

利用遞迴思想將n階問題化簡為n-1階問題

面對列表[1,2,3],我們通常寫出全排列的方法為:寫出以1為開頭的排列[1,2,3],[1,3,2],再寫出以2為開頭的排列[2,1,3],[2,3,1]依次類推

故我們在面對3元素的列表時,我們是輪流取出元素作為頭,之後將其餘兩個元素全排列後放在第乙個元素後

所以我們可以知道全排列[x1,x2,x3,…,xn]時,我們會以x1作為頭部,在其後加上其餘元素即[x2,x3,…,xn]的全排列;再以x2作為頭部,在其後加上[x1,x3,…,xn]的全排列;直到以xn作為頭部,在其後加上[x1,x2,…,xn-1]的全排列

同時設定基線條件:當列表僅有乙個元素時,僅有一種排列

def

arrange

(array)

:#全排列陣列-通過遞迴

output =

iflen

(array)==1

:return

[array]

#當陣列只有乙個元素時直接返回該陣列

else

:#對於多個元素的陣列,全排列相當於以不同的元素首,並將其餘元素分全排列

# 例如全排列[1,2,3],相當於以1為頭部排列[2,3],以2為頭部排列[1,3],以3為頭部排列[1,2]

# 所以全排列為[1]+arrange([2,3]),[2]+arrange([1,3]),[3]+arrange([1,2])

# 推廣至n個元素的數列

# arrange([x1,x2,...,xn])為[x1]+arrange([x2,x3,...,xn]),[x2]+arrange([x1,x3,...,xn]),...,[xn]+arrange([x1,x2,...,xn-1])

for i in array:

subarr = array.copy(

) subarr.remove(i)

for j in arrange(subarr)

: newarr =

[i]+j

return output

遞迴演算法實現全排列

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串 程式如下 include using namespace std void swap char a,char b void permutation char str,int k,int m ...

全排列演算法遞迴實現

前言 在一些演算法題當中有時需要進行全排列,是乙個比較簡單的遞迴呼叫,在這裡記錄下,以後可以直接拿來使用。過程 例如 第一步 和的全排列組合 和的全排列組合 和的全排列組合 第二步 針對這個集合在拆分為 和的全排列組合 和的全排列組合 之後就是模擬如此。集合中每個元素和剩下元素的全排列的組合。在對這...

全排列遞迴演算法 C 實現

遞迴解決問題的方法就是將乙個大問題不斷分解成小問題,直到小問題很容易解決為止 先看全排列怎麼分解成小問題 假設要全排列 abc 先把a作為前部不變,全排列bc,同樣將b作為前部,全排列c,顯然是它本身 於是大問題變成了很容易解決的小問題了 如圖所示 如下 全排列演算法 遞迴實現 author rog...