代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->interfaceStringSearchable
{
publicfunctionsearch($substring,$buffer);
}
classBoyerMooreStringSearchimplementsStringSearchable
{
public$substring=null;
public$buffer='';
public$jumpTable=array();
protected$results=array();
publicfunction__construct()
{
}
publicfunction__destruct()
{
}
publicfunctionsearch($substring,$buffer)
{
$this->results=array();
$this->substring=$substring;
$this->buffer=$buffer;
$this->deriveJumpTable();
$substringLen=strlen($this->substring);
$currentCharIndex=$substringLen-1;
$bufferLen=strlen($this->buffer);
while($currentCharIndex<$bufferLen){
for($i=$substringLen-1;$i>=0;$i--){
if($this->buffer[$currentCharIndex-$substringLen+$i+1]==$this->substring[$i]){
if($i==0){
$this->results[]=$currentCharIndex-$substringLen;
$currentCharIndex+=$this->getJumpLength($this->buffer[$currentCharIndex]);
}else{
continue;
}
}else{
$currentCharIndex+=$this->getJumpLength($this->buffer[$currentCharIndex]);
break;
}
}
}
return(sizeof($this->results)>0);
}
protectedfunctionderiveJumpTable()
{
$maxJump=strlen($this->substring);
for($i=strlen($this->substring)-2;$i>=0;$i--){
if(!array_key_exists($this->substring[$i],$this->jumpTable)){
$this->jumpTable[$this->substring[$i]]]=$maxJump-$i-1;
}
}
}
publicfunctiongetJumpTable()
{
return$this->jumpTable;
}
publicfunctiongetResults()
{
return$this->results;
}
publicfunctiongetResultsCount()
{
returnsizeof($this->results);
}
publicfunctiongetJumpLength($charIndex)
{
if(array_key_exists($charIndex,$this->jumpTable)){
return$this->jumpTable[$charIndex];
}else{
returnstrlen($this->substring);
}
}
}
functionMain()
{
$poem=<<<POEM
yousonofbitch
goddamnit
hey,godloveme
POEM;
$bm=newBoyerMooreStringSearch();
$bm->search('god',$poem);
$count=$bm->getResultsCount;
echo$count;
}
相关推荐
AC、BM、ACBM、BMH算法的经典论文
一种基于BMH算法的模式匹配算法,陈杰,,在介绍两种常用的单模式匹配算法BM算法和BMH算法的基础上,分析其改进的思路,重点分析BMH算法,并对BMH算法进行了改进,主要针对模�
分析了目前网络上最流行的BM算法及其改进算法BMH,在此基础上提出了BMH算法的改进算法BMH2。考虑了模式串自身的特征,在原有移动距离数组的基础上增加一个新的移动数组,从而充分利用模式串特征进行更大距离的移动,...
单模式快速匹配算法 BMH 供大家参考下载
字符串匹配BM算法 坏字符规则(BMH算法)
全面综述了应用于入侵检测系统的经典的模式匹配算法,包括单模式匹配算法中的KMP算法、BM算法、RK算法和多模式匹配算法中的AC算法、AC—BM算法,并对各种算法的执行效率进行了总结。通过分析算法的思想,提出了未来...
AC算法和ACBM算法 算法实现代码 相关论文(英文原版论文)
本文在介绍经典BM算法及其改进的BMH、BMHS算法的基础上,通过整合、改进后,提出了一种新的改进的IBMH算法。在对以上算法进行复杂度分析以后,再通过具体的实验验证。结果表明IBMH算法在比较次数、运行时间、稳定性...
内涵经典程序,论文选刊 部分如下:ApSimon 的造币厂问题,华容道游戏的搜索策略,八女王问题,高斯算法,取石子游戏,最大及最小素数问题…… <br>
串匹配算法 1 第一章 引言 2 第一节 2 第二节 2 ...2 BMH算法 46 3 BMHS算法 46 4 . smith 算法 47 5.kmp算法 47 A 6 自动机算法 47 A 7 bom 算法 48 A 8 shift-or 算法 50 A 9 BNDM算法 51 A 10 哈希法 51
递归法、递推法、迭代法、插值法、穷举搜索法、回溯法、贪婪法、分治法等等。
对Snort的规则匹配算法以及现有的两种著名的匹配算法BMH与BMHS算法进行比较分析,提出一种简单实用、易于理解的规则匹配改进算法。该算法通过减少模式串的移动次数以及增加最大移动距离m 1的出现次数来减少规则匹配...
bm算法实现,及简单说明bm算法实现,及简单说明bm算法实现,及简单说明
Boyer-Moore-Horspool Wordsearch饼干
在分析BM算法以及它的衍生版本BMH、Sunday等算法的基础上,提出一种新的改进算法。改进算法有三个重要特点:(1)采用双字符启发策略,提高模式串最大移动位数及其概率,最大移动位数为n 2;(2)采用窗口动态分段...
通过分析几种常见的字符串匹配算法(AC、AC_BMH、Sunday等)的基础,提出了一种对AC算法的改进,新算法每一次匹配不成功后都能跳过尽可能多的字符以进行下一轮匹配,使得匹配次数大大减少,从而提高了匹配效率。...
100120 V单相,0.15 kW至0.8 kW 200240 V单相,0.3 kW至1.6 kW 380480 V三相,0.4 kW至7 kW Lexium 32 拥有紧凑型/增强型/模块型
BMH垃圾焚烧技术文件.pdf
去掉好后缀规则,适当改进坏字符规则,构建适用于系统维护的框架网络数据结构环境,将 WBM算法应用于框架网络,实现基于该算法的微机防误系统软件。实验比对结果表明,WBM算法在BM、WBM、BMH、QS这4种对比算法中速度...
文章在分析BM算法以及一些重要的改进算法的基础上,提出了一种新的改进...该算法结合了BMH算法和BMHS算法的优点,同时考虑了字符串后一位字母的惟一性,大大提高了最大位移m+1的出现概率,因此有效地加快了匹配速度。