【问题标题】:generating a binary sequence生成二进制序列
【发布时间】:2013-08-19 13:03:54
【问题描述】:

我需要生成一个二进制键序列,其中每个键的长度为“x”,每个键是由对前一个键的特定操作生成的。
所以假设密钥长度为3,我应该能够生成一个序列(插图):

001 010 100 011 .....

每个密钥都必须通过对前一个密钥的一些位操作来派生,直到我们用尽了该特定密钥长度的所有可能排列。
由于我是位操作的新手 - 这是一个可能的操作吗?我们如何为任何给定长度生成这个序列。
我更喜欢java中的一个例子 - 但这个想法是理解逻辑和具体的操作。

【问题讨论】:

标签: binary bit-manipulation bitwise-operators binary-operators


【解决方案1】:

如果进程必须是固定位操作,您可能需要寻找伪随机生成器。您可能也对格雷码感兴趣。

【讨论】:

    【解决方案2】:

    以下是 Java 中的两种方法:

    迭代:

    02^length 开始,将每个数字转换为前面加零的二进制字符串。

    public static List<String> binarySequence(final int length) {
        final int noOfItems = 1 << length;
        final List<String> sequences = new ArrayList<>(noOfItems);
        final String format = "%" + length + "s";
        for (int num = 0; num < noOfItems; num++) {
            final String binary = String.format(format,
                    Integer.toBinaryString(num)).replace(' ', '0');
            sequences.add(binary);
        }
        return sequences;
    }
    

    递归:

    基本情况(长度 1),只有两个值:01。对于length &gt; 1,将01 添加到先前递归的序列中。例如,长度为 2 时,将 01 附加到上一个递归输出(0, 1):00, 01, 10, 11

    public static List<String> binarySequenceRecur(final int length) {
        final List<String> sequences;
        if (length <= 1) {
            sequences = Arrays.asList("0", "1");
        } else {
            final List<String> prevSequences = binarySequence(length - 1);
            final LinkedList<String> seqs = new LinkedList<>();
            for (final String seq: prevSequences) {
                seqs.addLast("0" + seq);
            }
            for (final String seq: prevSequences) {
                seqs.addLast("1" + seq);
            }
            sequences = seqs;
        }
        return sequences;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2013-01-13
      • 1970-01-01
      • 2016-03-25
      • 2013-06-06
      • 2018-04-25
      • 1970-01-01
      • 2015-09-04
      相关资源
      最近更新 更多