zoukankan      html  css  js  c++  java
  • 二叉堆的简单介绍

    二叉堆简介:
    优先队列是先进先出的模型
    二叉堆是实现优先队列的一种常用的方式,以下简称堆
    二叉堆是一颗完全填满的二叉树,完全二叉树的高为log(N)
    我们可以用一个数组表示完全二叉树(二叉堆)
    在这个数组中,对于任意i位置的元素,其左孩子在2i的位置上,其右孩子在2i+1位置上,其父节点在i/2位置上
     
    二叉堆的堆序性质
    极小堆
         让最小的元素在根节点,保证每个节点的数据都比父节点的要大。
    极大堆
         让最大的元素在根节点,保证每个节点的数据都比父节点的要小。
     
    基本操作:
    插入节点:采用上滤的方式:
    如图,我们将14插入到合适的位置
    操作如下:先在最后可以插入的位置(也就是当前数组的有效位置的下一个位置)插入一个空的节点,将14插入这个空节点,
    此时会破会极小堆的堆序,那么将此空节点的父节点插入空穴,再将14插入新的空穴,
    如此向上移动,会找到合适的位置,这种方式叫做上滤。相比交换操作减少了赋值的次数。
    删除节点:采用下滤的方式
    如图,删除根节点之后,我们需要试图把最后的节点放入合适的位置,
    其实,相对于在数组中而言,我们是在讲该树的某个子树全部进行向前移动,然后最后会空出一个节点给31,
    那么,接下来,找到根节点的孩子中较小的哪一个,进行插入根节点。
    再把新的空节点的子孩子中,较小的上移。
    一直到最后,把31插入最后的空节点中。这种方式成为下滤。
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    通用接口测试用例设计(转载)
    Jenkin配置执行远程shell命令
    Jenkins创建Maven项目及SSH部署
    Jenkins插件安装和系统配置
    Jenkins+svn+ant+tomcat持续集成
    Jmeter之Bean shell使用(二)
    numba,让python速度提升百倍
    哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
    小白如何入门 Python 爬虫?
    干货!小白入门Python数据科学全教程
  • 原文地址:https://www.cnblogs.com/anzhi/p/7536397.html
Copyright © 2011-2022 走看看