• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

竹千代

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

时空权衡法

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

例子:模式匹配

/*
 * 模式匹配
 * 直接思路:
 *      时空权衡法:对模式串进行预处理,构造出额外的移动信息表
 */
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]
}

 

posted on 2015-07-28 10:07  竹千代  阅读(304)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3