資源簡介
該代碼是WM算法和示例,感興趣的小伙伴可以下載研究一下

代碼片段和文件信息
/*
?*?WM.cpp
?*
?*??Created?on:?2010-2-20
?*??????Author:?qingxuan.chenqx
?*/
#include?
#include?
#include?
#include?
#include?“wm.h“
extern?int?nline?=?1;
extern?int?nfound?=?0;
#define?MAXN?10001?//模式串的最大長度MAXN?-?1
#define?MAXM?51//單詞最大長度為MAXM?-?1
WM_STRUCT?*?wmNew()
{
WM_STRUCT?*p?=?(WM_STRUCT?*)?malloc(sizeof(WM_STRUCT));
if?(!p)
return?0;
p->msNumPatterns?=?0;
p->msSmallest?=?1000;
return?p;
}
void?wmFree(WM_STRUCT?*ps)
{
if?(ps->msPatArray)
{
if?(ps->msPatArray->psPat)
free(ps->msPatArray->psPat);
free(ps->msPatArray);
}
if?(ps->msNumArray)
free(ps->msNumArray);
if?(ps->msHash)
free(ps->msHash);
if?(ps->msPrefix)
free(ps->msPrefix);
if?(ps->msShift)
free(ps->msShift);
free(ps);
}
int?wmAddPattern(WM_STRUCT?*ps?unsigned?char?*q?int?m)//m字符串長度
{
WM_PATTERN_STRUCT?*p;
p?=?(WM_PATTERN_STRUCT?*)?malloc(sizeof(WM_PATTERN_STRUCT));
if?(!p)
return?-1;
p->psPat?=?(unsigned?char*)?malloc(m?+?1);
memset(p->psPat?+?m?0?1);
memcpy(p->psPat?q?m);
p->psLen?=?m;
ps->msNumPatterns++;
if?(p->psLen?(unsigned)?ps->msSmallest)
ps->msSmallest?=?p->psLen;
p->next?=?ps->plist;
ps->plist?=?p;
return?0;
}
static?unsigned?HASH16(unsigned?char?*T)
{
return?(unsigned?short)?(((*T)?<8)?|?*(T?+?1));
}
void?sort(WM_STRUCT?*ps)//字符串哈希值從小到大排列
{
int?m?=?ps->msSmallest;
int?i?j;
unsigned?char?*temp;
int?flag;
for?(i?=?ps->msNumPatterns?-?1?flag?=?1;?i?>?0?&&?flag;?i--)
{
flag?=?0;
for?(j?=?0;?j? {
if?(HASH16(&(ps->msPatArray[j?+?1].psPat[m?-?2]))? &(ps->msPatArray[j].psPat[m?-?2])))
{
flag?=?1;
temp?=?ps->msPatArray[j?+?1].psPat;
ps->msPatArray[j?+?1].psPat?=?ps->msPatArray[j].psPat;
ps->msPatArray[j].psPat?=?temp;
}
}
}
}
static?void?wmPrepHashedPatternGroups(WM_STRUCT?*ps)//計算有多少個不同哈希值,且從小到大
{
unsigned?sindex?hindex?ningroup;
int?i;
int?m?=?ps->msSmallest;
ps->msNumHashEntries?=?HASHTABLESIZE;
ps->msHash?=?(HASH_TYPE*)?malloc(sizeof(HASH_TYPE)?*?ps->msNumHashEntries);
if?(!ps->msHash)
{
printf(“No?memory?in?wmPrepHashedPatternGroups()\n“);
return;
}
for?(i?=?0;?i?(int)?ps->msNumHashEntries;?i++)
{
ps->msHash[i]?=?(HASH_TYPE)?-1;
}
for?(i?=?0;?i?msNumPatterns;?i++)
{
hindex?=?HASH16(&ps->msPatArray[i].psPat[m?-?2]);
sindex?=?ps->msHash[hindex]?=?i;
ningroup?=?1;
while?((++i?msNumPatterns)?&&?(hindex?==?HASH16(
&ps->msPatArray[i].psPat[m?-?2])))
ningroup++;
ps->msNumArray[sindex]?=?ningroup;
i--;
}
}
static?void?wmPrepShiftTable(WM_STRUCT?*ps)//建立shift表
{
int?i;
unsigned?short?m?k?cindex;
unsigned?shift;
m?=?(unsigned?short)?ps->msSmallest;
ps->msShift?=?(unsigned?char*)?malloc(SHIFTTABLESIZE?*?sizeof(char));
if?(!ps->msShift)
return;
for?(i?=?0;?i? {
ps->msShift[i]?=?(unsigned)?(m?-?2?+?1);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6363??2017-01-11?14:20??WM多模算法(C)\WM.cpp
?????文件???????1218??2017-01-11?14:20??WM多模算法(C)\WM.h
?????目錄??????????0??2018-09-29?15:40??WM多模算法(C)
-----------?---------??----------?-----??----
?????????????????7581????????????????????3
- 上一篇:通過查看二進制文件判斷文件類型
- 下一篇:mv9713.pdf
評論
共有 條評論