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

时间:2016-10-02 06:34:05

标签: permutation

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

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

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

1 个答案:

答案 0 :(得分:1)

如果二进制文件中只有两个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

相关问题