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
- C++11 我需要做什么才能同时拥有C++/CLI和非托管C++;11个枚举类?
c++11enumsc++-cli
- C++11 使用std::bind在std::any\u中绑定bool成员函数?
c++11
- C++11 std::future and clang with-stdlib=libstdc++;
c++11clang
- C++11 C++;11(和C+;+;14…)在标准库中按版本提供的支持?
c++11
- C++11 如何定义constexpr变量
c++11
- C++11 在面向对象继承中使用协方差避免冗余代码
c++11inheritance
- C++11 为模板参数设置别名
c++11templates
- C++11 typedef char*b是什么意思?
c++11pointersmemory-management
- C++11 C+中带有HippoMocks成员的gtest派生类的编译错误looser-throw说明符+;11
c++11
- C++11 为什么启用_失败会导致编译时错误?
c++11templates
- C++11 如何加快地图插入?
c++11
- C++11 为什么std::vector上的sizeof()输出与std::vector的sizeof()不同(如果vector在类中)?
c++11vector
- C++11 std::原子布尔值的严格转换
c++11
- C++11 自动调用移动构造函数
c++11
- C++11 为什么我会在g++;4.8.5?
c++11
- C++11 创建一个C++;模板函数,允许多种类型的数组容器
在现代C++中,可以通过下面显示的三种主要方法创建数组。
// Traditional method
int array_one[] = {1, 2, 3, 4}
// Vector container
std::vector<int> array_two = {1, 2, 3, 4}
// array container
std::array<int, 4> array_three = {1, 2, 3, 4}
c++11templates
- C++11 递增迭代器c++;装满另一个容器后
c++11vector
- C++11 1<&书信电报;我的意思是,我该如何使用它?
c++11
- C++11 如何使用只连接一次的多线程从Internet读取数据?
c++11
- C++11 什么是常见的';图幅';?
c++11