优先队列----堆

问题

打印机打印作业一般是放在队列中的。如果按照先来先打印的顺序,有一个100页的打印任务,那么会让后面短小的任务等待很长时间。更合理的做法也许是最后处理最耗时的打印任务,不管它是不是最后提交上来的。
在多用户操作系统中,操作系统让哪个程序使用CPU,是需要决定从队列里面选择的。一般做法是从队头获得程序,分配一定时间的时间片。如果执行完,从队列删除;如果没有执行完,插入队尾。这样处理的缺点是:一些很短小的程序需要花很长的时间才能执行完;有些比较重要的程序,不一定短小需要提前执行。
因此如果队列中的每个任务都有一个优先级,先执行优先级高的,就可以解决问题了。这样的队列称为优先队列(priority queue)。

优先队列定义

优先队列是要很小的代价完成插入和删除最小元素,两个操作的数据结构。

二叉堆

通常情况下的堆是指二叉堆。思路是每次插入都将最小元素(如果业务要求是找最小元素),放置在根节点,用O(logN)时间完成。可以用O(1)的时间获得最小元素。删除最小元素的时候除了返回最小元素的值,还将选取新的最小元素,用O(logN)的时间。

结构性质

二叉堆是一棵被完全填满的二叉树,有可能最底层元素不满,底层上的元素从左到右。(关键词:满二叉树、从左到右)

堆序性质

对最小堆而言:每一个节点X>父节点的值。最大堆相反。

操作

操作的时间复杂度小于O(logN)

insert

deleteMin

decreaseKey

increaseKey

delete

buildHeap

优先队列应用

选择问题

输入N个元素,查找第k小元素。解决思路1:将N个元素build一棵最小二叉堆,删除k次,得到第k小元素。解决思路2:前k个元素build一棵最大二叉堆,后面的每个元素读入的时候,与这里的最大元素比较,如果比最大元素小,则替换。

事件模拟

d堆

堆的分叉是d个,不仅仅是2个。有效降低堆的高度。实际中多用4-堆。

左势堆

二叉堆不能很方便的合并,所以提出了左式堆。左式堆是一个二叉堆。不同点是堆中每隔一节点X,左儿子的零路径长>=右儿子的零路径长,记为:nlp(left)>=nlp(right)。整棵树向左偏。

特殊操作

merge

时间复杂度 O(logN)

斜堆

二项队列

每次操作的最坏情形是O(logN),而插入操作平均花费常数时间。
一个二项队列是堆序的树的集合(简单的说就是树的集合)。二项队列中每一个高度的树只有一颗
这里写图片描述

这里有B0,B1,B2,B3,B4Bk=Bk1Bk1
高度为k的二项树恰好有2k个节点。我们就可以用二项队列表示任意一个优先队列。这与二进制表示一个数相同。例如6,的二进制是1101,B0,B2,B3三棵树可以表示容量为6的优先队列。

代码任务

1 二叉堆的实现
2 左势堆的合并
3 二项队列的实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三十四期:游戏开发中常见的10种编程语言

游戏开发是非常有经验和熟练的程序员的工作。 它可能花费数亿美元。 这是一项非常有创意的工作,也需要技术水平。 他们需要具有特定需求的编程语言。 游戏开发是非常有经验和熟练的程序员的工作。 它可能花费数亿美元。 这是一项非常有创意的工作,也需要…

[Leetcode][第5458题][JAVA][字符串的好分割数目][双指针][HashSet]

