C++ 找到坐标的中位数以构建kd树(2D)-C++;
我有一个2D问题中的最近邻问题,我发现kd树是最好的解决方案。 我无法为正在使用的结构找到现成的实现,因此我决定创建自己的实现 我使用的结构是:C++ 找到坐标的中位数以构建kd树(2D)-C++;,c++,median,nearest-neighbor,kdtree,C++,Median,Nearest Neighbor,Kdtree,我有一个2D问题中的最近邻问题,我发现kd树是最好的解决方案。 我无法为正在使用的结构找到现成的实现,因此我决定创建自己的实现 我使用的结构是: struct Point{ int id; double x; double y; }; 我有将近100000个点,我的问题是:每次我想要划分我的点时,如何继续寻找中间点,以及如何同时定义左分区和右分区 另一个问题是:有没有更有效的方法?(尽可能缩短时间) 如何计算中位数?有没有更有效的方法进行 我将对这两个问题给出一个答案:您可以使用,
struct Point{
int id;
double x;
double y;
};
我有将近100000个点,我的问题是:每次我想要划分我的点时,如何继续寻找中间点,以及如何同时定义左分区和右分区
另一个问题是:有没有更有效的方法?(尽可能缩短时间)
如何计算中位数?有没有更有效的方法进行
我将对这两个问题给出一个答案:您可以使用,如下所示:
std::vector<float> v; // data vector (global)
bool myfunction (int i,int j) { return (v[i]<v[j]); }
int find_median(std::vector<int> &v_i)
{
size_t n = v_i.size() / 2;
nth_element(v_i.begin(), v_i.begin()+n, v_i.end(), myfunction);
return v_i[n];
}
std::vector v;//数据向量(全局)
bool myfunction(inti,intj){return(v[i]你需要最接近平均值的点的中间点吗?因为在2D系统中,x和y坐标的中间点是不同的。我的意思是将我的所有点分成两个不同的分区,并具有相等的点(或多或少)。是的,这取决于我们每次使用的是x还是y。问题是,我看不出有任何好的方法可以使用带坐标的第n个元素。这取决于您的实现。您问过要走哪条路,方法是第n个元素。n个元素
。希望这对您有所帮助,并提供良好的编码!:)@TahaBenabdallah谢谢你,我会想办法的:)@TahaBenabdallah这就是精神。我投票给你,这样你就可以有更多的声誉,如果你需要发布另一个可能有问题的问题,祝你好运!