如何找到第 n 个二进制排列?

How to find the nth binary permutation?

这是我完成压缩算法所需的最后一个缺失部分,新的。假设我有 4 位,其中 2 位设置为 1、0011。该数字的排列总数为 0011、0101、0110、1001、1010、1100、6 种情况。这个可以用计算来计算。

4! / ((2!)(4-2)!) = 6

现在我希望能够找到第 n 个序列,例如第一个数字是 0011,第二个数字是 0101。所以如果我说 n=5,我希望能够从中得到第 5 个排列序列 1010最初的 0011。我该怎么做?

如果二进制只有两个1,也不算太难

当最高1位位于x位置时,排列数为x.

因此,最高位位置最小a(从0开始),服从a*(a+1)/2 >= n。您可以通过 O(n) 循环轻松找到 a

则最低位为a*(a+1)/2-n(从0开始)

例如n为5时,最小的a为3,最低位为1,则答案为1010