欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Python中的孫子算法詳解

謝彥文2年前34瀏覽0評論

什么是孫子算法?

孫子算法是一種字符串匹配算法,用于在一個長文本中查找一個短字符串的位置。

為什么要使用孫子算法?

),孫子算法更加高效。

如何實現孫子算法?

孫子算法主要分為兩個步驟預處理和匹配。

預處理是指在短字符串中構建一個后綴數組和一個好后綴規則數組。

后綴數組是指將短字符串的所有后綴按字典序排序后得到的數組。對于短字符串"ababac",其后綴數組為["a", "ab", "abac", "ac", "b", "bac"]。

好后綴規則數組

好后綴規則數組是指對于每一個后綴,找到其在短字符串中匹配的長后綴和長前綴。對于短字符串"ababac",其好后綴規則數組為

后綴 | 長后綴 | 長前綴

---- | ------- | -------

c | 無 | "c"

ac | "c" | 無

bac | "ac" | 無

abac | "c" | "a"

b | 無 | "b"

ab | "b" | "a"

匹配是指在長文本中查找短字符串的位置。

匹配的過程分為兩個步驟壞字符規則和好后綴規則。

壞字符規則

壞字符規則是指在長文本中從右往左查找短字符串,如果發現不匹配的字符,則將短字符串向右移動到壞字符的下一個字符。對于長文本"ababacabacab"和短字符串"abac",當在長文本中匹配到"b"和"o"時,發現不匹配,因此將短字符串向右移動到"b"的下一個字符。

好后綴規則

好后綴規則是指當壞字符規則無法再移動短字符串時,根據好后綴規則數組來移動短字符串。對于長文本"ababacabacab"和短字符串"abac",當短字符串移動到"ac"時,發現不匹配,因此根據好后綴規則數組來移動短字符串。

綜合壞字符規則和好后綴規則,可以在長文本中查找短字符串的位置。

孫子算法是一種高效的字符串匹配算法,可以在長文本中查找短字符串的位置。其核心思想是在短字符串中構建后綴數組和好后綴規則數組,然后根據壞字符規則和好后綴規則在長文本中查找短字符串的位置。