Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 具有k个翻转的不同二进制字符串的数目_String_Binary_Combinatorics_Counting - Fatal编程技术网

String 具有k个翻转的不同二进制字符串的数目

String 具有k个翻转的不同二进制字符串的数目,string,binary,combinatorics,counting,String,Binary,Combinatorics,Counting,我正在尝试一个问题,给出长度为N的二进制字符串(这是在c#中。看看它是否有用 静态类程序 { 静态void Main(字符串[]参数) { 字符串bnryStr=“111111”; int x=4; //在这个字符串中,仅放置二进制字符串数的位置 //如果二进制字符串为“1111111”,则此fakeStr将保留“0123456” string fakeStr=string.Empty; 对于(int i=0;i { IEnumerable enumerable1=作为IList的元素??ele

我正在尝试一个问题,给出长度为N的二进制字符串(这是在c#中。看看它是否有用

静态类程序
{
静态void Main(字符串[]参数)
{
字符串bnryStr=“111111”;
int x=4;
//在这个字符串中,仅放置二进制字符串数的位置
//如果二进制字符串为“1111111”,则此fakeStr将保留“0123456”
string fakeStr=string.Empty;
对于(int i=0;i
{
IEnumerable enumerable1=作为IList的元素??elements1.ToList();
返回enumerable1.Skip(i+1).compositions(k-1).Select(c=>(new[]{e}).Concat(c));
});
返回可枚举;
}
}
}
结果:
二进制字符串:111111
翻转次数:4次
所有可能组合的数量为:15
000011
000101
000110
001001
001010
001100
010001
010010
010100
011000
100001
100010
100100
101000
110000

查找X翻转字符串

例如,考虑N=10,X=4,初始字符串为:

首字母:0011010111
那么这将是一个X翻转字符串的示例:

翻转:000011111
因为4位不同。如果对两个字符串进行异或运算,则得到:

首字母:0011010111
翻转:000011111
异或编辑:0011101000
其中,XOR ed字符串中的4个设置位表示已翻转的4个位的位置

现在回想一下,如果你有一个初始字符串和一个带有4个设置位的字符串,那么你可以通过对它们进行异或运算来生成一个X翻转的字符串:

首字母:0011010111
4位:0011101000
XOR ed:000011111
因此,如果你用X个设置位生成每个长度为N的二进制字符串,然后用初始字符串对它们进行异或运算,你会得到所有X翻转的字符串

初始4位异或ed
0011010111  0000001111  0011011000
0000010111  0011000000
0000100111  0011110000
...
1110010000  1101000111
1110100000  1101110111
1111000000  1100010111
生成所有具有X个集合位的N长度字符串可以通过以下代码示例来完成。在下面的代码示例中,我使用了一个反向字典顺序函数,这是我最初为其编写的

双翻转

如果位可以翻转两次,则X翻转的字符串可能与初始字符串没有X位不同,但只有X-2,因为一个位被翻转,然后又被翻转回其原始状态。或者X-4,如果位被翻转4次,或者两个不同的位被翻转两次。事实上,不同位的数量可以是X,X-2,X-4,X-6…降到1或0(取决于X是奇数还是偶数)

所以,要生成所有X翻转的字符串,您需要生成所有具有X翻转位的字符串,然后生成所有具有X-2翻转位的字符串,然后生成X-4、X-6…直到1或0

如果X>N

如果X大于N,那么显然有些位会被翻转不止一次。生成它们的方法是相同的:从X开始,倒计时到X-2,X-4,X-6…但只为值生成字符串≤ 实际上,从N或N-1开始,这取决于X-N是偶数还是奇数

字符串总数

具有X翻转位的N长度字符串的数量等于