(六)堆(heap)

一. 优先队列(Priority query)

1.优先队列:特殊的队列,取出元素的顺序是按照优先权大小,而不是元素进入队列的先后顺序。

2.如何实现优先队列呢?

    优先队列最重要的两个操作就是插入任意一个元素和删除最大值

    (1)最初考虑使用有序数组或有序链表,但数组插入元素的时间复杂度是o(n),链表寻找位置的时间复杂度是o(n),两者总不能达到令人满意的时间复杂度。

    (2)考虑用二叉搜索树,插入和删除的时间复杂度都是树的高度(log2n),但是由于删除最大值操作是在树的某一端进行,所以会导致树变斜了,树的高度不再是log2n

    (3)考虑用一种特殊完全二叉树,其中根节点是最大值,这样删除操作总是在根节点进行,这种特殊的完全二叉树就是堆

二.堆(heap)

1.两个特性:(1)结构性:用数组表示的完全二叉树

                    (2)有序性:任一结点的值是其子树所节点的最大值(或最小值)

2.最大堆的删除:最大堆的删除,总是从堆的根节点删除元素,根节点被删除后,很显然不再是一颗完全二叉树而是变成了两棵树,这是就需要移动某个结点充当根结点(移动该结点后应该保证该树仍然是一棵完全二叉树),这时实现了堆的结构性,但不能保证堆的有序性,需要把根元素做下沉处理

3.最大堆的创建:将n个元素顺序放入二叉树中形成一个完全二叉树,然后利用最大堆的各个子树都是最大堆,先把最小子树转换成最大堆,然后依次转换它的父节点对应的子树,直到根结点(调整方法根上面的删除最大堆类似---下沉)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值