博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小根堆
阅读量:2231 次
发布时间:2019-05-08

本文共 586 字,大约阅读时间需要 1 分钟。

首先什么是小根堆:

(1)它是一颗完全二叉树

(2)任意一个节点均小于或等于其左右子节点的关键码(大根堆相反就是了)

因此可以得知,当前树形结构的根节点就是当前整个树形结构最小的节点。。。

至于说这种堆结构有什么作用:

(1)以前本科的时候上数据结构课的时候就有讲过堆排序,好像还不错,O(nlogn)的复杂度

(2)可以用来构造优先权队列。。。。

(3)在libevent库中,定时是采用小根堆来维护(nginx是红黑树)

好了,下面来看看小根堆的插入和删除吧,其实感觉 非常简单诶,比红黑树简单,只需要向上向下浮动就好了,没有红黑树那种左旋右旋,还得染色什么的。。

首先来看节点的插入:

(1)将要插入的节点按照完全二叉树的形式插入到当前树形结构的最末尾

(2)对这个刚刚插入的节点进行向上浮动,浮动的原理是:比较当前的节点和其父节点,如果比父节点小,那么与父节点交换,然后递归的进行,直到浮动不动了或者到了根节点

接下来来看节点的删除:

(1)小根堆的删除是删除当前的根节点,也就是返回当前根节点的值,然后用当前树形结构的最后一个节点来代替根节点

(2)从当前属性结构的最后一个非叶节点开始,向下浮动,浮动的原理是:

   如果有比自己小的子节点,那么与这个子节点交换,然后递归的对刚刚交换下去的子节点进行向下浮动,(如果当前两个子节点都比自己小,那么就与最小的那个交换)

转载地址:http://izafb.baihongyu.com/

你可能感兴趣的文章
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
分布式系统理论基础1: 一致性、2PC和3PC
查看>>
分布式系统理论基础6:Raft、Zab
查看>>
搞懂分布式技术1:分布式系统的一些基本概念
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术6:Zookeeper典型应用场景及实践
查看>>
搞懂分布式技术10:LVS实现负载均衡的原理与实践
查看>>
搞懂分布式技术11:分布式session解决方案与一致性hash
查看>>
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>