比较向量元件的运行时间复杂性的提高

Increasing efficiency of run-time complexity of comparing vector elements?

本文关键字:时间复杂性 运行 比较 向量      更新时间:2023-10-16

我有两个向量:

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};
}