Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 找到坐标的中位数以构建kd树(2D)-C++;_C++_Median_Nearest Neighbor_Kdtree - Fatal编程技术网

C++ 找到坐标的中位数以构建kd树(2D)-C++;

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个点,我的问题是:每次我想要划分我的点时,如何继续寻找中间点,以及如何同时定义左分区和右分区 另一个问题是:有没有更有效的方法?(尽可能缩短时间) 如何计算中位数?有没有更有效的方法进行 我将对这两个问题给出一个答案:您可以使用,

我有一个2D问题中的最近邻问题,我发现kd树是最好的解决方案。 我无法为正在使用的结构找到现成的实现,因此我决定创建自己的实现

我使用的结构是:

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这就是精神。我投票给你,这样你就可以有更多的声誉,如果你需要发布另一个可能有问题的问题,祝你好运!