2015-04-23 139 views
-1

如何在一組n數字中包含m個元素並使用替換和訂購事項來生成所有排列(訂單事項)?n個數字的所有排列深度第一種方式

我不想使用更多的內存,只要我生成組合,我想使用它。

+0

(2,2,1)和(1,2,2)應該是g enerated? (訂單是否重要)? – amit

+0

是的。訂單很重要。 –

回答

1

首先,請注意,如果訂單很重要並且允許替換,您基本上有n選項可供選擇每個元素(其中m) - 並且您擁有的選擇量保持不變。

這意味着您有n*n*...*n = n^m可能的組合。

生成它們,你可以使用遞歸:

Python代碼:(如果你不知道蟒蛇,就像它讀成僞代碼,這是很清楚)。

def generateAll(numbers, m, currentPermutation=[]): 
    if m == 0: 
     doSomething(currentPermutation) 
     return 
    for x in numbers: 
     currentPermutation.append(x) 
     generateAll(numbers, m-1, currentPermutation) 
     currentPermutation.pop() 

例如,如果我們定義

def doSomething(l): 
    print str(l) 

並運行

generateAll([1,2,3], 4) 

輸出將打印所有組合與repalcements,其中順序的事項,從大小爲4 [1,2, 3]:

[1, 1, 1, 1] 
[1, 1, 1, 2] 
[1, 1, 1, 3] 
[1, 1, 2, 1] 
[1, 1, 2, 2] 
[1, 1, 2, 3] 
[1, 1, 3, 1] 
[1, 1, 3, 2] 
[1, 1, 3, 3] 
[1, 2, 1, 1] 
[1, 2, 1, 2] 
[1, 2, 1, 3] 
[1, 2, 2, 1] 
[1, 2, 2, 2] 
[1, 2, 2, 3] 
[1, 2, 3, 1] 
[1, 2, 3, 2] 
[1, 2, 3, 3] 
[1, 3, 1, 1] 
[1, 3, 1, 2] 
[1, 3, 1, 3] 
[1, 3, 2, 1] 
[1, 3, 2, 2] 
[1, 3, 2, 3] 
[1, 3, 3, 1] 
[1, 3, 3, 2] 
[1, 3, 3, 3] 
[2, 1, 1, 1] 
[2, 1, 1, 2] 
[2, 1, 1, 3] 
[2, 1, 2, 1] 
[2, 1, 2, 2] 
[2, 1, 2, 3] 
[2, 1, 3, 1] 
[2, 1, 3, 2] 
[2, 1, 3, 3] 
[2, 2, 1, 1] 
[2, 2, 1, 2] 
[2, 2, 1, 3] 
[2, 2, 2, 1] 
[2, 2, 2, 2] 
[2, 2, 2, 3] 
[2, 2, 3, 1] 
[2, 2, 3, 2] 
[2, 2, 3, 3] 
[2, 3, 1, 1] 
[2, 3, 1, 2] 
[2, 3, 1, 3] 
[2, 3, 2, 1] 
[2, 3, 2, 2] 
[2, 3, 2, 3] 
[2, 3, 3, 1] 
[2, 3, 3, 2] 
[2, 3, 3, 3] 
[3, 1, 1, 1] 
[3, 1, 1, 2] 
[3, 1, 1, 3] 
[3, 1, 2, 1] 
[3, 1, 2, 2] 
[3, 1, 2, 3] 
[3, 1, 3, 1] 
[3, 1, 3, 2] 
[3, 1, 3, 3] 
[3, 2, 1, 1] 
[3, 2, 1, 2] 
[3, 2, 1, 3] 
[3, 2, 2, 1] 
[3, 2, 2, 2] 
[3, 2, 2, 3] 
[3, 2, 3, 1] 
[3, 2, 3, 2] 
[3, 2, 3, 3] 
[3, 3, 1, 1] 
[3, 3, 1, 2] 
[3, 3, 1, 3] 
[3, 3, 2, 1] 
[3, 3, 2, 2] 
[3, 3, 2, 3] 
[3, 3, 3, 1] 
[3, 3, 3, 2] 
[3, 3, 3, 3] 
相關問題