确定二进制数模式是否适合较大二进制数的最佳方法

时间:2016-07-14 15:37:57

标签: bitmap binary pattern-matching

我一直在做一些研究,甚至看看按位操作,但我想知道是否有人可以提供他们的意见,以确定二进制数模式是否匹配在更大的二进制数内的任何地方。比如说,如下:

我有以下内容:001011 并且需要查看确切的模式是否匹配在以下任何地方:010100101100

先谢谢大家!

2 个答案:

答案 0 :(得分:0)

有几种方式。哪个最好 - 您可以自行决定。一些 C#示例:可能是最简单的一个:只使用function initMap() { map = new google.maps.Map(document.getElementById('footer-map'), { center: {lat: -37.111, lng: 144.888}, zoom: 14, scrollwheel: false, draggable: false, disableDoubleClickZoom: true, panControl:true, navigationControl: true, navigationControlOptions: { style: google.maps.NavigationControlStyle.ZOOM_PAN } }); }; 作为模式

string

按位:如果你必须使用整数

bool found = "010100101100".Contains("001011");

答案 1 :(得分:0)

检查这个基于python的逐位解决方案。它假设一个32位整数。

import math
x = int("010100101100",2)
y = int("1011",2)

highest1x = int(math.log(x,2))
highest1y = int(math.log(y,2))
mask = int(math.pow(2,highest1y+1)-1)

for i in range(0,int(32 - highest1x)):
    z = y ^ x
    if ( z & mask == 0):
            print "found"
    y = y << 1
    mask = mask << 1

主要思想是两个相同位模式之间的XOR将产生0。

所以我们继续沿着大的一个方向移动小位模式和掩码,每次都是XOR,然后用掩码和XOR的结果来隔离我们感兴趣的位。如果它们是0,然后在字符串中的那一点有一个匹配。