生成排列和组合

时间:2014-09-26 16:16:23

标签: algorithm

如何使用数字组合生成排列。可以使用位掩码吗? 例如:
如果我有N个数字,我想生成一些M位数。如何以最小的时间复杂度完成

1 个答案:

答案 0 :(得分:0)

首先,您可以编写一个算法来生成集合的所有完整排列(您可以为此编写递归函数,请参阅Algorithm to generate all possible permutations of a list?)。

然后,您可以编写一个算法来生成m中所有n个数字的集合。你也可以递归地执行此操作,下面是元代码。

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