关于常见比特序列的问题

时间:2010-06-23 05:34:45

标签: algorithm

假设我们有两个数字,我想要写程序,打印后续的公共位,这些数字出现在这些数字中 或

 1000010111001010100011110001010010101001011101001001001
0101 01110011011001010111101111111010001001011

其中一个答案应该是0101 但约束是我们应该进行按位运算和数学运算   而不是字符串问题(最常见的后续)  感谢

3 个答案:

答案 0 :(得分:1)

common_ones = a & b;
common_zeros = ~a & ~b;
common_sequences = common_ones | common_zeros;

例如:

a 1000010111001010100011110001010010101001011101001001001
b 0000000000010101110011011001010111101111111010001001011
c 0111101000100000101111010111111010111001011000111111101

清除您可以使用的单个位序列:

c = c & ( c >> 1 );
c = c | ( c << 1 );

c 0111100000000000001111000111111000111000011000111111100

目前尚不清楚这是否是您想要的,但这是一种快速简便的方法,可以在两个值中找到相同位置的所有公共位序列。如果要在任何位置查找公共位序列,则需要将一个值旋转到每个位位置并执行上述测试。

答案 1 :(得分:0)

假设你有两个32位的整数a和b。将b中的位移位i,然后将它们包裹起来(使得右侧的位将在左侧进入)并将其与a进行对比。让我从0到31。这将给你32个结果。如果我的推理是正确的,那么具有最长公共子序列的结果应该是具有最多0的结果(例如,计数0可以在循环中完成)。如果没有,这至少应该是一个很好的起点。

答案 2 :(得分:0)

查看Sequitur - 算法。