Algorithm O(nk)时间内的动态规划函数

Algorithm O(nk)时间内的动态规划函数,algorithm,dynamic-programming,Algorithm,Dynamic Programming,给定两个整数数组A的大小为n,B的大小为k,并且知道所有项 在数组B是唯一的,我想找到一个算法,找到索引j'

给定两个整数数组A的大小为n,B的大小为k,并且知道所有项 在数组B是唯一的,我想找到一个算法,找到索引j'

为了提供更清晰,我们可以考虑数组A= { 1, 2, 9,6, 7, 8,1, 0, 0,6 }和B {1, 8, 6 },然后您可以看到B⊆ A[1:6]和B⊆ A[4:7],但同时是7−4 < 6−1. 因此,算法应该输出j'=4和j'=7

我想找到一个在O(nk)时间内运行的算法

到目前为止,我的工作是为每个j'∈ [n] ,我可以计算最小的j“≥ 所以B⊆ A[j',j']。如果我假设B={b1,…,bk},让Next[j'][I]表示最小的索引t≥ 因此at=b_i,即a_j'(包括)之后的下一个元素的索引,它等于bi。 特别是,如果不存在,只需让Next[j'][i]=∞. 如果我能证明最小j''如下

j''=最大值i∈[k] 下一个[j'][i]


然后我想我将能够设计一个动态规划算法来计算O(nk)时间内的下一个。在此动态规划问题上的任何帮助都将不胜感激

只需运行一个滑动窗口,该窗口保持包含B的所有元素的不变量。这是O(n)与哈希映射。

要将其分解为OP a bit:保持频率的哈希表f[],以便所有i∈ B、 f[i]是当前窗口中i的副本数。最初,从[0..0]的窗口开始,向右扩展它的右边缘,直到f[]的所有条目都不为零,比如说,在R处。现在向右收缩左边缘,直到一些f[i]变为0,比如说左边缘在L:[L-1,R]是从L-1开始的最佳解,并且以j