我需要一个算法来计算给定汉明重量的固定大小二进制数的所有排列。例如,如果汉明重量为2且二进制大小为4,则有以下输出:
0011
0110
0101
1100
1010
1001
在本例中,这种组合的数量被计算为
C(n,r)
,例如C(4,2)
,其结果为6。请注意,您可以通过将数字从0增加到2^n并查看计数是否正确来解决此问题。然而,这不是一个快速的解决方案。我考虑使用C++中的bitset类来解决问题,并且需要增加N。
我想补充一点,对于这个问题有一个显而易见的递归算法。由于堆栈溢出,它不是一个好的答案。我从Gosper的hack中得到了一个好的答案。但是,由于后续需要扩展输入并可能使用MPI实现,我需要一个可扩展的库。无符号整数不够大,我更喜欢一个可扩展且快速的库,如bitset。在bitset库中没有加法,因此其他解决方案呢?