美文网首页
[AlgoGo]堆

[AlgoGo]堆

作者: 周瑞不是同端 | 来源:发表于2020-10-12 23:13 被阅读0次

堆的定义

  • 完全二叉树
  • 每个节点大于等于子节点

堆的实现

  • 存储方式
    堆是一个完全二叉树,完全二叉树适合时候数组存储,因此堆可以用数组实现。

  • 堆支持的操作

  1. 插入元素
    要点:找到合适的插入位置。
    方法:从下至上堆化,新元素放到尾节点,然后与父节点比较,如果大于父节点就交换,直到小于父节点或交换至根节点。
  2. 删除堆顶元素
    要点:删除后保持堆的结构。
    方法:将堆顶元素交换至尾节点,然后进行从上至下的堆化,将堆顶元素与其子节点比较,直到其大于两个子节点。

插入和删除操作的时间复杂度均为O(logn)。

堆排序

  1. 建堆
    从n/2(非叶子节点)位置开始倒着到1,对每个节点进行从上至下的建堆过程。
  2. 排序
    将堆顶换到末尾,重新堆化,重复n次。

缺点

  1. 内存访问不友好,不是连续访问。
  2. 相比快速排序,交换次数多。

应用

  1. topK问题
  2. 优先级队列
  3. 中位数

相关文章

  • [AlgoGo]堆

    堆的定义 完全二叉树 每个节点大于等于子节点 堆的实现 存储方式堆是一个完全二叉树,完全二叉树适合时候数组存储,因...

  • [AlgoGo]递归

    什么是递归? 递归就是自己调用自己。 什么样的问题可以用递归来解决? 一个问题的解可以分为几个规模更小的子问题的解...

  • [AlgoGo]排序算法

    如何分析一个排序算法? 执行效率 最好、最坏、平均时间复杂度 最先需要考虑就是这三种时间复杂度,反应了算法随着问题...

  • [AlgoGo]跳表SkipList

    跳表是什么 跳表的实现基于链表,弥补了链表不便于查找的缺点,所以跳表其实不是表(table)而是链(list)。跳...

  • [AlgoGo]散列表

    什么是散列表 散列表的本质是数组,利用了数组随机存取的特点,在存储位置的选择上用了哈希函数来寻找元素对应位置。哈希...

  • [AlgoGo]二分查找

    二分查找算法用在有序的数据集合中查找目标数据,时间复杂度为O(logn),但限制条件较多。 二分查找的限制 二分查...

  • [AlgoGo]线性存储结构-数组

    定义 数组(Array):一种线性表数据结构,使用连续内存空间存储相同数据类型的一组数据。线性表:线性结构,只有前...

  • [AlgoGo]复杂度分析

    针对解决相同问题的一系列算法,如何评价他们的优劣?如何评估哪些算法能够满足业务场景的要求?算法复杂度提供了一个度量...

  • [AlgoGo]线性存储结构-链表

    与数组的对比 方面数组链表内存空间连续离散插入删除O(n)O(1)随机访问O(1)O(n) 链表插入、删除操作不需...

  • [AlgoGo]二叉树

    树 树描述了一种一对多的关系,是一种递归形式的数据结构,每个节点(除了根节点)都由父节点,和子节点(除了叶子节点)...

网友评论

      本文标题:[AlgoGo]堆

      本文链接:https://www.haomeiwen.com/subject/npappktx.html