【算法学习】horspool查找匹配字符串
来源:互联网 发布:网络营销策划书 编辑:程序博客网 时间:2024/06/05 09:42
Horspool算法(时空权衡)
利用空间提高时间效率
该算法是从模式串右往左方向匹配文本的,找不到匹配就右移模式串继续找。
文本串: s0 s1 .... A sn
B R O S E R (R与A不匹配)
s0 s1.... A R sn
B R O S E R(E与A不匹配)
此时,有不匹配位置pattern最后一个元素相对应的text元素来确定移动数组右移多少位置。(上面分别是A和R)
如上面两个例子移动为:
文本串: s0 s1 .... A sn
B R O S E R (模式串没有A)
s0 s1.... A R sn
B R O S E R(在还没匹配到的元素中,找到一个匹配的元素(R))
初始化移动数组是移动pattern的长度。
详细代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>//计算辅助数组void CreateTable(char pattern[], int length, int table[]){ int idx; for (idx = 0; idx < 26; ++idx) table[idx] = length; for (idx = 0; idx < length - 1; ++idx) table[pattern[idx] - 97] = length - 1 - idx;}int Find_Pattern(char text[], int tlen, char pattern[], int plen){ if (tlen < plen) return -1; int table[26]; CreateTable(pattern, plen, table); int idx = plen - 1; int k; while (idx <= tlen - 1) { k = 0; while (text[idx - k] == pattern[plen - 1 - k] && k <= plen - 1) ++k; if (k == plen) return idx - plen + 1; else idx = idx + table[text[idx] - 97]; } return -1;}int main(int argc, char *argv[]){ while (1) { printf("Please input text:"); char text[256]; scanf("%s", text); printf("Please input pattern:"); char pattern[256]; scanf("%s", pattern); int idx = Find_Pattern(text, strlen(text), pattern, strlen(pattern)); printf("Result:\n"); printf("%s\n", text); int i; for (i = 0; i < idx; ++i) printf("%c", 32); printf("%s\n",pattern); } return 0;}
horspool 最差效率为O(nm),随机文本来说是O(n)
0 0
- 【算法学习】horspool查找匹配字符串
- Horspool字符串匹配算法
- Horspool字符串匹配算法
- Horspool字符串匹配算法
- HorsPool字符串匹配算法
- 字符串匹配算法horspool
- Horspool(字符串匹配)算法
- 字符串匹配之Horspool算法
- 字符串匹配之horspool算法
- 字符串匹配算法 之 (Horspool )Boyer-Moore-Horspool
- 字符串匹配 — Horspool
- 快速字符串模糊匹配--基于Horspool的模糊匹配算法
- 字符串匹配之horspool算法(简化的BM算法)
- sunday、kmp、 bm、 horspool字符串匹配算法 code
- 字符串匹配---KMP,Horspool,Boyer-Moore和Sunday等算法
- 字符串模式匹配之Brute force、KMP、Horspool算法
- 【算法学习】KMP查找匹配字符串
- 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽
- MFC 菜单自绘
- ssh框架
- c#中的delegate(委托)和event(事件)的用法
- 矩形裁剪算法_pyopengl版本1
- android之HttpURLConnection 字段解析
- 【算法学习】horspool查找匹配字符串
- apache2中没有apxs
- TCP自时钟/拥塞控制/带宽利用之脉络半景解析
- 华为机试---数独
- 设置不要缓存cookie
- CFRunLoop
- Longest Increasing Subsequence
- 原来我真的不会用seajs
- 数字梯形问题(最小费用流)