Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
C 如何确定单个数组中位的重复模式_C_Algorithm_Binary_Logic_Logical Operators - Fatal编程技术网

C 如何确定单个数组中位的重复模式

C 如何确定单个数组中位的重复模式,c,algorithm,binary,logic,logical-operators,C,Algorithm,Binary,Logic,Logical Operators,这就是问题所在,我正在构建128位的数组,用C来表示节拍除法,这些除法可以在逻辑上和/或/XOR'd相对,所以可以得到如下结果。我面临的问题是,如何确定模式何时重复,以及第一个重复部分的开始/结束索引是什么,这样我就可以循环该部分,以防止在达到最大值(当前为128)时发生奇怪的事情 似乎我需要将大小增加到256或更大,以考虑更复杂的嵌套逻辑创建的模式在一段时间内不会重复的情况。。正在寻找关于如何在一个位数组中检测模式算法联盟的建议 2: 0101010101010101

这就是问题所在,我正在构建128位的数组,用C来表示节拍除法,这些除法可以在逻辑上和/或/XOR'd相对,所以可以得到如下结果。我面临的问题是,如何确定模式何时重复,以及第一个重复部分的开始/结束索引是什么,这样我就可以循环该部分,以防止在达到最大值(当前为128)时发生奇怪的事情

似乎我需要将大小增加到256或更大,以考虑更复杂的嵌套逻辑创建的模式在一段时间内不会重复的情况。。正在寻找关于如何在一个位数组中检测模式算法联盟的建议

2:              01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101
3:              00100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100
3 OR  2:        01110101110101110101110101110101110101110101110101110101110101110101110101110101110101110101110101110101110101110101110101110101
3 AND 2:        00000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100
3 XOR 2:        01110001110001110001110001110001110001110001110001110001110001110001110001110001110001110001110001110001110001110001110001110001
                   ||    ||    ||    ||    || ...
5:              00001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000
5 OR (3 XOR 2): 01111001110001110001110011110101111001110001110001110011110101111001110001110001110011110101111001110001110001110011110101111001
                    ||                            ||                            ||                            ||                            ||
5 OR (3 OR 2):  01111101110101110101110111110101111101110101110101110111110101111101110101110101110111110101111101110101110101110111110101111101
                     ||                            ||                            ||                            ||
5:              00001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000010000100001000
6:              00000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100000100
5 OR 6:         00001100010100100101000110000100001100010100100101000110000100001100010100100101000110000100001100010100100101000110000100001100
                    ||                            ||                            ||                            ||                            ||
7:              00000010000001000000100000010000001000000100000010000001000000100000010000001000000100000010000001000000100000010000001000000100
7 XOR (5 OR 6): 00001110010101100101100110010100000100010000100111000111000100101100000100101101000110000110001101010100000101010110001100001000
                shoot, 7 XOR (5 OR 6) doesn't repeat within 128 bits..
8:              00000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001
16:             00000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001

为了提供更多的上下文,这是我为音乐模块()编写的一个逻辑时钟除法器,我试图解决的问题是,能够将这些节拍除法的逻辑/嵌套逻辑组合排列起来,这样在模式缠绕时就不会出现口吃。

伊恩·艾伯特评论说“重复模式的长度不应超过M和N的最小公倍数”(我假设M和N是两个,尽管您已经展示了组合两个以上的示例)。事实上,超过一米的简单组合正好是长度等于其长度的重复模式

但看起来你在做额外的、任意的选择,如示例中的线条所示,关于你希望“重拍”的位置。从表面上看,如果没有更多的澄清,我们将很难告诉计算机这些标准是什么。你在想什么(或者更好的是,听)这就建议你把节拍放在你做过的地方,而不是放在例子的开头?或者问题是我们无法访问合并的原始米数

3/4 x . x|x . x|x . x|x . x
4/4 x . x x|x . x x|x . x x
(lcm = 12)

识别重复模式的标准是什么?因为这些是通过逻辑操作创建的,我想说的是,标准是模式至少被检测两次,初始和第二次重复将确认第一个模式可以提供开始/结束索引,我可以从中获取长度和初始偏移量。(偏移量,因为未知数量的初始位不可能是重复模式的一部分)。上面的行标记了模式开始/结束的位置。因此“1001”将是“11110011001111111”中的重复模式?事实上,如果出现xxx,任何字符串x都将被视为重复模式?除非我犯了错误(这是可能的),似乎对于M位和N位的任何组合,M*N或可被M和N平均除的第一个正整数都应为您提供保证均匀适合重复的位数,例如,对于“7 XOR(5或6)”,为210位。(实际重复当然可能短于此。)我不知道具体的目标和限制是什么,但也许可以通过某种方式加以利用。我认为你需要从尽可能长的重复模式开始,然后检查从那里到最短的重复模式,否则你可能会错误地将短重复模式误认为是模式,而实际模式则更长(例如,10101100100有两个10的重复,但图案是10101100)。因此,首先检查后半部是否等于前半部。如果是,则递归地继续减半以找到最小长度。如果不是,则图案是偏移或截断的。。。