【问题标题】:Generate permutations with k fixed bits生成具有 k 个固定位的排列
【发布时间】:2018-03-22 13:25:42
【问题描述】:

假设我有几个 N 位数,其中 K (1

示例:N = 3,K = 1(中间位固定为“0”)。那么可能的排列是

000
001
100
101

假设我有数字 X=000 和数组 fixed={-1,0,-1} 存储固定位的信息(-1 = 位不固定,0 或 1 = 固定)。 简单的解决方案是生成所有排列 000,001,...,111 并逐位循环并测试所有固定位是否具有正确的值(存储在fixed中)。如果至少有一个固定位与 fixed 中的对应值不同,则从结果中删除此排列。

然而,这是低效的,因为它需要 2^N 而不是 2^(N-K) 排列。是否有解决这个问题的算法或方法只需要 2^(N-K) 个排列(直接在结果中)?

【问题讨论】:

  • @GuyCoder 哦,该死的,我应该仔细阅读,谢谢。

标签: permutation bit asymptotic-complexity


【解决方案1】:

简单的小技巧可以有效地解决这个问题。

制作二进制掩码:

A,其中所有固定位都被清除(固定零和固定位!)并设置其他位

B设置固定的地方

例如,x01x 给出A = 1001, B = 0010

遍历A的所有子掩码,并在输出前用B设置固定的子掩码:

 sm = A
 repeat:
      out = sm or B
     //use out bit combination  
      sm = (sm - 1) & A
 until (sm = 0)

此方法无需过多步骤即可生成所有需要的位组合

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 2016-10-16
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多