Algorithm 迪克斯特拉';让所有顶点都成为源的s算法

Algorithm 迪克斯特拉';让所有顶点都成为源的s算法,algorithm,time-complexity,dijkstra,undirected-graph,Algorithm,Time Complexity,Dijkstra,Undirected Graph,在标记为1…N的城镇中有[N]个位置。将向您提供一个街道列表S(| S |=M),其中一条街道连接城镇中的两个位置,并具有相关距离。您还提供了该镇房屋的清单和该镇所有新冠病毒-19检测中心的清单C。对于每个房屋,找到距离最近的测试中心最近的距离。在O(M*logn)时间内解决问题 我发现这是一个图形问题,我可以从街道列表中构建一个无向图,因为一条街道可以被视为一条边,其中边权重是两个位置之间的距离 因为问题是要为所有房屋找到到测试中心的最短距离,所以我的想法是为H中的每个房屋运行Dijkstra

在标记为1…N的城镇中有[N]个位置。将向您提供一个街道列表S(| S |=M),其中一条街道连接城镇中的两个位置,并具有相关距离。您还提供了该镇房屋的清单和该镇所有新冠病毒-19检测中心的清单C。对于每个房屋,找到距离最近的测试中心最近的距离。在O(M*logn)时间内解决问题

我发现这是一个图形问题,我可以从街道列表中构建一个无向图,因为一条街道可以被视为一条边,其中边权重是两个位置之间的距离


因为问题是要为所有房屋找到到测试中心的最短距离,所以我的想法是为H中的每个房屋运行Dijkstra算法。然而,这将给我一个运行时间O(| H |*MlogN),我们需要一个运行时间O(MlognN)。Dijkstra的算法是否可以进行任何修改以实现此运行时?我必须将每个房屋视为一个源顶点来寻找最短距离,我看不到任何方法可以在所需的时间复杂度内完成。

使用从每个中心初始化的Dijkstra,而不是房屋

将所有房屋标记为未访问,标记距离为0的所有中心

将所有中心添加到PQ


继续dijkstra…

拥有多个源顶点的原因是什么?还有,为什么只把考试中心作为来源?这个图是无向的,所以你不能让每个房子都是一个源吗?你在寻找任何一个中心的路径,你基本上可以把所有的中心想象成一个节点。可以对每个中心分别执行多次此操作,并始终在每个房屋中选择最小值,但这将更加复杂(您可以使用C*而不是1*)。如果你把房子放在源中,你没有正确定义的“起点”——你无法说出你当前的距离。如果要包括房屋,可能必须记住每个节点中每个节点的距离,并将其扩展到二次复杂度(也是内存方面)。房屋和中心如何连接到街道和位置?