data-structures - 二叉堆是否支持减键操作?

标签 data-structures priority-queue

根据 http://en.wikipedia.org/wiki/Heap_%28data_structure%29#Comparison_of_theoretic_bounds_for_variants ,执行减键操作需要 Θ(logn)(转换为 O(logn))。但是,似乎没有站点包含具有减少键操作的二进制堆实现。

鉴于网络上缺乏实现,是否可以在二叉堆中执行减键操作?

最佳答案

我想出了这个:

  • 为了在 O(logn) 中执行减少键,我们必须提前知道相应元素的位置。一个哈希映射和一个好的哈希函数可以保证 O(1) 分摊时间。每次修改后,我们必须更新哈希映射,这需要 O(logn)。
  • 在确定元素的位置后,我们将元素向上移动,以防它的优先级高于其父级(与插入的方式类似)或向下移动,如果它的优先级低于其子级之一(以类似于插入的方式)删除)并更新已修改元素在哈希图中的位置。
  • 关于data-structures - 二叉堆是否支持减键操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897604/

    相关文章:

    algorithm - 使用哪种算法为学校生成时间表

    algorithm - Big-Oh 表示法中的 f(n)、g(n) 和实常数是什么

    java - 数组访问复杂度

    c - 优先级队列的两种不同定义?

    ocaml - ocaml中优先级队列的功能

    c - 如何解析结构体数组作为参数?

    c - C 有哪些高质量的图形库?

    java - 从优先级队列中挑选符合条件的元素

    c++ - Priority_queue 的基于范围的 for 循环

    java - 加权随机排序