算法实践篇-用堆构造优先队列

Dijkstra算法介绍及其优先队列优化和斐波那契堆优化 Dijkstra算法介绍及其优先队列优化和斐波那契堆优化 文章目录一、dijkstra算法概述二、实现dijkstra算法需要掌握的算法知识1、从数据中剔除最小项(函数ExtractMin())2、松弛操作3、伪代码分析三、最小优先队列概述四、最小优先队列伪代码分析1.维护堆的性质2.建堆3.剔除最小节点:4.关键字减值(松弛操作,具体实现中将此函数命名为relax())五、例题分析1. 首先设法存储输入的数据2. 设计最小优先队列3.实现Dijkstra算法(限于题目要求,略显臃肿):4.与优先队列 阅读详情

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.queue;
/**
 * 
 * @author Administrator
 *优先队列
 */
public class PriorityQueue {
	private int[] queue;
	private int size;
	public PriorityQueue(int []queue){
		this.queue=queue;
		this.size=queue.length;
		buildMaxHeap();
	}
	
	
	public int[] getQueue() {
		return queue;
	}

	private  void buildMaxHeap(){
		for(int i=this.queue.length/2;i>=0;i--){
			maxHeapipy(i);
		}
	}
	public  int getMaximun(){
		return queue[0];
	}
	public int extractMax()throws Exception{
		if(queue.length<0||size<1){
			throw new Exception("没有数据");
		}
		int max=queue[0];
		queue[0]=queue[queue.length-1];
		size=size-1;
		maxHeapipy(0);
		return max;
		
	} 
	
	public void increaseKey(int i,int key)throws Exception{
		if(key<queue[i]){
			throw new Exception("key 太小");
		}
		queue[i]=key;
		while(i>0 &&queue[parent(i)]<queue[i]){
			int tmp=queue[i];
			queue[i]=queue[parent(i)];
			queue[parent(i)]=tmp;
			i=parent(i);
		}
	}
	
	public void insert(int key)throws Exception{
		size=size+1;
		queue[size-1]=Integer.MIN_VALUE;
		increaseKey(size-1,key);
	}
	
	private  void maxHeapipy(int i){
		int left=left(i+1);
		int right=right(i+1);
		int larger;
		if(left-1<size && this.queue[left-1]>this.queue[i]){
			larger=left-1;
		}else{
			larger=i;
		}
		if(right-1<size&&this.queue[right-1]>this.queue[larger]){
			larger=right-1;
		}
		if(larger!=i){
			int tmp=this.queue[i];
			this.queue[i]=this.queue[larger];
			this.queue[larger]=tmp;
			maxHeapipy(larger);
		}
	}
	
	private  int left(int i){
		return i*2;
	}
	private  int right(int i){
		return i*2+1;
	}
	private int parent(int i){
		return i/2;
	}
	public static void main(String[] args)throws Exception {
		int []data=new int[]{1,8,7,3,9,2,11,99,77,34};
		for(int i=0;i<data.length;i++){
			System.out.print(data[i]+" ");
		}
		System.out.println();
		PriorityQueue queue=new PriorityQueue(data);
		System.out.println("最大优先级:"+queue.getMaximun());
		queue.increaseKey(1,101);
		for(int i=0;i<queue.getQueue().length;i++){
			System.out.print(queue.getQueue()[i]+" ");
		}
		System.out.println();
		System.out.println("8号增加30后最大优先级:"+queue.getMaximun());
		queue.extractMax();
		for(int i=0;i<queue.getQueue().length;i++){
			System.out.print(queue.getQueue()[i]+" ");
		}
		System.out.println();
		System.out.println("弹出一个后的后最大优先级:"+queue.getMaximun());
		queue.insert(300);
		for(int i=0;i<queue.getQueue().length;i++){
			System.out.print(queue.getQueue()[i]+" ");
		}
		System.out.println();
		System.out.println("插入300后的最大优先级:"+queue.getMaximun());

	}

}

 

