仅生成长度为n且最大k个连续零的二进制字符串

时间:2015-04-03 07:56:03

标签: algorithm binary nlp bits bitmask

只生成长度为n的二进制字符串的最有效方法是什么,它最多有k个连续的零。

例如: - 如果n = 3,则k = 2:

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

而不是000

注意:我需要这种方法用于我的研究(NLP),我使用位串生成具有所有可能n-gram的句子。 我已经尝试枚举所有二进制字符串,但是,由于二进制字符串的数量在句子2 ^(n-1)的长度中是指数的,所以如果n>则代码崩溃。 30.因此,我仅限于使用上述条件生成那些用于计算可行性的位串。

1 个答案:

答案 0 :(得分:0)

简单递归版(Delphi)

  procedure Generate(ZeroCount, MaxZeroCount, Len, MaxLen: Integer; s: string);
  begin
    if Len = MaxLen then
      Output(s)
    else begin
      if ZeroCount < MaxZeroCount then
        Generate(ZeroCount + 1, MaxZeroCount, Len + 1, MaxLen, s + '0');
      Generate(0, MaxZeroCount, Len + 1, MaxLen, s + '1');
    end;
  end;

整数值的变体而不是字符串

  if ZeroCount < MaxZeroCount then
    Generate(ZeroCount + 1, MaxZeroCount, Len + 1, MaxLen, Value shl 1);
  Generate(0, MaxZeroCount, Len + 1, MaxLen, (Value shl 1) or 1);

生成输出(0,2,0,5,'');

00100
00101
00110
00111
01001
01010
01011
01100
01101
01110
01111
10010
10011
10100
10101
10110
10111
11001
11010
11011
11100
11101
11110
11111