【问题标题】:generating specific 32-bit binary sequence生成特定的 32 位二进制序列
【发布时间】:2013-01-13 19:35:47
【问题描述】:

我需要生成这样一个 32 位二进制序列:它有八个“1”,其余位为“0”。所以用十六进制写,一些序列会是这样的:

000000FF
000001FE
000001FD
000001FB
000001F7
...

问题是从32个中选择8个,所以有10518300个组合。换句话说,像我的例子一样,有 10518300 个序列。如果您给我任何建议或算法来生成我想要的序列,我将不胜感激。

【问题讨论】:

标签: c++ c algorithm binary hex


【解决方案1】:

这个问题是关于零和一的排列。最简单的编码解决方案是使用next_permutationvector<bool>

准备一个按字典顺序排列最早的向量(那些在后面)。运行next_permutation,直到它返回false。这是一个演示代码,它生成所有 8 位序列,设置了 3 位:

vector<bool> data(8, false);
data[7] = data[6] = data[5] = true;
do {
    for (int i = 0 ; i != data.size() ; i++) {
        cout << (int)data[i];
    }
    cout << endl;
} while (next_permutation(data.begin(), data.end()));

这里是a link to ideone with a running demo

您的程序将需要一个 32 位向量,其中最后八个元素设置为 1。您需要将它们转换为 32 位 int,并将它们存储在输出容器中,而不是打印序列的元素。

【讨论】:

    【解决方案2】:

    设计:

    1. 为组合定义一个顺序,使一个在前,一个在最后,并且每个组合在该顺序中都有一个位置。

    2. 编写一个算法,根据您所做的排序将一个序列转换为下一个序列。

    3. 在代码中实现该算法。

    实施:

    1. 根据您的顺序将序列设置为第一个序列。

    2. 输出当前序列。

    3. 如果这是最后一个序列停止。

    4. 使用您实现的算法转到下一个序列。

    5. 转到第 2 步。

    【讨论】:

      猜你喜欢
      • 2021-02-14
      • 2013-08-19
      • 2017-09-24
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多