From f1d30940341ff439f3a98a9d24182d2a2823fe04 Mon Sep 17 00:00:00 2001 From: Shine wOng <1551885@tongji.edu.cn> Date: Tue, 1 Oct 2019 14:56:23 +0800 Subject: [PATCH] begin conclusion on kmp , not finished yet. --- thu_dsa/chp11/brute_force.png | Bin 0 -> 31981 bytes thu_dsa/chp11/brute_force_flaw.png | Bin 0 -> 48053 bytes thu_dsa/chp11/brute_force_worst.png | Bin 0 -> 21507 bytes thu_dsa/chp11/kmp.md | 49 ++++++++++++++++++++++++++++ words.md | 49 ++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 thu_dsa/chp11/brute_force.png create mode 100644 thu_dsa/chp11/brute_force_flaw.png create mode 100644 thu_dsa/chp11/brute_force_worst.png create mode 100644 thu_dsa/chp11/kmp.md diff --git a/thu_dsa/chp11/brute_force.png b/thu_dsa/chp11/brute_force.png new file mode 100644 index 0000000000000000000000000000000000000000..c425b411cab720ae706da08517b9e7793378b1ea GIT binary patch literal 31981 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 literal 0 HcmV?d00001 diff --git a/thu_dsa/chp11/brute_force_flaw.png b/thu_dsa/chp11/brute_force_flaw.png new file mode 100644 index 0000000000000000000000000000000000000000..f65720d608ce3022bb33a70d000fbfa73e60a616 GIT binary patch literal 48053 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 I8xNlTFLrSdjQ{`u literal 0 HcmV?d00001 diff --git a/thu_dsa/chp11/brute_force_worst.png b/thu_dsa/chp11/brute_force_worst.png new file mode 100644 index 0000000000000000000000000000000000000000..42ba257166cc42a2c436c273b9a01e5ddf1ad8ec GIT binary patch literal 21507 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 literal 0 HcmV?d00001 diff --git a/thu_dsa/chp11/kmp.md b/thu_dsa/chp11/kmp.md new file mode 100644 index 0000000..b8ad09a --- /dev/null +++ b/thu_dsa/chp11/kmp.md @@ -0,0 +1,49 @@ +kmp conclusion +============== + +字符串匹配问题是算法中的常见问题,即对于一个较长的文本串`T`,以及一个较短的模式串`P`,返回模式串`P`在文本串`T`中是否出现,或者首先出现的位置,或者所有出现的位置。实际上,在实际生活中,具有大量的字符匹配问题的应用场景,例如一般的编辑器软件,都具有的查找替换功能,还有像是`google`这种软件,本质上就是从整个因特网的文本数据中,去查找用户搜索的字符串。 + +以下主要讨论如何实现串匹配问题。 + +## 一种简明的策略 + +为了查找模式串`P`在文本串`T`中出现的位置,最简单的思路就是对于每一个可能的对齐位置,依次去比对两个串中的字符是否相等,如果完全匹配,则返回匹配成功;否则就在下一个对其位置开始新的匹配。该策略执行的流程如下图所示: + +![brute_force](brute_force.png) + +容易看出,这种策略在最坏情况下,在每个对齐位置都需要进行`m`次比对,其中`m`为模式串的长度,设文本串的长度为`n`,则最坏情况下的时间复杂度为`O(mn)`。一种最坏情况的实例如下图所示: + +![brute_force_worst](brute_force_worst.png) + +## kmp + +对上面的蛮力策略进行分析,可以发现其时间性能较差是因为在该策略中做了大量无意义的比对。比如上图中的这种情况,在每一个对齐位置都首先进行`m - 1`次成功的比对,其中每个字符都是`'0'`,然后失败于最后的一次比对。每次移动到新的对齐位置后,此前比对过的字符,将再次参与比对。如下图所示: + +![brute_force_flaw](brute_force_flaw.png) + +正是这些重复的比对,拉低了该策略的时间性能。因此,就应该从避免这些重复工作的角度,来对该算法进行改进。 + +具体的做法是,如果在一次比对中,失败于模式串`P`中第`k`各字符,则此前已经进行了`k - 1`次成功的比对,因此此时我们已经获悉了文本串`T`中对之对齐的`k - 1`个字符的全部信息,因此就可以将模式串快速移动,直到移动到下一个“值得”对齐的位置。这里的“值得”对齐的位置,其实就是移动后模式串的前缀,要与文本串中这`k - 1`个字符的后缀相匹配。这就是`kmp`算法的基本思路。 + +应该注意到,采用`kmp`策略时,每次移动的距离只与模式串`P`有关,而与文本串`T`无关。这是因为在第`k`个位置失配后,文本串中的这`k - 1`个字符和模式串长度为`k - 1`的前缀完全相同。因此所谓“值得”对齐的位置,其实就是这`k - 1`字符构成的串,前缀和后缀自相匹配的位置。 + +需要指出的是,这样的位置可能有多个,所有的这些位置都是“值得”的对齐位置,因此,为了不错过其中的任意一个对齐位置,移动距离应该取所有这些自匹配位置中最小的,也就是自匹配长度最长的。为了在`kmp`算法运行过程中,迅速更新串的对齐位置,可以对模式串`P`做预处理,将在第`k`个字符处匹配失败的最长自匹配长度,保存在`next[k]`中,以便于查询。这样,就可以实现`kmp`算法了: + +```cpp +int match(char* text, char* pattern){ + int* next = makeNext(pattern); + int i = 0, j = 0, m = strlen(text), n = strlen(pattern); + while(i < m && j < n){ + if(j < 0 || text[i] == pattern[j]){ + ++i; + ++j; + } + else j = next[j]; + } + return i - j; +} +``` + +可以看到,如果匹配成功,则同时移动文本串和模式串的指针;一旦匹配失败,就将模式串的指针移动到`next[j]`,即实现上面所说的快速移动。需要注意的是对`j < 0`情况的处理,此时相当于在模式串的左边具有一通配符,即`pattern[-1] = *;`,它可以匹配任何的字符,这样就可以将该情况与匹配成功做相同的处理。 + +这样,现在的主要问题就是如何构造这样一个`next`数组,即实现上面的`makeNext`函数。 diff --git a/words.md b/words.md index 60f48e2..20b11fd 100644 --- a/words.md +++ b/words.md @@ -899,3 +899,52 @@ Some Words - The union is up in arms over the reduction in health benefits. +## 30th, Sep + ++ legitimacy +> (n)the quality of being legal + + - The lawyers expressed serious doubts about the legitimacy of military actions. + ++ impartial +> (adj)not involved in a particular situation, and therefore able to give a fair opinion or piece of advice + + - A trial must be fair and impartial. + - The state must ensure the independence and impartiality of the justice system. + ++ code of conduct +> (n)a set of rules about how to behave and do business with other people + + - Doctors say a new code of conduct is urgently needed to protect the doctor-patient relationship. + ++ judiciary +> (n)the part of a country's government that is responsible for its legal system, including all the judges in the country's courts + + - The judiciary must think hard before jailing nonviolent offenders. + ++ ideological +> (adj)based on strong beliefs or ideas, especially political or economic ideas + + - The party is split by ideological differences. + - There are some fairly profound ideological disagreements within the movement. + ++ dismiss +> (v)to refuse to consider someone's idea, opinion, etc, because you think it is not serious, true, or important. + + - The government has dismissed criticisms that the country's health policy is a mess. + - He just laughed and dismissed my proposal as unrealistic. + ++ address +> (v)if you address a problem, you start trying to solve it. + + - Our products address the needs of real users. + - The government has to address the rise in violent crimes. + ++ accountable +> (adj)responsible for the effects of your actions and willing to explain or be criticised for them + + - The hospital should be held accountable for the quality of care if gives. + - Managers must be accountable to their decisions. + - The government should be accountable to all the people of the country. + +