【问题标题】:all possible binary strings of length n with bits at specific positions fixed所有可能的长度为 n 的二进制字符串,其中特定位置的位是固定的
【发布时间】:2017-01-02 06:14:30
【问题描述】:

我需要一种快速的方法来查找长度为n 的所有二进制字符串,这些字符串的位在m 位置是固定的。一个C++11 兼容函数,它采用例如std:map,其中键为固定位的位置并为固定位的值赋值。输出std::bitset<n>s 或std::vector<n> 的向量会很好。例如一个函数:

std::vector< std::bitset<n> > compatible(int n, const std::map<int,bool>& fix) 

例如,如果n=3 并且我们将第二位固定为 1,那么答案应该是

{{0,1,0},{0,1,1},{1,1,0},{1,1,1}}

顺序无关紧要。

如果另一个数据结构更快,那么我更喜欢速度。此外,如果n &lt; 50 可以在 64 位架构上实现显着加速,那么这也会很有趣。

【问题讨论】:

    标签: c++11 bit-manipulation


    【解决方案1】:

    整数数学有一种相当简单的方法,通过不影响固定位的特殊增量循环 2n 个可能性。

    那个增量是

    x = (x | isfixed) + 1 & ~isfixed | fixedvalue;
    

    第一个 OR 使固定位置为 1,这意味着来自 +1 的进位将通过它们。然后将固定位恢复到正确的值。

    或者,如果您可以访问_pdep_u64 或等效项,您可以只对从 0 到 2nm 的所有整数使用一个普通的旧循环,然后将这些位传播到所有非固定位置用_pdep_u64(i, ~isfixed),然后填写固定位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多