比较向量元件的运行时间复杂性的提高
Increasing efficiency of run-time complexity of comparing vector elements?
我有两个向量:
std::vector<int> V1 {1,2,3,4,5,6,7};
std::vector<int> V2 {1,2,3};
执行以下将导致二次运行时复杂性:
for(auto IT = V1.begin(); IT != V1.end(), IT++)
{
for(auto IT2 = V2.begin(); IT2 != V2.end(); IT2++)
{
if(*IT == *IT2){std::cout<<"Found a match!"<<std::endl;}
else{std::cout<<"No match!"<<std::endl;}
}
}
有什么明确的方法可以将其降低到线性时间?
使用STL算法会启用此?
例如:
for(auto IT = V1.begin(); IT != V1.end(); IT++)
{
std::find(V2.begin(), V2.end(), *IT);
}
您将需要将一个数组保持在线性时间(显然您正在从0到nth的元素搜索时源数组)。
但是,您 can 通过确保首先对搜索空间的内容进行排序,从而将其他搜索词放下。这将允许使用二进制搜索算法(n)复杂性。
祝你好运!
一个例子:
std::vector<int> V1 {1,4,5,6,3};
std::vector<int> V2 {100, 104,101,3};
bool condition {false};
std::sort(V2.begin(), V2.end());
for(auto IT = V1.begin(); IT != V1.end(); IT++)
{
auto result {std::binary_search(V2.begin(), V2.end(), *IT)};
if(result > 0){ condition = true};
}
相关文章:
- 具有未知值时的时间复杂性
- 使用堆查找第K个最大元素的时间复杂性
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 解决这个问题的时间复杂性是多少
- 如何在指定的时间内运行循环
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 如果我使用minPts为1的DBSCAN算法,它还会在O(nlogn)时间内运行吗
- 对于像C++这样的现实世界语言,时间复杂性有什么一致的定义吗
- 两个嵌套循环的运行时间复杂性:二次型还是线性
- 在给定相同的输入的情况下,某些代码怎么可能花费更多时间来运行,这似乎只是因为它处于循环中?
- 是平衡二进制树上预购和DFS的时间复杂性
- 带有多个内部回路的循环的时间复杂性
- 列表STL的时间复杂性在一段时间内进行排序
- O(2M N)和O(kN)的时间复杂性
- 映射向量的时间复杂性是多少
- 时间复杂性差异以及如何
- 递归最糟糕的情况时间复杂性
- 可传递值影响递归算法的渐近时间复杂性
- 程序的时间复杂性确定两个字符串是否彼此排列
- 比较向量元件的运行时间复杂性的提高