suffix-array相关内容

LCP 如何帮助查找模式的出现次数?

我了解到最长公共前缀 (LCP) 可用于查找字符串中某个模式出现的次数. 具体来说,您只需要创建文本的后缀数组,对其进行排序,然后无需进行二分查找来查找范围,这样您就可以计算出出现的次数,您只需计算每个连续的 LCP后缀数组中的条目. 虽然使用二分搜索来查找模式的出现次数很明显,但我无法弄清楚 LCP 如何帮助找到此处出现的次数. 例如对于banana的这个后缀数组: LCP ..

通过后缀数组的最长公共子字符串:我们真的需要唯一的标记吗?

我正在阅读有关LCP数组及其与后缀数组结合使用的信息,以解决“最长的公共子字符串"问题.此视频指出,用于分隔单个字符串的标记必须唯一,而不是包含在任何字符串本身中. 除非我弄错了,否则的原因是这样,当我们构造LCP数组时(通过比较相邻后缀共有多少个字符),在两个前哨碰巧位于以下位置的情况下,我们不计算前哨值我们正在比较的两个后缀中的索引相同. 这意味着我们可以编写如下代码: 最短后缀 ..

通过后缀数组的最长公共子字符串:sentinel的使用

我正在阅读一系列字符串中最长(常见)子字符串的(显然)众所周知的问题,并且一直在关注这两个视频,它们讨论了如何使用后缀数组解决问题:(请注意,这个问题并不不需要您观看): https://youtu.be/Ic80xQFWevc https://youtu.be/DTLjHSToxmo 第一步是首先将所有源字符串连接成一个大字符串,并用一个“唯一的"标记来分隔每个源,其中每个标记 ..
发布时间:2021-04-02 20:51:10 其他开发

使用后缀树/数组的最长非重叠重复子串(仅算法)

我需要找到一个字符串中最长的非重叠重复子字符串。我有可用的字符串的后缀树和后缀数组。 允许重叠时,答案很简单(后缀树中最深的父节点)。 例如String =“ acaca” 如果允许重叠,则答案为“ aca”,但不允许重叠允许,答案是“ ac”或“ ca”。 我只需要算法或高级思路。 PS:我尝试过,但是没有明确的答案可以在网上找到。 解决方案 生成后缀数组并 ..
发布时间:2020-06-03 20:39:05 其他开发

用于n个字符串的最长公共子字符串的Java实现

我需要找到n个字符串中最长的公共子字符串,并在我的项目中使用结果。 java中是否存在已经执行此操作的现有实现/库? 感谢你提前回复。 解决方案 怎么样并发树? 它是 Maven Central 中的一个小型(~100 KB)库。该算法使用 Radix 和后缀树的组合。已知具有线性时间复杂度(维基百科) 。 public static String getLong ..
发布时间:2018-12-07 18:35:11 Java开发

LCP如何帮助查找模式的出现次数?

我已经读过最长公共前缀(LCP)可用于查找字符串中模式的出现次数。 具体来说,您只需要创建文本的后缀数组,对其进行排序,然后不进行二进制搜索以找到范围,以便您可以计算出现次数,只需为每个连续的条目计算LCP在后缀数组中。 虽然使用二进制搜索来查找模式的出现次数很明显但我无法弄清楚LCP如何帮助查找出现的次数这里。 例如,对于香蕉的后缀数组: LCP后缀条目 N / A ..

LCP如何帮助找到模式的发生次数?

我读过,可以使用最长公用前缀(LCP)查找字符串中模式的出现次数。 具体来说,您只需要创建文本的后缀数组,对其进行排序,然后再进行二进制搜索来查找范围,以便您可以找出出现的次数,您只需为每个连续条目计算LCP在后缀数组中。 虽然使用二进制搜索来查找模式的出现次数很明显,我无法弄清楚LCP如何帮助查找出现的次数这里。 例如对于香蕉的此后缀数组: LCP后缀条目 N / A ..

后缀阵列算法

