资源简介
WM(Wu-Manber)算法详解及C语言实现程序代码解析参考
可直接运行。
代码片段和文件信息
#include “wm.h“
#include
#include
#include
#include
extern int nline=1;
extern int nfound=0;
#define MAXN 10001 //模式串的最大长度MAXN - 1
#define MAXM 51//单词最大长度为MAXM - 1
/* ****************************************************************
函数:void wmNew()
目的:创建一个模式串集合
参数:
无
返回:
WM_STRUCT - 创建的模式串集
****************************************************************/
WM_STRUCT * wmNew()
{
WM_STRUCT *p=(WM_STRUCT *)malloc(sizeof(WM_STRUCT));
if(!p) return 0;
p->msNumPatterns=0;//模式串的个数初始为0
p->msSmallest=1000;//最短模式串的长度
return p;
}
/* ****************************************************************
函数:void wmFree(WM_STRUCT *)
目的:释放模式串集占用空间
参数:
ps => 模式串集
返回:
****************************************************************/
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 *unsigned char *int )
目的:向模式串集ps中新增一个长度为m的子串q
参数:
ps => 模式串集
q => 要新增的子串
m => 子串长度
返回:
int* - 新增成功0,失败-1
****************************************************************/
int wmAddPattern(WM_STRUCT *psunsigned char *qint 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+m01); //最后一个位置设置为结束字符“/0”
memcpy(p->psPatqm); //拷贝q到子串结构数组中
p->psLen=m; //子串长度赋值
ps->msNumPatterns++; //模式串集的子串个数增1
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)<<8) | *(T+1)),
参数:
T => 要哈希计算的字符串
返回:
unsigned - 静态函数,返回对字符串T计算的哈希值
****************************************************************/
static unsigned HASH16(unsigned char *T)
{
/*/
printf(“T:%c\n“*(T));
getchar();
printf(“T+1:%c\n“*(T+1));
getchar();
printf(“T<<8:%c\n“(int)((*T)<<8));
getchar();
printf(“HASH16:%d\n“((*T)<<8) | *(T+1));
getchar();
//*/
return (unsigned short) (((*T)<<8) | *(T+1)); //对第一个字符左移8位,然后与第二个字符异或运算
}
/* ****************************************************************
函数:sort(WM_STRUCT *)
目的:对字符串集ps中的子串队列,根据子串串值的哈希值从小到大排序
参数:
ps => 模式串集
返回:无
****************************************************************/
void sort(WM_STRUCT *ps)
{
int m=ps->msSmallest; //获取最短子串长度
int ij;
unsigned char
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10697 2011-01-17 10:52 wm.c
文件 1403 2011-01-17 10:45 wm.h
文件 263 2011-01-17 13:16 WM(Wu-Manber)算法详解及C语言实现程序代码解析参考 - 志文工作室 - 计算机技术学习博客.url
----------- --------- ---------- ----- ----
12363 3
- 上一篇:51单片机做红外遥控
- 下一篇:PNCC声特征matlab代码
相关资源
- 51单片机产生PWM的程序和怎样控制直流
- 超声波避障,光电测速,pwm综合应用
- 用DSP实现spwm的C语言程序
- pwm C语言程序
- kbmMemTable v7.30 FullSource
- WindowsCE或WM上C++加载显示GIF动画的程序
- 三相逆变PI双环控制代码
- 基于DSP2812的SVPWM算法C语言编程
- 最新传智播客C/C++第五期完整视频 R
-
CWMPPla
yer4类做的视频播放器 - 直流无刷电机PMW控制proteus仿真.zip
- WCS源码,WMS
- 基于51单片机的spwm波形产生程序
- SVPWM的原理及法则推导和控制算法详解
- 单片机pwm输出传统防盗器声音
- tq244-pwm频率调节源码
- stm32cubeIDE hul库freertos can中断收发,
- 三电平NPCSVPWM源代码
- 海思平台Hi3559A的pwm_led驱动
- 基于HAL库的PWM波输出
- 51单片机PWM调控风扇步进电机计时定时
- C++ 发送WM_COPYDATA消息
- 循迹小车程序基于msp430 输出两路pwm
- 直流电机的速度环PI控制-PWM部分(P
- 单片机直流电机PWM(调速)控制系统
- 51占空比频率可调pwm程序
- HAL基础实验源码16-4 stm32cubemx-F429IGT6通
- C51直流电机PWM测速源程序
- MFC设计局域网对战五子棋游戏源代码
- 频率、占空比可调的PWM波产生的C语言
评论
共有 条评论