当前位置: 首页 > 知识库问答 >
问题:

在Dijsktra算法中如何考虑最小值顶点?

郎吉星
2023-03-14

我读过这篇文章《理解Dijkstra算法的时间复杂度计算》,以理解Dijkstra算法的复杂度。然而,我看不出在每次迭代中选取堆内最小值顶点(其值将在迭代后固定)的时间在演算中涉及到了哪里。。。有人能给我解释清楚这件事在哪里吗?

谢谢!

共有1个答案

边浩漫
2023-03-14

Dijkstra算法是这样的

repeat V times:
    take min from heap; // Works in O(1)
    erase min from heap; // Works in O(log V)
    for vertices connected with current:
        update distance; // Works in O(1)
        update value in heap; // Works in O(log V)

第一个循环进行V迭代,第二个循环进行所有顶点迭代次数之和,因此是2*EO(E)迭代。总的复杂性是O(VlogV-ElogV)

 类似资料:
  • 我试图找出一种算法来寻找二部图的最小顶点覆盖。 我在考虑一个解决方案,将问题简化为二部图中的最大匹配。众所周知,可以使用从bip创建的networ中的最大流量来找到它。图表 最大匹配M应该决定最小。顶点覆盖C,但我无法处理选择要设置C的顶点。假设bip。图有部分X、Y,作为最大匹配边endpoint的顶点在集合A中,那些不属于B的顶点。 我会说,我应该为M到C中的边选择一个顶点。特别是M中的边e的

  • 我有一个存储时间跨度数据的表。该表的架构类似于: 我试图计算出每个记录id的开始和结束日期,即最小开始日期和最大结束日期。StartDate不可为null,所以我不需要担心这个问题,但我需要MAX(EndDate)来表示这是当前正在运行的时间跨度。 重要的是,我要保持EndDate的NULL值,并将其视为最大值。 最简单的尝试(如下)无法突出MIN和MAX将忽略NULLS的问题(来源:http:/

  • 我正在使用for。对于这个我正在使用,https://github.com/vyuldashev/laravel-queue-rabbitmq. 对于正常队列和消费者,一切都很好。为了区分消息的优先级,我定义了多个队列,在队列名中使用0-3作为后缀。我通过手动计算作业总数,将作业路由到不同的队列。 使用这种方法,对于不同的任务,我需要创建更多具有名称优先级的队列。创建队列名称中包含 0-3 的队列

  • 我正在研究一个简单的tic-tac-toe问题,我正在努力理解Minimax算法是如何工作的。 如果我使用效用函数1表示X win,-1表示O win,0表示正在进行的游戏,那么我不明白算法如何优先考虑较短的解决方案。据我所知,它首先到达最深的节点,如果它不是最短的路径,但它会导致可能的胜利,那么它会选择它。 让我在例子中解释一下。这是电路板的状态和X转角(符号来自https://www.hack

  • 我有四个内部框架和三个按钮在里面。当我点击最大化按钮,最大化,但它重叠所有的框架。但我的观点是,它应该显示最小化的框架。请找到下面的代码

  • 我正在做一个平板游戏。跳跃和移动都很有效,现在我想对碰撞进行编程。我有一种想法,这将如何工作: 我不确定这个问题应该在这里还是在游戏开发网站上。 > 每一帧,我首先得到输入。动量根据按下的键增加和/或增加(例如: