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