图解算法:堆、堆排序、优先队列 堆、堆排序、优先队列可以看成就是一个东西;堆是一种非常重要的数据结构,堆排序是基于堆这种数据结构实现的;优先队列可以用堆这种数据结构来实现,也可以用其他数据结构实现。优先队列可以用来实现有优先级的任务调用(一些任务在池子里等待,优先级最高的先被优先取出执行) 阅读详情

相关推荐

算法之Java优先队列:堆实现与进阶应用解析

在编程学习的道路上,数据结构与算法的掌握至关重要。今天,我们一同深入研究Java中的优先队列,特别是基于堆的实现方式及其进阶应用,希望能和大家共同进步,提升我们在算法领域的认知与实践能力!

wj_rdk的博客 1583

数据结构学习 -- 堆和优先队列

堆和优先队列 二叉堆 堆通常使用了树的存储方式,比较常用的堆是:二叉堆,也就是满足一些特殊性质的二叉树。 二叉堆的性质 1️⃣ 二叉堆必须是一颗完全二叉树,所谓完全二叉树可以理解为将元素按顺序一层一层的排列成二叉树的形状,完全二叉树的特点为: 完全二叉树是一颗叶子节点只能出现在最下面两层的二叉树。 完全二叉树最下面一层的叶子节点必须从左至右连续出现,中间不能出现空节点。 完全二叉树倒数第二层的如果有叶子节点,一定位于右边连续位置。 完全二叉树中如果节点只有一个子节点,那么一定是左子节点,完全二叉树中不存

weixin_48084293的博客 1869

[算法]优先队列之配对堆

配对堆的核心要义在于合并,只要掌握到合并的精髓就能很快的手撸一个配对堆。由于配对堆的插入复杂度只有常数级别,在通常情况下弹出最小值的性能也会由于二叉堆(Java、Python等语言中优先队列的默认实现),所以在做Prim时会有优势。

身披白袍的博客 905

优先队列(堆)

这里写自定义目录标题场景功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 #用堆实现优先队列 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解

qq_44234405的博客 1555

堆与优先队列:从理论到应用

堆和优先队列是解决优先级相关问题的强大工具,从理论上讲,它们提供了对数级别的时间复杂度,在实践中表现出色。无论是系统编程、算法设计还是数据处理,掌握堆数据结构及其变种,都能帮助开发者设计出更高效的解决方案。

刘念卿的博客 1042

最小堆优先队列C++实现

在建立最小堆或最大堆时。最主要的就是理解。SiftDown和SiftUp算法的实现问题。其实我觉得自己在画一棵树。先比较左右再比较父点之间。是最大堆往上。最小堆往下。就很能理解了,下面程序是最小堆。#include using namespace std;templateclass MinHeap{private: Elem* heapArray; int CurrentSize; int

Gary·hou专栏 2387

Dijkstra算法堆/优先队列优化

Dijkstra算法堆/优先队列优化前言额外知识简介堆与优先队列STL库重载Dijkstra分析及优化分析优化代码实现存储结构边点优先队列函数初始化添加边Dijkstra主函数后记 前文:Dijkstra算法&&邻接表数组 前言 ​ 1、本文中所采用的存储结构依然是邻接表数组,只是较上一篇文章中的结构稍微发生了一些变化,但本质是一样的,若不懂可参考前文; ​ 2、本文将涉及到堆...

Mark-2000的博客 6818

【堆 优先队列】1354. 多次求和构造目标数组|2014

给你一个整数数组 target 。一开始,你有一个数组 A ,它的所有元素均为 1 ,你可以执行以下操作: 令 x 为你数组里所有元素的和 选择满足 0

闻缺陷则喜何志丹 738

数据结构与算法之优先队列

