【问题标题】:Big-O of Dijkstra's Algorithm with D-Ary Heap具有 D-Ary 堆的 Dijkstra 算法的 Big-O
【发布时间】:2015-07-16 19:09:19
【问题描述】:

我正在寻找使用 D-Ary 堆实现 Dijkstra 算法运行时的完整演练。

目前我最好的理解是树的深度最多为log_d(n),所以插入和冒泡的最大时间是log_d(n)。删除节点会不会冒泡?

我只是无法在这里拼凑出总的 Big-O 运行时间。我的理解是它应该是 O(m logm/n n)),但我想有一种演练来理解为什么会这样。

【问题讨论】:

    标签: algorithm heap big-o dijkstra


    【解决方案1】:

    在一个 d-ary 堆中,上堆(例如,插入,如果您在堆节点移动时跟踪它们,则减少键)需要时间 O(log_d n),而下堆(例如,delete-min)需要时间时间 O(d log_d n),其中 n 是节点数。 down-heaps 更昂贵的原因是我们必须找到要提升的最小子级,而 up-heaps 只是与父级进行比较。

    假设一个连通图,Dijkstra 最多使用 m - (n - 1) 个减少键和最多 n - 1 个插入/删除(假设我们从不插入根)。因此,Dijkstra 使用 d-ary heap 作为优先级队列的运行时间为 O((m + n d) log_d n),这对于密集图来说是值得的。

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多