大矩阵中的最大相等子矩阵

Largest equal submatrices in bigger matrix

本文关键字:      更新时间:2023-10-16

假设你有一个高h宽w (h,w <= 500)的矩阵,你必须找到两个大小相等的子矩阵。有什么解决办法吗?

存在优于O(w2h2)的算法。让我们先考虑一个更简单的版本。给定一个只有小写字母的矩阵M,找出矩阵中最大的子字符串。这个问题等于在M[i]M[i+1]之间加入不同的特殊字符,求出M[0]$1M[1]...M[w-1]中最长的公共子串。使用后缀数组,可以在线性时间内解决最长公共子串问题,对于这种情况,可以在O(wh)内解决。

对于最大子矩阵问题,可以通过枚举所有可能的高度l<=h将其简化为子串问题,同时,高度l的两个子串的字典顺序可以从高度l-1的子串的顺序继承。

@Niklas B解释道。在第一次迭代中,我们使用后缀数组对矩阵的行后缀进行排序。然后在第二步中,我们使用基数排序和重用在第一次迭代中计算的秩,对相邻的2行组合的后缀进行排序。在第三步中,我们对相邻3行等的后缀进行排序。还可以为每次迭代维护LCP数组,这样就可以使用一次遍历找到出现两次的最长子字符串。

该算法为O(h2w)线性时间后缀数组构建算法。

可以枚举所有向量(-h 相关文章:

  • 没有找到相关文章