标签: algorithm data-structures
每个车站和房屋都有m个车站和n个房屋,(x,y)坐标,每个房屋的最近车站输出。
后来,这个问题被推广到每个房子找到最近的车站。
我的看法: 对于每个房子,建立一堆距离(自下而上)到车站,然后弹出k。 对所有房屋都这样做。 为O(n *(M + klogm));
或者,对于每个房屋,为工作站构建订单统计树,然后查找具有等级的节点并遍历该节点下方的整个树。 对所有房屋都这样做。 为O(n *(mlogm + 10gm的+ k))的
还有更好的选择吗?任何基于图DS的解决方案,哪个比这更好?
答案 0 :(得分:5)
这听起来像是使用k-d tree,quadtree或其他空间分区树的绝佳位置。 "找到最接近某个测试点的k个对象的问题"被称为 k-nearest-neighbors问题,这两个数据结构非常有效地解决了它。它们的实施起来也相当简单。
具体来说:在站外建立一个k-d树或四叉树。然后,对于每个房屋,在数据结构中对该房屋进行k近邻查询,以找到最近的房屋。
希望这有帮助!