C++ KD树仍然是用于移动对象的最佳算法之一吗

C++ KD树仍然是用于移动对象的最佳算法之一吗,c++,algorithm,performance,sorting,C++,Algorithm,Performance,Sorting,假设你有一个对象列表,每个对象都需要计算出离拍摄最近的对象。此对象具有x和y值。物体也在移动。kd树仍然有用吗?我不确定,因为如果对象正在移动,您必须继续创建此kd树 我可以使用什么算法来获得最佳速度(最好是大O)k-d树是一种非常非常有效的数据结构,用于确定欧几里得空间中具有坐标的最近邻。 k-d树的生成需要大量的对象才会出现问题(它是在O(n log²n)中生成的,所以几乎是线性时间,搜索所有最近邻需要O(n log n),也非常便宜)。因此,您可能也会对程序的其余部分产生问题 从你的问题来

假设你有一个对象列表,每个对象都需要计算出离拍摄最近的对象。此对象具有x和y值。物体也在移动。kd树仍然有用吗?我不确定,因为如果对象正在移动,您必须继续创建此kd树


我可以使用什么算法来获得最佳速度(最好是大O)

k-d树是一种非常非常有效的数据结构,用于确定欧几里得空间中具有坐标的最近邻。
k-d树的生成需要大量的对象才会出现问题(它是在
O(n log²n)
中生成的,所以几乎是线性时间,搜索所有最近邻需要
O(n log n)
,也非常便宜)。因此,您可能也会对程序的其余部分产生问题

从你的问题来看,你需要跟踪的似乎是欧几里得空间中许多点的最近邻点。我建议您从一个普通的k-d树实现开始,在极端且不太可能的情况下,k-d树的生成在时间或内存方面过于昂贵,尝试找到一种方法来跟踪每个元素的几个邻居,并仅在需要时更新列表。

但老实说,我过去一直在使用k-d树,我记得尽管数据集非常大(2D空间中有几千万个点),生成和搜索的速度足够快,与其他操作相比似乎可以忽略不计。

是的,很可能是这样。您需要检查每个对象的树条目是否仍然正确反映其位置,并根据需要更新树。它对于限制需要考虑的对象数量仍然有价值。