后缀数组:表示一个后缀数组和LCP数组 LCP数组:包含两个连续后缀之间的最大长度前缀匹配,后面是按字典顺序排序。 几天后,我一直在努力理解,后缀数组和LCP算法究竟如何工作。 / strong> 以下代码来自 Codeforces : / * 后缀数组O(n lg ^ 2 n) LCP表O (n) * / #include #includ ..
发布时间:2017-04-03 11:19:37 C/C++开发

最长公共prefixes

假设我构建了一个后缀阵列,即整数给人一种字符串字典顺序的所有后缀的起始位置的数组。 例:对于一个字符串海峡= abcabbca , 后缀数组是: suffixArray [] = [7 3 0 4 5 1 6 2] 说明: 我的STR后缀LCP和STR [我..] LCP长度 7一个一个1 3 abbca AB 2 0 abcabbca abcabbca 8 4丰原空字符串0 ..
发布时间:2015-11-30 22:12:39 C/C++

勘误表后缀阵列的原始论文?

我期待在原皮引入后缀数组的“后缀数组:上线字符串搜索的新方法”。 我想不通的行4和第5(索引从0)的逻辑。该行写着: 否则如果的为r P 或的是W 研究≤一个 POS [N-1] + R 则 →是W ←ñ 是W 是一个长度为“P”我们正在寻找的模式,研究是 LCP(A [POS [N-1]:],W)。的问题是,在几乎所有的情况下,这 LCP 将小于“W”的长度。这个条件是为了处理这种情 ..
发布时间:2015-11-30 20:40:03 C/C++

了解使用LCP阵列算法进行模式匹配

前言:我的问题主要是一个算法的问题,所以即使你不熟悉的后缀,LCP阵列,你或许可以帮我 在它描述了如何有效地使用后缀,LCP阵列字符串模式匹配这个文 我的理解SA和LCP的工作,以及如何算法的运行时间可以从 O(P *日志(N))(其中改进P 是该模式的长度和 N 是字符串的长度)为 0(P +日志(N))(感谢Chris Eelmaa的回答 href="http://stackoverflo ..
发布时间:2015-11-30 15:40:34 C/C++

最小辞书轮换使用后缀数组

考虑长度为n的字符串(1< = N< = 100000)。 确定其最小词典旋转。 例如,该串的旋转“alabala”是: alabala labalaa abalaal balaala alaalab laalaba aalabal 以及它们之间的最小的是“aalabal”。 这是由 ..
发布时间:2015-11-30 15:07:55 C/C++

完整的后缀数组

一个后缀数组将索引中的所有后缀为字符串给定的名单,但如果你想索引的所有可能的唯一子是什么?我有点在这个新的,所以在这里我的意思的例子: 鉴于字符串 ABCD 一个后缀数组索引(至少我的理解) (ABCD,BCD,CD,D) 我想指数(所有子) (ABCD,BCD,CD,D,ABC,BC,C,AB,B,A) 是一个后缀数组我在找什么?如果是这样,我该怎么办,让所有的 ..
发布时间:2015-11-30 14:58:22 Python

如何LCP在寻找一个模式出现的次数帮助吗?

我已阅读,在最长公共preFIX(LCP)可以用来找到一个模式字符串中出现的次数。 具体而言,你只需要创建一个文本的后缀数组,排序它,而不是做二进制搜索找到的范围,使您可以找出出现的次数那么,您只需计算LCP对于每个连续进入后缀数组中开始。 虽然使用二进制搜索找到出现的模式的数量是明显的,我不能找出LCP如何帮助查找出现的次数在这里。 例如对于此后缀数组香蕉: LCP后缀项 N / A一 ..

最长公共子串

我们 A 和 B 分别有两个字符串。 的长度大于或等于 B 。我们必须找出最长公共子串。如果有多个答案,那么我们就必须输出,来得早在 B (先前在其开始索引至上)的子字符串。 注:长度 A 和 B 可以高达10 6 我试图找到使用后缀阵列(排序使用快速排序的后缀)的最长公共子串。因为当有多个答案的情况下,我想推动所有常见的子字符串在栈等于最长公共子串的长度。 我想知道有没有更快的方法来做到这 ..
发布时间:2015-11-30 14:39:11 C/C++