码迷,mamicode.com
首页 > 其他好文 > 详细

时空权衡法

时间:2015-07-28 10:39:03      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

实现思路:对全部输入或者部分做预处理,得到额外信息从而帮助提升算法效率

例子:模式匹配

/*
 * 模式匹配
 * 直接思路:
 *      时空权衡法:对模式串进行预处理,构造出额外的移动信息表
 */
void makeTable(string pattern, char* table) {
    // table默认移动是整个模式串长度
    char* p = table;
    while p < end do
        *p = pattern.len;
        p++;

    char* q = pattern.end();
    int pos = pattern.len;
    while q > begin do
        table[q] = pos;
        q--;
        pos--;
}


// Horspool算法
// 通过对部分输入(模式串)进行预处理而获得额外信息(移动位置表)
int matchPattern(string str, string pattern) {
    char table[26];
    makeTable(pattern, table);
    cur = str[pattern.len];
    while cur < end do 
        p = cur; q = pattern.end;
        while (q > pattern.begin) do
            if (*q != *p)   break;
            q--;    p--;
        if (q == pattern.begin)     
            return (p - str.begin)
        else                        
            cur += table[q]
}

 

时空权衡法

标签:

原文地址:http://www.cnblogs.com/johnchow/p/4682005.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!