【问题标题】:How to find the nth binary permutation?如何找到第 n 个二进制排列?
【发布时间】:2016-10-02 14:45:23
【问题描述】:

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

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

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

【问题讨论】:

标签: permutation


【解决方案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

【讨论】:

  • 您好,对于更大的数字,例如 00111 和 n=8,怎么样?
  • 我的意思是找到中间位
猜你喜欢
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2019-02-06
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多