【问题描述】5458. 字符串的好分割数目[中等] 【解答思路】 1. 双指针 前面的搜索前面的个数和,后面的搜索后面的个数和 时间复杂度:O(N^2) 空间复杂度:O(1) class Solution {/*双指针做法,前面的搜索前面的个数和,…

第三十五期:AI核心难点之一:情感分析的常见类型与挑战

情感分析或情感人工智能,在商业应用中通常被称为意见挖掘,是自然语言处理(NLP)的一个非常流行的应用。文本处理是该技术最大的分支,但并不是唯一的分支。情绪AI有三种类型及其组合。 情感分析或情感人工智能,在商业应用中通常被称…

[Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]

【问题描述】[简单] 【解答思路】 1. 递归 终止条件/基本情况 root null 递推关系 max(l,r)1 时间复杂度:O(N) 空间复杂度:O(height) class Solution {public int maxDepth(TreeNode root) {if (root null) {return 0;} else {int leftHeight ma…

第三十六期:人工智能统计调查:86%的消费者更喜欢人工客服

美国消费者越来越不愿意与聊天机器人聊天,人们对人工智能作为关键业务组成部分的期望越来越高,由于部署这项新技术导致员工技能差距越来越大。 最近一些人工智能的健康和进展状况相关调查、研究、预测和其他定量评估突显出以下几点:美国消费者…

[Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]

【问题描述】[简单] 【解答思路】 1. 递归 自下而上 基本情况/结束条件 : 叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点 当 root 节点左右孩子都为空时,返回 1 当 root 节点左右孩子有一个为空时,返回不为空的孩子节点的深度 当…

75 jsp基础语法汇总

JSP语法 脚本程序 脚本程序可以包含任意量量的Java语句句、变量量、⽅方法或表达式&#xff0c;只要它们在脚本语⾔言 中是有效的。 脚本程序的语法格式&#xff1a; <% 代码⽚片段 %>或者&#xff0c;您也可以编写与其等价的XML语句句&#xff0c;就像下⾯面这样&#…

[递归]一文看懂递归

1. 递归的定义 编程语言中&#xff0c;函数 Func(Type a,……) 直接或间接调用函数本身&#xff0c;则该函数称为「递归函数」。 在实现递归函数之前&#xff0c;有两件重要的事情需要弄清楚: 递推关系&#xff1a;一个问题的结果与其子问题的结果之间的关系。基本情况&…

[Leetcode][第206题][JAVA][反转一个单链表][递归][迭代]

【问题描述】[简单] 【解答思路】 1. 递归 自底向上 基本条件/终止条件&#xff1a;当前节点或者下一个节点null 递推关系&#xff1a; head.next.next head 在函数内部&#xff0c;改变节点的指向&#xff0c;也就是 head 的下一个节点指向 head 递归函数那句 时间…

3.项目的基本概念

项目的基本概念 项目及其特征

[Leetcode][程序员面试金典][面试题08.03][JAVA][魔术索引][递归][优化]

【问题描述】[简单] 【解答思路】 1. 逐个查找 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) public int findMagicIndex(int[] nums) {for (int i 0, length nums.length; i < length; i) {if (i nums[i])return i;}return -1;}2. 逐个查找优化 有序升序…

5如何让进行项目管理

项目管理分为五个过程组

第一章 概率论的基本概念

概率论与数理统计的学习内容来源于中国大学MOOC&#xff0c;以及参考书籍《概率论与数理统计》第四版&#xff0c;浙江大学。 随机现象  在一定条件下&#xff0c;有可能出现多种结果&#xff1b;而且在事情发生前不能知道结果。 随机试验  概念&#xff1a;对随机现象的…

【知识导图】数据结构与算法

[基础知识点] 10 个数据结构&#xff1a;数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树&#xff1b; 10 个算法&#xff1a;递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法 [学习技巧] 学习它的“来历”“…

第三十七期:刷脸支付叫好不叫座,为啥消费者和商家都不愿用先进科技?

移动支付相信大多数人都不陌生&#xff0c;中国移动支付的普及被人称为“新四大发明”&#xff0c;在中国移动支付产品发展如火如荼的今天&#xff0c;刷脸支付成为了新的时尚&#xff0c;然而这个时尚的支付方式却显得叫好不叫座&#xff0c;刷脸支付的问题到底出在哪了? 移动…

第二章 随机变量

随机变量  目标&#xff1a;将实验结果数量化。实验结构有数字型和非数字型。数字型&#xff1a;降雨量、上车人数等。非数字型&#xff1a;晴天/阴天/下雨、化验结果阴性/阳性等。  定义&#xff1a;随机试验样本空间S&#xff0c;如果XX(e)为定义在S上的实数单值函数&…