情况:
给定一些坐标为(x,y)的点,范围为0 < x < 100,000,000和0 < y < 100,000,000。
我必须找到最小的正方形,其中至少包含N个点在其边缘和内部。
我使用向量存储坐标,并搜索所有边长为minLength到maxLength的正方形(在相关空间中应用暴力方法)
struct Point
{
int x;
int y;
};
vector<Point> P;
int minLength = sqrt(N) - 1;
int maxLength = 0;
// bigx= largest x coordinate of any point
// bigy= largest y coordinate of any point
// smallx= smallest x coordinate of any point
// smally= smallest y coordinate of any point
(bigx - smallx) < (bigy - smally) ? maxLength = (bigx - smallx) : maxLength = (bigy - smally);
对于每个正方形,我查找并遍历完整的向量以查看其边缘和内部是否至少有N个点。
这种方法非常耗时。
Q1. 我应该使用哪种数据结构来提高时间效率而不改变我使用的算法?
Q2. 解决此问题的有效算法?