2014-09-26 43 views
-2

如何使用數字組合生成置換。可以使用位掩碼嗎? 例如:
如果我有N個數字,我想產生一系列M digits.How的可以在最小的時間複雜度進行生成置換和組合

回答

0

首先,你可以寫一個算法來生成一組全部爆滿排列(你可以寫一個遞歸函數,見Algorithm to generate all possible permutations of a list?)。

然後,您可以編寫一個算法來生成m中所有n個數字的集合。你也可以遞歸地做到這一點,下面的metacode。

generate(n, setOfM) { 
    startingWithFirst = setOfM[0] concatenated with generate(n -1, setOfM[1..]) 
    notStartingWithFirst = generate(n, setOfM[1..]) 
    return startingWithFirst.Union(notStartingWithFirst)) 
}