gpt4 book ai didi

algorithm - 给定两个序列,找出一个序列的结尾和另一个序列的开头之间的最大重叠

转载 作者:行者123 更新时间:2023-12-03 15:08:04 25 4
gpt4 key购买 nike

我需要找到一个有效的(伪)代码来解决以下问题:

给定两个(不一定是不同的)整数序列 (a[1], a[2], ..., a[n])(b[1], b[2], ..., b[n]) ,求最大值 d使得 a[n-d+1] == b[1] , a[n-d+2] == b[2] , ..., 和 a[n] == b[d] .

这不是作业,我实际上是在尝试沿尽可能多的维度收缩两个张量时想到的。我怀疑存在一种有效的算法(也许 O(n) ?),但我想不出不是 O(n^2) 的东西. O(n^2)方法将是 d 上的明显循环然后对项目进行内部循环以检查所需条件,直到达到最大值 d .但我怀疑比这更好的事情是可能的。

最佳答案

您可以使用 z algorithm , 线性时间 ( O (n)) 算法:

Given a string S of length n, the Z Algorithm produces an array Z where Z[i] is the length of the longest substring starting from S[i] which is also a prefix of S



您需要连接数组 (b+a) 并在生成的构造数组上运行算法,直到第一个 i 使得 Z[i]+i == m+n。

例如,对于 a = [1, 2, 3, 6, 2, 3] & b = [2, 3, 6, 2, 1, 0],连接将是 [2, 3, 6, 2, 1 , 0, 1, 2, 3, 6, 2, 3] 这将产生 Z[10] = 2 满足 Z[i] + i = 12 = m + n。

关于algorithm - 给定两个序列,找出一个序列的结尾和另一个序列的开头之间的最大重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60421326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com