String 无法理解中提到的概念http://pine.cs.yale.edu/pinewiki/SuffixArrays
请解释: 假设我们有一个后缀数组,对应于一个n字符的文本,并且我们希望找到一个m字符模式文本中的所有匹配项。由于后缀是有序的,最简单的解决方案是使用O(logn)比较对模式的第一次和最后一次出现(如果有)进行二进制搜索String 无法理解中提到的概念http://pine.cs.yale.edu/pinewiki/SuffixArrays,string,algorithm,search,suffix-array,String,Algorithm,Search,Suffix Array,请解释: 假设我们有一个后缀数组,对应于一个n字符的文本,并且我们希望找到一个m字符模式文本中的所有匹配项。由于后缀是有序的,最简单的解决方案是使用O(logn)比较对模式的第一次和最后一次出现(如果有)进行二进制搜索 我需要知道如何在确定模式的第一次和最后一次出现后获得所有出现的模式。您引用的文本在两个方面有点混淆,甚至可能误导: 它说找到模式的第一个和最后一个匹配项就足够了,但它应该更准确地说:后缀数组中模式的第一个和最后一个匹配项。这与基础文本中的第一次和最后一次出现不同 它说你需要O(l
我需要知道如何在确定模式的第一次和最后一次出现后获得所有出现的模式。您引用的文本在两个方面有点混淆,甚至可能误导:
<强>示例.< /强>考虑字符串<代码> bcFababxBBCACGBDECD。其后缀数组(表示为后缀的起始位置,从0开始计数)为
对应于以下后缀列表:3 : abcabxbbcabcgdebcd
12 : abcgdebcd
6 : abxbbcabcgdebcd
9 : bbcabcgdebcd
10 : bcabcgdebcd <======= first occurrence of 'bc'
4 : bcabxbbcabcgdebcd
18 : bcd
0 : bcfabcabxbbcabcgdebcd
13 : bcgdebcd <======= last occurrence of 'bc'
7 : bxbbcabcgdebcd
11 : cabcgdebcd
5 : cabxbbcabcgdebcd
19 : cd
1 : cfabcabxbbcabcgdebcd
14 : cgdebcd
20 : d
16 : debcd
17 : ebcd
2 : fabcabxbbcabcgdebcd
15 : gdebcd
8 : xbbcabcgdebcd
因此,位置10、4、18、0和13标记图案的出现
(请注意,实际上不使用后缀的完整字符串列表–仅使用整数位置列表。)
3 : abcabxbbcabcgdebcd
12 : abcgdebcd
6 : abxbbcabcgdebcd
9 : bbcabcgdebcd
10 : bcabcgdebcd <======= first occurrence of 'bc'
4 : bcabxbbcabcgdebcd
18 : bcd
0 : bcfabcabxbbcabcgdebcd
13 : bcgdebcd <======= last occurrence of 'bc'
7 : bxbbcabcgdebcd
11 : cabcgdebcd
5 : cabxbbcabcgdebcd
19 : cd
1 : cfabcabxbbcabcgdebcd
14 : cgdebcd
20 : d
16 : debcd
17 : ebcd
2 : fabcabxbbcabcgdebcd
15 : gdebcd
8 : xbbcabcgdebcd
[10, 4, 18, 0, 13]