面试问:给定m station和n house,输出每个房子最近的k个站点

cla*_*ius 4 algorithm data-structures

有m个车站和n个房屋,每个车站和房屋的(x,y)坐标给出,每个房屋输出最近的车站.

后来,这个问题被推广到从每个房子找到最近的车站.

我的看法:对于每个房子,建立一堆距离(自下而上)到车站,然后弹出k.对所有房屋都这样做.为O(n*(M + klogm));

或者,对于每个房屋,为工作站构建订单统计树,然后查找具有等级的节点并遍历该节点下方的整个树.对所有房屋都这样做.为O(n*(mlogm + 10gm的+ k))的

还有更好的替代品吗?任何基于图DS的解决方案,哪个比这更好?

tem*_*def 5

这听起来像是使用kd树,四叉树或其他空间分区树的绝佳位置."找到最接近某个测试点的k个对象"的问题被称为k-最近邻问题,这两个数据结构非常有效地解决了它.它们的实施起来也相当简单.

具体来说:在站外建立一个kd树或四叉树.然后,对于每个房屋,在数据结构中对该房屋进行k近邻查询以找到最近的站点.

希望这可以帮助!

  • 请添加四叉树的小描述以及为什么它对2D搜索有用 (2认同)