优先队列 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优先级的,我们需要在这些计算机的任务中找出优先级最高的任务先执行,执行完毕后就需要把这个任务从队列中移除。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候,我们就可以使用一种特殊的队列来完成这种需求,优先队列。 优先队列按照其作用不同,可以分为以下两种: 最

白大锅的博客,毕设WangLoveBai_999 8400

DSP28335量产升级避坑指南:C2Prog串口烧录.hex文件,为什么我推荐COM1?

本文详细解析了DSP28335量产升级中C2Prog串口烧录.hex文件的最佳实践,重点推荐使用COM1端口以确保稳定性。通过实测数据和底层机制分析,揭示了Windows系统对COM1的特殊优化及C2Prog工具的时钟切换逻辑,帮助开发者规避常见陷阱,提升烧录成功率。

weixin_27066963的博客 384

(RegionProposal Network)RPN网络结构及详解

RPN(RegionProposal Network)区域生成网络 Faster-RCNN的核心。在这里整理。 1.anchors。 特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128,256,512}×{128,256,512}×三种比例{1:1,1:2,2:1}{1:1,1:2,2:1}。这些候选窗口称为anchors...

凹酱的DEEP LEARNING 19万+

【堆】堆的基本概念及操作,堆与优先队列

Heap;

2401_87820834的博客 2218

STM32Cubemx+CanFestival:从零到一的CANopen移植实战

本文详细介绍了如何使用STM32CubeMX和CanFestival实现CANopen协议栈的移植,从开发环境搭建到核心配置步骤,再到调试与问题排查。通过实战经验分享,帮助开发者快速掌握STM32与CANopen的结合应用,提升嵌入式系统开发效率。

weixin_42558093的博客 421

优先队列和堆

什么是优先队列? 听这个名字就能知道,优先队列也是一种队列,只不过不同的是,优先队列的出队顺序是按照优先级来的;在有些情况下,可能需要找到元素集合中的最小或者最大元素,可以利用优先队列ADT(Abstract Data Type)来完成操作,优先队列ADT是一种数据结构,它支持插入和删除最小值操作(返回并删除最小元素)或删除最大值操作(返回并删除最大元素); 这些操作等价于队列的enQueue和deQueue操作,区别在于,对于优先队列,元素进入队列的顺序可能与其被操作的顺序不同,作业调度是优先队列的一个应

数据工匠记 1258

S7-1200模拟量

将两种不同的金属或合金金属焊接起来,构成一个闭合回路,利用温差电动势来测量温度,当两端存在温度梯度时,回路中就会有电流通过,此时两端之间就存在电动势--热电动势,这就是所谓的塞贝克效应(seebeck effect)。温差越大,热电动势越高。热电偶是有正负极性的,所以需要确保导线连接到正确的极性,否则会造成明显的测量误差。为了使温度补偿达到最佳效果,必须将热电偶模块安装在温度稳定的环境中简述:两种金属,每一种金属随温度变化是不同的,出现温差--由俩金属构成的回路就会有电流经过,因此两端形成热电动势。

王阿妹小天才的博客 2593

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的体育赛事目标检测系统(Python+PySide6界面+训练代码)

本文详细介绍了一个基于YOLOv5/v6/v7/v8的体育赛事目标检测系统的设计与实现。系统采用先进的深度学习算法,结合PySide6图形界面,实现了对体育赛事中运动员、球类、裁判等多种目标的实时检测与跟踪。本文将全面阐述系统的架构设计、算法原理、训练流程、界面实现以及实际应用效果,并提供完整的代码实现。

YOLO 510

数据结构与算法:优先队列(堆)

一种数据结构,特殊场景使用,同样是使用堆结构,利用堆的特性 文章目录概要概述图解优先队列构造初始堆进行入队列演示进行出队列演示代码实现堆 优先队列特点优先队列一般应用场景 概要 code语言:java、c 测试环境:win、java8 参考书籍:《数据结构与算法分析java语言描述》 原书第三版、《数据结构:使用C语言》、《算法导论》原书第三版 参考链接:漫画:什么是优先队列? 概述 需...

