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

二维阵列时间复杂度中的Dijkstra

郑茂勋
2023-03-14

我只是想知道2D中Dijkstra的时间复杂性

我知道Dijkstra与二进制堆是O(ElogV)

但是如果我们有一个n乘n的2D数组,数组中的每个节点都有顶点(x,y,权重)

它可以向四个方向移动上,下,左,右

因此,总顶点是n^2,边缘大约是4(n^2)。例如,如果顶点在

因此,如果我们在2D中运行该算法,那么时间复杂度将降低

-

是这样吗?

我渴望得到答案。。谢谢你阅读这篇文章。

共有1个答案

司寇季
2023-03-14

如果每两个节点之间的距离总是相同的,那么在这种情况下,Dijkstra算法就变成了一个简单的BFS。你根本不需要堆结构。复杂度是O(n^2)

否则,复杂性就如您所示O(n^2 logn)

 类似资料:
  • 研究了一种算法,该算法需要计算矩阵中连续1的最长数。提供的解决方案描述和解决方案如下: 蛮力方法非常简单。我们直接遍历给定矩阵中的每一条有效线:即水平、垂直、中间对角线上下的对角线、中间反对角线上下的反对角线。每次遍历过程中,如果遇到连续的1,我们会不断增加计数。我们会为遇到的任何不连续重置计数。在这样做的同时,我们还跟踪迄今为止发现的最大计数。 复杂性分析 时间复杂度:O(n^2)我们沿着整个矩

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 我使用最大堆来查找数组中的k个最大元素,如下所示: 1) 我已经构建了给定数组的前k个元素(arr[0]到arr[k-1])的最小堆MH。O(k) 2)对于每个元素,在第k个元素(arr[k]到arr[n-1])之后,将其与MH的根进行比较。 ……a)如果元素大于根,则将其设为根,并为MH调用heapify ……b)否则忽略它。 //步骤2是O((n-k)) 3)最后,MH有k个最大元素,MH的根

  • 有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。

  • 我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]

  • 在Google上的几个帖子(例如,https://cs . stack exchange . com/questions/125995/median-of-medians-proof-for-time-complexity)和文章中,我看到了为中位数写的以下时间复杂度递归: <代码> T(n) 但是我很困惑,因为这种递归似乎认为MoM嵌入到快速选择中,因此是快速选择的递归公式,用于在使用MoM查找