标签:
实现思路:对全部输入或者部分做预处理,得到额外信息从而帮助提升算法效率
例子:模式匹配
/* * 模式匹配 * 直接思路: * 时空权衡法:对模式串进行预处理,构造出额外的移动信息表 */ 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