我对“查找 k 个最近邻”算法有一个轻微的变体,其中涉及拒绝那些不满足特定条件的算法,我想不出如何有效地做到这一点。
我所追求的是找到当前视线内的 k 个最近邻居。不幸的是scipy.spatial.cKDTree
,没有提供使用过滤器进行搜索以有条件地拒绝点的选项。
我能想出的最好的算法是查询 n 个最近的邻居,如果视线中没有 k,那么再次查询 2n 个最近的邻居并重复。不幸的是,这意味着在最坏的情况下重复重新计算 n 个最近的邻居。我必须重复此查询的次数越多,性能影响就越差。另一方面,如果不需要返回的大多数点,将 n 设置得太高可能会造成浪费。
视线经常变化,所以我也不能cKDTree
每次都重新计算。有什么建议么?