在二维平面中找到K最近点到点P.

 曹彩节 发布于 2023-02-12 17:36

资料来源:AMAZON访谈问题

定点P和二维空间中的其他N个点,找到最接近 P 的N个点中的K个点.

这样做的最佳方式是什么?

这个Wiki页面在构建算法时没有提供太多帮助.任何想法/接近人.

2 个回答
  • 解决方案1使堆大小为K并通过最小距离O(NLogK)复杂度收集点.

    解决方案2:获取大小为N的数组并按距离排序.应该使用QuickSort(Hoare修改).作为答案采取前K点.这也是NlogN的复杂性,但可以优化以近似O(N).如果跳过不必要的子数组的排序.当您将数组拆分为2个子数组时,您应该只接受Kth索引所在的数组.复杂度将是:N + N/2 + N/4 + ... = O(N).

    解决方案3:在结果数组中搜索Kth元素并获取所有小点然后建立.存在O(N) alghoritm,类似于搜索中位数.

    注意:最好使用sqr of distance来避免sqrt操作,如果point有整数坐标,它会更快.

    面试答案更好地使用解决方案2或3.

    2023-02-12 17:38 回答
  • 只需一个查询...

    保持一堆大小k.

    对于每个点,计算到该点的距离P.将该距离插入堆中,如果堆的大小大于,则从堆中删除最大值k.

    运行时间: O(n log k)

    2023-02-12 17:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有