第一题:点集数量非常大,里面可能存在两点之间距离小于d的状况,请写一个算法,将这些点找出来。
思路:建立矩阵空间索引,边界点标注,距离运算处理
1.首先建立距离为10d的网格空间索引,对每个点进行判断,若该点符合距离索引边界小于d的特征,则将其标记为边界点,存到特定数组中。
2.对每个索引网格内的点集进行距离运算,若距离小于d,则标记为错误点。
3.对于确定的边界点集,将相邻网格空间的边界点进行运算距离,若距离小于d,则标记为错误点。
Tips :在计算距离时,不要直接计算,先判读x坐标的之差与y坐标之差的绝对值,若二者有其一是大于d的,则无需继续计算下去,若均小于d,则只计算平方值是否小于d平方即可。
第二题:已知一个pointcurrent,求出离该点最近的n个点,并将其删除。
思路:空间索引,外接矩形
利用上一步建立好的空间索引,对pointcurrent所在的网格内的点进行统计,若小于n,则统计相邻网格的点数,若小于n,则继续此操作,若大于n,则建立相邻网格的点集,将点集中的点于pointcurrent 做距离计算,并排序。
第一题拓展:求点集中,距离最近的两个点。
思路:分治法