当前位置: 首页 > news >正文

长沙网站推广系统网站制作公司在哪里找

长沙网站推广系统,网站制作公司在哪里找,网站建设有什么意见,个人可以做导购网站吗文章目录 概要堆2条件大顶堆小顶堆 堆的实现插入元素删除堆顶元素 堆代码小结 概要 堆,有趣的数据结构。 那么,如何实现一个堆呢? 堆 堆,有哪些重点: 满足2条件大顶堆小顶堆 2条件 2条件: 堆是一个…

文章目录

  • 概要
    • 2条件
    • 大顶堆
    • 小顶堆
  • 堆的实现
    • 插入元素
    • 删除堆顶元素
  • 堆代码
  • 小结

概要

堆,有趣的数据结构。

那么,如何实现一个堆呢?

堆,有哪些重点:

  1. 满足2条件
  2. 大顶堆
  3. 小顶堆

2条件

2条件:

  1. 堆是一个完全二叉树
  2. 堆中的每个节点的值都必须大于等于或小于等于其树中每个节点的值

堆要满足这2个条件,重点。即使后边插入数据,或者删除数据之后,还是要满足这2个条件来做调整。

大顶堆

特点:
每个节点的值都大于等于子树中每个节点值的堆。

小顶堆

特点:
每个节点的值都小于等于子树中每个节点值的堆。

堆的实现

实现一个堆,重要的操作:插入元素和删除堆顶元素

插入元素

堆化:顺着节点所在的路径,向上或者向下,对比,然后交换。
来看下插入的代码:

public class Heap {private int[] a; // 数组,从下标1开始存储数据private int n;  // 堆可以存储的最大数据个数private int count; // 堆中已经存储的数据个数public Heap(int capacity) {a = new int[capacity + 1];n = capacity;count = 0;}public void insert(int data) {if (count >= n) return; // 堆满了++count;a[count] = data;int i = count;while (i/2 > 0 && a[i] > a[i/2]) { // 自下往上堆化swap(a, i, i/2); i = i/2;}}}

删除堆顶元素

由大顶堆和小顶堆的定义可知,堆顶元素要么最大,要么最小;

public void removeMax() {if (count == 0) return -1; // 堆中没有数据a[1] = a[count];--count;heapify(a, count, 1);
}private void heapify(int[] a, int n, int i) { // 自上往下堆化while (true) {int maxPos = i;if (i*2 <= n && a[i] < a[i*2]) maxPos = i*2;if (i*2+1 <= n && a[maxPos] < a[i*2+1]) maxPos = i*2+1;if (maxPos == i) break;swap(a, i, maxPos);i = maxPos;}
}

堆代码

来看个完整的代码吧,这里给python的。如下:

import sys 
class BinaryHeap:def __init__(self, capacity):self.capacity = capacityself.size = 0self.Heap = [0]*(self.capacity + 1)self.Heap[0] = -1 * sys.maxsizeself.FRONT = 1def parent(self, pos):return pos//2def leftChild(self, pos):return 2 * pos       def rightChild(self, pos):return (2 * pos) + 1def isLeaf(self, pos):if pos >= (self.size//2) and pos <= self.size:return Truereturn Falsedef swap(self, fpos, spos):self.Heap[fpos], self.Heap[spos] = self.Heap[spos], self.Heap[fpos]def heapifyDown(self, pos):if not self.isLeaf(pos):if (self.Heap[pos] > self.Heap[self.leftChild(pos)] or self.Heap[pos] > self.Heap[self.rightChild(pos)]):if self.Heap[self.leftChild(pos)] < self.Heap[self.rightChild(pos)]:self.swap(pos, self.leftChild(pos))self.heapifyDown(self.leftChild(pos))else:self.swap(pos, self.rightChild(pos))self.heapifyDown(self.rightChild(pos))def insert(self, element):if self.size >= self.capacity :returnself.size+= 1self.Heap[self.size] = elementcurrent = self.sizewhile self.Heap[current] < self.Heap[self.parent(current)]:self.swap(current, self.parent(current))current = self.parent(current)def minHeap(self):for pos in range(self.size//2, 0, -1):self.heapifyDown(pos)def delete(self):popped = self.Heap[self.FRONT]self.Heap[self.FRONT] = self.Heap[self.size]self.size-= 1self.heapifyDown(self.FRONT)return poppeddef isEmpty(self):return self.size == 0def isFull(self):return self.size == self.capacity

小结

关于堆,就这么多吧

堆的概念跟推理还是相对来说简单的。比红黑树简单点。其实都一样的,只要按照那些规则,一条一条对着去理解;应该还好。

http://www.yayakq.cn/news/375970/

相关文章:

  • 做门户网站需要注册公司吗抽奖机网站怎么做的
  • 移动网站 图片优化wordpress 仿聚划算
  • 网站建设一般需要什么软件直通车推广计划方案
  • 蓝色网站配色交通银行网站开发
  • 网站建设实施文档网页设计图片旋转代码
  • 西安网站制作一般多少钱企业vi设计公司企业vi设计欣赏
  • 网站编辑的工作职能有哪些链接下载
  • 网站里添加斗鱼直播的视频怎么做企业自己做网站的成本
  • 公司网站建设有什么好处自助建站和网站开发的利弊
  • 贵州专业网站建设seo自动推广软件
  • 桂林北站附近有什么好玩的建设购物平台网站
  • 建设银行网站支付流程查询建设工程规范的网站
  • 企业门户网站升级嘉兴网页制作网站排名
  • 期货贵金属网站建设海南网警网上报警平台
  • 网站模板 古典电脑版网站制作公司
  • 建设银行官网首页登录入口做360网站优化排
  • 佛山免费网站制作建设网站以后怎么让百度收录呢
  • 网站需要前台后台网页小游戏修改器
  • 免费站推广网站2022可以购买网站空间的网站
  • dede如何制作手机网站现在ps做网站的尺寸
  • 网站建设的入门书籍渠道网络推广
  • 高米店网站建设公司做deal网站
  • 太原网站优化排名网站维护项目
  • 做教师章节试题哪个网站如何查询网络服务商
  • 建设银行网站不能登录不了网页游戏梦幻西游
  • 网站推广的作用山东省建设监理协会官方网站
  • 网站建设 嘉定做网站优化的教程
  • 网站备案证书怎么下载不了泉州seo排名工具
  • 基础做网站的小结如何制作课程网站模板
  • 推广企业网站最主要的方式是淘宝付费推广