| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> JAVA实现优先级队列--堆 -> 正文阅读 |
|
[数据结构与算法]JAVA实现优先级队列--堆 |
目录 1.优先级队列和堆的概念 2.优先级队列的实现 1.优先级队列和堆的概念1.1.什么是优先级队列?? 我们都学过队列,队列是一种先进先出的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,这就是优先级队列。比如有时候我们在打游戏的时候,别人打电话给你,那么系统一定是先处理打进来的电话。 1.2.什么是堆?? 简言之,堆其实就是一棵完全二叉树,它的底层是一个数组,数组中存储这棵完全二叉树层序遍历的结果,按种类分,它又分为大根堆和小根堆,请看下图:
1.堆中的某个结点的值总是不大于或不于其父节点的值; 2.堆总是一棵完全二叉树; ? 所以完全二叉树的性质就可以拿来用:
注意:堆是一棵完全二叉树,它有着层序遍历的规则,所以采用顺序存储的方式来提高效率,而非完全二叉树是不适合使用顺序存储的方式来进行存储的,因为为了能够还原二叉树,空间中必须要存储空节点,就会导致空间利用率比较低。 2.优先级队列的实现2.1创建大根堆
?1.向下调整的时间复杂度: 最坏情况就是调整完 0 这棵树,那么调整的次数就是完全二叉树的高度,此时时间复杂度为 O(log2^n); 2.建大根堆的时间复杂度: 分析建堆的时间复杂度,我们需要从它的思想层面去分析,不能果断的断定: 每次调整的时间为 O(log2^n),然后调整 n 次,所以时间复杂度为 n * (log2^n),这是错误的! ?假设这棵完全二叉树是一棵满二叉树,树的高度为 n ,那么我们只需要调整第 n 层以上的树(调整 1 -? n - 1层): ?2.2插入数据
?2.3删除数据
2.4获取堆顶元素
谢谢观看!!! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/30 1:24:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |