update words and modify some mistakes.
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
因此,坏字符策略实现的关键,就在于找到模式串中,位于坏字符`Y`左侧,并且与字符`X`能够匹配的下一个字符。应该指出的是,这样的字符能够有多个,也就对应了多个移动距离,所有这些移动距离都是值得对齐的。因此,为了不错过其中的任意一个字符,应该取移动距离最小的那一个,使之与文本串中的`X`对齐。
|
||||
|
||||
为了快速地确定下一个对齐位置,可以仿照`kmp`算法的思路,对于模式串中出现过的所有字符,保存每个字符出现的最后位置,构成`bc`表,以便在字符匹配时迅速更新对齐位置。因此,`bc`表就有$\left|\Sigma\right| + 1$项,其中$\Sigma$为模式串的字符集大小,并且将额外的一项用来代表所有没有在模式串中出现过的字符,此时直接将模式串整体移过该字符。
|
||||
为了快速地确定下一个对齐位置,可以仿照`kmp`算法的思路,对于模式串中出现过的所有字符,保存每个字符出现的最后位置,构成`bc`表,以便在字符匹配时迅速更新对齐位置。因此,`bc`表就有$\left|\Sigma\right| + 1$项,其中$\Sigma$为模式串的字符集,并且将额外的一项用来代表所有没有在模式串中出现过的字符,此时直接将模式串整体移过该字符。
|
||||
|
||||
这样,`bm-bc`策略就可以利用`bc`数组来快捷地实现了。在一次匹配失败后,比如失败位置`j`处文本串字符为`X`,查询`bc`表会有三种情况:
|
||||
|
||||
@@ -86,11 +86,11 @@ void makeBC(char* const pattern, int* bc){
|
||||
|
||||
基于上面的考虑,我们这里提出好后缀(good suffix, gs)策略。顾名思义,好后缀策略就是要将某次比对失败前的成功比对信息加以利用,因此它的思想和`kmp`算法是一致的。具体说来,就是要利用这些成功比对的信息,将模式串直接移动到下一个值得对齐的位置,那么这里的值得对齐的位置和`kmp`算法是否存在异同呢?
|
||||
|
||||
设某次比对失败于模式串的位置`j`,因此`P[j+1, m)`与文本串中的对应字符依次相等。一般地,如果这`m - j -2`个字符在模式串中左侧的另一位置再次出现,则显然是一个值得的对齐位置,如下图所示:
|
||||
设某次比对失败于模式串的位置`j`,因此`P[j+1, m)`与文本串中的对应字符依次相等。一般地,如果这`m - j -1`个字符在模式串中左侧的另一位置再次出现,则显然是一个值得的对齐位置,如下图所示:
|
||||
|
||||

|
||||
|
||||
但是如果这`m - j - 2`字符没有在模式串中重复出现,是否就不存在值得的对齐位置了呢?答案是否定的,因为此时的情形就类似`kmp`的情形了啊,一般地,如果模式串存在一个前缀,与子串`P[j+1, m)`的后缀相互匹配,那么这也是一个值得的对齐位置,如下图所示:
|
||||
但是如果这`m - j - 1`字符没有在模式串中重复出现,是否就不存在值得的对齐位置了呢?答案是否定的,因为此时的情形就类似`kmp`的情形了啊,一般地,如果模式串存在一个前缀,与子串`P[j+1, m)`的后缀相互匹配,那么这也是一个值得的对齐位置,如下图所示:
|
||||
|
||||

|
||||
|
||||
|
||||
2
words.md
2
words.md
@@ -1787,7 +1787,7 @@ Some Words
|
||||
> (adj)complete and including everything that is necessary
|
||||
|
||||
- He has writen a fully comprehensive guide to Rome.
|
||||
- We offer you a comprehensive training in all aspected of the business.
|
||||
- We offer you a comprehensive training in all aspects of the business.
|
||||
|
||||
+ coordination
|
||||
> (n)the act of making all the people involved in a plan or activity work together in an organized way.
|
||||
|
||||
Reference in New Issue
Block a user