两个现实问题的算法

时间:2017-06-15 07:59:00

标签: algorithm data-structures tree knn

有两个现实生活中的问题,我正在努力寻找答案:

  1. 餐厅服务:当我使用我的食物订购应用程序(如FoodPand,Zomato等)时,该应用会在我登录时检测到我的位置,并据此建议附近的餐馆(可能在范围足够好,以便所选餐厅可以提供食物)。

  2. 驾驶室服务:当我使用出租车服务(如Uber或Ola)时,当我尝试预订出租车并建议当时可用的附近出租车时,他们也会检测到我的位置

  3. 问题: 如何找到最近的餐馆和最近的出租车?他们实际使用哪种特定算法?由于两种情况都不同,因为搜索数据在一种情况下是静态的,而在另一种情况下是不断变化的。

    我接受问题:

    1. 在对该主题进行了一些头脑风暴之后,我开始知道由于餐馆是固定的实体,我们可以将它们映射到KD树(允许存储空间索引)。根据客户的位置,我们可以在KD树上进行搜索,找出附近的一组餐馆。 KD树的创建花费O(n)时间并且搜索花费O(logn)时间,n是树中的n个数量。这种方法对我来说似乎足够好,因为我不知道有什么比这更好的方法,我仍在寻找答案。

    2. 在驾驶室服务的情况下,驾驶室的位置不是静止的(与餐厅服务不同)。因此,为每个更改的驾驶室位置创建KD树似乎是一个开销。考虑到驾驶室的当前位置,我怎么能找到最近的5个出租车?驾驶室实际使用哪种算法?

    3. 任何见解都将受到高度赞赏。

      P.S。 :我还遇到了K最近邻搜索算法,它再次导致了KD树。

1 个答案:

答案 0 :(得分:1)

存在称为Quadtree的数据结构作为2D动态k-D树的解决方案。但实际上,实际实现可能不涉及繁重的数据结构。您可能会想到更简单的方法,这可能会超出动态k-D树:

  1. 将地图划分为矩形网格
  2. 当驾驶室更改其位置(发布请求包含GPS坐标)时,检查它是否仍在矩形中,否则更改矩形的内部信息
  3. 当用户想要找到最近的出租车时,只需在网格中找到它的矩形并找到最近的一个带有详尽搜索的
  4. 你可能会想“为什么?”。实际上,在上面这个简单的方法中,添加并发和并行化会更容易,而修改k-d树可能非常困难。