KMP算法 搜索特征碼 感覺差不多 效率還可以吧
inline void Get_Next(BYTE * bFlexlm,int * next,int nSize)
{
int i = 0 ,j = -1;* next = -1;
while(i < nSize)
{
if (j == -1 || *(bFlexlm + i) == *(bFlexlm + j))
{ i++;j++;*(next + i) = j;}
else
j = *(next + j);
}
}
DWORD Index_KMP(BYTE * dest , int dSize ,BYTE * Flexlm ,int sSize)
{
int * bNext = new int[sSize + 1];
Get_Next(Flexlm,bNext,sSize);
int i = -1,j = -1;
while (i < dSize && j< sSize )
{
if(j == -1 || *(dest+i) == *(Flexlm + j))
{
i++;j++;
}
else
j = *(bNext + j);
}
delete [] bNext;
if(j >= sSize)
return i - sSize;
else
return -1;
}
|