邻近适应算法C++简单实现
时间: 2024-06-09 21:03:08 浏览: 195
用C++语言实现首次适应算法
4星 · 用户满意度95%
邻近适应算法(NAA)也被称为“反距离加权算法”,它是一种插值算法,用于在空间上从有限的可用数据点集生成连续的表面。下面是一个简单的C++实现示例:
```c++
#include<iostream>
#include <vector>
#include<math.h>
using namespace std;
double weight(double d,int p)
{
return pow(1/d,p);
}
double NAA(vector<pair<int,int> >data,pair<int,int> query,int k,int p=2)
{
double ans=0,w_sum=0;
vector<double>distances;
for(int i=0;i<data.size();i++)
{
distances.push_back(sqrt(pow(data[i].first-query.first,2)+pow(data[i].second-query.second,2)));
}
sort(distances.begin(),distances.end());
for(int i=0;i<k;i++)
{
double w=weight(distances[i],p);
ans+=w*data[i].second;
w_sum+=w;
}
ans/=w_sum;
return ans;
}
int main()
{
vector<pair<int,int> >data={{0,0},{3,5},{4,6},{5,7},{7,9},{8,10}};
cout<<NAA(data,{3,4},3)<<endl;
return 0;
}
```
其中的 `data` 是输入的数据集,`query` 是要进行插值的点, `k` 是要从数据集中选取的最近邻居的个数,`p` 是距离的幂因子。`NAA` 函数的返回值是查询点的插值结果。
阅读全文