maoyuanming0806的博客 1336

在PPT里如何做出晶莹剔透的高级水泡感出来呢

水晶汽泡被大量使用在TED场景的演讲片稿中,给人以强烈的视觉冲击感。其实实现很简单。本篇就用三步教会大家如何制作这样的一种PPT效果。

打造全国最全的AI Agent开发知识领域的博客 1537

算法学习记录05——优先队列到最小堆

使用最小堆构建优先队列,LeetCode力扣经典题:合并 k 个有序链表

m0_57268389的博客 995

手把手教你学Simulink--FIR滤波器的设计与优化仿真

FIR滤波器的设计目标通常包括指定的频率响应特性(如低通、高通、带通或带阻),以及特定的应用需求(如线性相位、最小化误差等)。Simulink提供了一个直观且强大的平台来模拟这些设计,并允许用户通过调整参数实时观察其对系统性能的影响。明确你的系统需求,比如输入信号类型(如正弦波组合)、采样率、FIR滤波器的设计参数(如滤波器类型、阶数、截止频率等)。假设我们需要设计一个低通FIR滤波器,用来去除高于1kHz的所有频率成分,保留低于1kHz的信号成分。采样率为8kHz。

MHD0815的博客 348

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构与算法:堆与优先队列的深入剖析

堆是一棵完全二叉树,其中每个节点的值都不小于(或不大于)其子节点的值。这种特性使得堆非常适合实现优先队列,堆中的最大(或最小)元素总是位于树的根部。二叉堆与其在优先队列中的应用:二叉堆是堆的一种常见实现,通常用于实现优先队列。二叉堆可以分为最大堆和最小堆两种类型。在最大堆中,每个父节点的值大于或等于其子节点的值;在最小堆中,父节点的值小于或等于其子节点的值。代码示例:最小堆的实现*a = *b;*b = temp;printf("堆已满\n");return;size++;

weidl001的博客 1642

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python 数据结构与算法——优先队列和堆

堆的 python 实现,堆的基本原理

颹蕭蕭 2691

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

堆、堆排序、优先队列

文章目录堆1 (二叉)堆2 二叉堆的两种形式3 维护堆的性质4 建堆5 堆排序6 优先队列6.1 最大值(MAXIMUMMAXIMUMMAXIMUM)6.2 返回并弹出最大值(EXTRACT−MAXEXTRACT-MAXEXTRACT−MAX)6.3 增大关键字(INCREASE−KEYINCREASE-KEYINCREASE−KEY)6.4 插入(INSERTINSERTINSERT)6.5 优...

qq_39378221的博客 617

Python的堆与优先队列

Python的堆与优先队列 堆与优先队列 堆(英语:Heap)是计算机科学中的一种特别的树状数据结构。堆有如下特点:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于)C的值”。 按照母节点与子结点的大小关系,堆又可以分为以下两种:若母节点的值恒小于等于子节点的值,此堆称为最小堆(min heap);反之,若母节点的值恒大于等于子节点的值,此堆称为最大堆(max heap)。 在堆中最顶端的那一个节点,称作根节点(root node),根节点本身没有母节点(parent node)。

weixin_46302487的博客 767

[算法系列]优先队列,堆与堆排序

优先队列,堆与堆排序 1 优先队列 有时我们在处理有序元素时,并不一定要求他们全部有序. 很多情况下我们会收集一些元素, 处理当前最大的元素, 然后再收集更多元素, 再处理当前最大元素 … 这种情况下, 一个合适的数据结构一个支持两种操作 : 删除最大元素和 插入元素. 这种数据类型叫做 优先队列. 我们可以使用有序或无序的数组或链表实现.使用无序序列是解决这个问题的 惰性方法, 我们仅在必要的时...

lawfree的博客 3208
上一篇: 算法实践篇-堆排序
下一篇: 算法实践篇-快速排序
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值