获取与特定模式距离最小的矢量的元素位置

get elements positions of a vector with minimal distance from a certain pattern

本文关键字:元素 位置 模式 距离 获取      更新时间:2023-10-16

有一个字符串 strvec 和一个模式字符串的向量,我尝试沿着 strvec 进行模糊搜索,以获得与模式最小距离 + 一定公差 (tol) 的所有元素位置。 从几何上讲,我想在圆圈中获取半径等于 : 与 strvec+tol 的最小距离的单词。所以我的算法应该得到:

  • 元素位置与 strvec minimal_distance(如果 strvec 包含模式,算法应继续搜索以获得与零不同的最小距离。
    • 距离 的所有元素位置

我假设距离是使用函数get_distance计算的。

这是我的代码:

vector<int> dist_minimal(const char* pattern, vector<string> strvec,int tol=4)
{
  std::vector<int> v;
  int min = 100; //  big value to init
  for (vector<string>::iterator it = strvec.begin(); it != strvec.end() ; it++){
   int lev_dist=get_distance(pattern, *it);
   auto position = it-strvec.begin()+1 ;
   if(lev_dist < min && lev_dist >0){
     v.clear();
     v.push_back(position);
     min = lev_dist;
     std::cout << min << std::endl;
   }else if (lev_dist == min){
     v.push_back(position);
   }
  }
  return v;
} 

我只得到完全等于最小距离的元素,没有 min_distance 和 min_distance+tol 之间的元素。

你能改变吗

else if (lev_dist == min)
{
    v.push_back(position);
}

else if ((lev_dist <= (min + tol)) && (lev_dist >= (min - tol)))
{
    v.push_back(position);
}