如果您想知道两个家庭地址之间的最短距离/路径,您会使用哪种数据结构有效地返回答案?
假设您正在考虑美国所有家庭的集合(约1亿)。
考虑到输入大小如此之大,我正在努力想出一个实用的数据结构。 Dijkstra似乎效率太低,但我猜测有一种方法可以预处理路径以使这种查询成为可能。我不知道从哪里开始。
答案 0 :(得分:1)
您还可以预期主要城市之间存在预先计算的路线。因此,如果您在迈阿密并且想要前往洛杉矶,那么大部分路线都是预先计算好的。你只需要弄清楚如何从迈阿密的房子到最近的高速公路交汇处,从洛杉矶的高速公路到达目的地。
考虑到邮政编码的数量少于100,000,因此拥有一个预先计算从每个邮政编码到每个其他邮政编码的路由的表是不可想象的。我们只谈100亿条路线。天真存储,这是一个相当数量的数据,但它是高度可压缩的。例如,考虑一下您的邮政编码数据库是否包含到最近的主要高速公路的路线。一旦你进入主要高速公路,数据量就不会那么大。
尽管所有的道路都是连通的,但它并不像你将它视为一个巨大的图形。相反,你有一堆较小的图 - 集群 - 你计算集群之间的路线。您还可以在群集中拥有群集,直到数据达到可管理的大小。
至少,这就是我如何解决问题。
答案 1 :(得分:1)
The A* algorithm可以在这里使用。
它本质上是Dijkstra算法的扩展,您可以在其中为每个节点的值添加“启发式”,这是到目的地的估计距离。
在这种特殊情况下,假设您可以访问每个房屋的坐标,您可以确定到目的地的直线距离作为启发式。
可视化:
除此之外,吉姆的建议也很好。