顺便聊一下数据结构 | 每日一练(107)

数据结构

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下

——老子

1

每日一练

1.设主串 S=‘xxyxxxyxxxxyxyx’,模式串 T=‘xxyxy’。请问:如何用最少的比较次数找到 T 在 S 中出现的位置?相应的比较次数是多少?

2.KMP 算法(字符串匹配算法)较 Brute(朴素的字符串匹配)算法有哪些改进?

正确答案

PS:||代表注释

1.朴素的模式匹配(Brute-Force)时间复杂度是O(m*n),KMP算法有一定改进,时间复杂度达到O(m+n)。本题也可采用从后面匹配的方法,即从右向左扫描,比较6次成功。另一种匹配方式是从左往右扫描,但是先比较模式串的最后一个字符,若不等,则模式串后移;若相等,再比较模式串的第一个字符,若第一个字符也相等,则从模式串的第二个字符开始,向右比较,直至相等或失败。若失败,模式串后移,再重复以上过程。按这种方法,本题比较18次成功。

2.KMP算法主要优点是主串指针不回溯。当主串很大不能一次读入内存且经常发生部分匹配时,KMP算法的优点更为突出.

正文完