算法求助。
算法吧
全部回复
仅看楼主
level 3
plsaint 楼主
有几千万个三维数,找出其中所有两两之间距离小于一个特定值的组合,怎么找比较快?
2022年08月08日 10点08分 1
level 7
你是说找点数最多的组合吗?
以前有ACM题,二维数,能用的办法只有暴力搜索,规模的上限只有100个点左右。
所以你这千万个三维数就不要想找最优解了,找近似解吧。比如你要两两之间距离小于R,那么你把空间分成R/Sqrt(3)边长的立方体网格,同一个网格内的点显然两两之间距离小于R。网格之外也有一些点可能可以加进来,可以试试加入,直道不能加为止。用这种办法考察所有网格,应该就是一个近似方案了。
2022年08月11日 08点08分 2
比如有txy三个坐标,如果两组数的txy之差三个量分别小于三个值,就把t的差delta t记下来,然后再把这些delta t做一个柱状图。唯一的优势就是这些三维数的t已经排好序了,所以目前想到的办法就是每次bianliyt的时候做一个动态滑块,对于一个点就在对应的滑块内比较xy。
2022年08月11日 09点08分
已经用python多线程实现了,但运行效率还是非常堪忧,正在考虑用c语言重做一个
2022年08月11日 09点08分
@plsaint 最坏情况下,如果所有点靠得很近,两两之间距离都小于了限定的三个值,那是否复杂度就不会低于平方级?因为每两个点都要统计一次t
2022年08月12日 03点08分
@plsaint 在对应的滑块内比较xy这一步,可以用四叉树优化一下。四叉树就是整个xy平面分成四块,每四块又再分四块,用树形结构对应其中每一块这样。当你用t滑动时,新的点加入了xy平面,只需统计新点附近的那些节点。这个四叉树注意动态管理内存,整个区域都没点的节点不要分配儿子,否则内存不够
2022年08月12日 03点08分
1