数据结构-裴波那契堆实现

斐波那契堆——怎么发明一种非常聪明的数据结构——学习笔记 斐波那契堆从0开始,一步一步实现该数据结构,Java实现 阅读详情

发布一个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.data.struct;


public class FibHeap {
	private Node min;
	private int n;
	
	public  FibHeap(){
		
	}
	
	public FibHeap(int [] data){
		for(int i=0;i<data.length;i++){
			insert(data[i]);
		}
	}
	
	public void insert(int key){
		Node node=new Node();
		node.key=key;
		insert(node);
	}
	
	public void insert(Node node){
		node.degree=0;
		node.parent=null;
		node.children=null;
		node.mark=false;
		if(min==null){
			min=node;
			min.left=min;
			min.right=min;
		}else{
			min.right.left=node;
			node.right=min.right;
			min.right=node;
			node.left=min;
			if(node.key<min.key){
				min=node;
			}
		}
		n=n+1;
	}
	
	public FibHeap union(FibHeap fib){
		FibHeap h=new FibHeap();
		h.min=this.min;
		h.min.right.left=fib.min.right;
		fib.min.right.right=h.min.right;
		fib.min.left=h.min;
		h.min.right=fib.min;
		if(this.min==null||fib.min!=null&&fib.min.key<h.min.key){
			h.min=fib.min;
		}
		h.n=this.n+fib.n;
		return h;
	}
	
	public Node extractMin(){
		Node z=min;
		if(z!=null){
			if(z.children!=null){
				Node c=z.children;
				Node right=c.right;
				this.min.right.left=c;
				c.right=this.min.right;
				c.left=this.min;
				this.min.right=c;
				c.parent=null;
				c=right;
				while(c.right!=z.children.right){
					this.min.right.left=c;
					c.right=this.min.right;
					c.left=this.min;
					this.min.right=c;
					c.parent=null;
					c=c.right;
				}
			}
			
			this.min.right.left=this.min.left;
			this.min.left.right=this.min.right;
			if(z==z.right){
				min=null;
			}else{
				min=z.right;
				consolidate();
			}
			n=n-1;
		}
		return z;
	}
	
	private void consolidate(){
		Node []a=new Node[n];
		for(int i=0;i<a.length;i++){
			a[i]=null;;
		}
		Node w=min;
		Node x=w;
		int d=x.degree;
		Node right=w.right;
		while(a[d]!=null){
			Node y=a[d];
			if(x.key>y.key){
				Node tmp=x;
				x=y;
				y=tmp;
			}
			if(y==min){
				min=min.right;
			}
			link(y,x);
			a[d]=null;
			d=d+1;
		}
		a[d]=x;
		w=right;
		while( w.right!=min.right){
			Node z=w;
			d=z.degree;
			right=w.right;
			while(a[d]!=null){
				Node y=a[d];
				if(z.key>y.key){
					Node tmp=z;
					z=y;
					y=tmp;
				}
				if(y==min){
					min=min.right;
				}
				link(y,z);
				a[d]=null;
				d=d+1;
			}
			a[d]=z;
			w=right;
		}
		min=null;
		for(int i=0;i<a.length;i++){
			if(a[i]!=null){
				if(min==null){
					min=a[i];
					min.right=min;
					min.left=min;
				}else{
					min.right.left=a[i];
					a[i].right=min.right;
					a[i].left=min;
					min.right=a[i];
					if(a[i].key<min.key){
						min=a[i];
					}
				}
			}
		}
		
		
	}
	
	private void link(Node y,Node x){
		y.right.left=y.left;
		y.left.right=y.right;
		if(x.children==null){
			x.children=y;
			y.right=y;
			y.left=y;
		}else{
			x.children.right.left=y;
			y.right=x.children.right;
			x.children.right=y;
			y.left=x.children;
		}
		y.parent=x;
		x.degree++;
		y.mark=false;
	}
	
	public void decreaseKey(Node x,int k)throws  Exception{
		if(k>x.key){
			throw new Exception("new key is grater than crurrent key");
		}
		x.key=k;
		Node y=x.parent;
		if(y!=null&&x.key<y.key){
			cut(x,y);
			cascadingCut(y);
		}
		if(x.key<min.key){
			min=x;
		}
	}
	private void cut(Node x,Node y){
		x.right.left=x.left;
		x.left.right=x.right;
		min.right.left=x;
		x.right=min.right;
		x.left=min;
		min.right=x;
		x.parent=null;
		x.mark=false;
	}
	
	private void cascadingCut(Node y){
		Node z=y.parent;
		if(z!=null){
			if(!y.mark){
				y.mark=true;
			}else{
				cut(y,z);
				cascadingCut(z);
			}
		}
	}
	
	public void delete(Node x)throws Exception{
		decreaseKey(x, Integer.MIN_VALUE);
		extractMin();
	}
	
	public Node find(int key){
		return find(min,key);
	}
	
	private Node find(Node node,int key){
		if(node==null){
			return null;
		}
		Node p=node;
		if(p.key==key){
			return p;
		}
		Node z=find(p.children,key);
		if(z!=null){
			return z;
		}
		p=p.right;
		while(p!=node){
			if(p.key==key){
				return p;
			}
			 z=find(p.children,key);
			if(z!=null){
				return z;
			}
			p=p.right;
		}
		return null;
	}
	
	
	 public void print(){
	        System.out.format("F-Heap(n=%d):%n",this.n);
	        Node h = this.min;
	        while(h!=null){
	            this.print(0, h);
	            h = (h.right!=min)?h.right:null;
	        }
	    }
	     
    private void print(int level, Node node){
        for (int i = 0; i < level; i++) {
            System.out.format(" ");
        }
        System.out.format("|");
        for (int i = 0; i < level; i++) {
            System.out.format("-");
        }
        
        System.out.format("%d%s%n", node.key,node.mark?"(x)":"");
        Node child = node.children;
        while(child!=null){         
            print(level + 1, child);
            child = (child.right!=node.children)?child.right:null;
        }           
    }
	
	private static class Node{
		private int degree;
		private Node parent;
		private Node children;
		private boolean mark;
		private Node left;
		private Node right;
		private int key;
		
		
	}
	
	
	public static void main(String[] args)throws Exception {
		/*int []data=new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
		FibHeap fib=new FibHeap(data);
		fib.print();
		Node a=fib.find(3);
		System.out.println(a.key);
		fib.delete(a);
		System.out.println("==============");
		fib.print();*/
		System.out.println("===========");
		int []data2=new int[]{15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
		FibHeap fib2=new FibHeap(data2);
		Node a2=fib2.find(3);
		fib2.delete(a2);
		fib2.print();
		Node a3=fib2.find(10);
		fib2.delete(a3);
		Node a4=fib2.find(6);
		fib2.delete(a4);
		fib2.print();
		System.out.println("==============");
	}

}

 

 

 

斐波拉切堆栈c++ 生成斐波拉切数列的c++代码,使用递归的算法来模拟堆栈,实现类似于递归的操作 立即下载

相关推荐

AI大模型实战——模型测评:如何评估大模型的表现

大模型评测体系解析:从数据集到基准测试 本文系统梳理了大模型评测的关键要素。在数据集方面,重点介绍了C-Eval等中文评估套件,强调数据质量需通过人工验证保证。评测维度涵盖自然语言理解、知识推理、代码生成等核心能力。基准测试作为标准化评估方法,Glue、SuperClue等平台提供了公平比较的依据。文章指出厂商自评榜单存在水分问题,建议关注第三方评测。同时解析了少样本和零样本两种prompt模式的应用场景差异。最后解释了"SOTA"这一术语在描述模型最优性能时的应用价值。整体呈现了大模型

小志的博客 898

斐波那契堆(Fibonacci Heap)

也许我们每个人都知道斐波那契数列(Fibonacci sequence)。即这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...,如果我们用伪代码比表示: int FibonacciSequence(int n){ if (n == 1 || n == 2) { return 1; } return

yzf0011的专栏 4180

windows的rancherDesktop修改镜像源

Rancher Desktop中的“Allowed Images”功能(通常在 Preferences -> Container Engine -> Allowed Images 中找到)是用来定义一个允许拉取和推送的镜像列表的规则,例如,只允许从您组织或特定的受信任的仓库中获取镜像。如果问题依旧,请提供您Rancher Desktop的版本和当前选择的容器运行时,以便进一步协助。总结一下,对于Windows上的Rancher Desktop,如果您使用默认的。,镜像源的配置通常通过一个名为。

zwjapple的专栏 2700

斐波那契堆

斐波那契堆(Fibonacci heap)是堆中一种,它和二项堆一样,也是一种可合并堆;可用于实现合并优先队列。斐波那契堆比二项堆具有更好的平摊分析性能,它的合并操作的时间复杂度是O(1)。 与二项堆一样,它也是由一组堆最小有序树组成,并且是一种可合并堆。 与二项堆不同的是,斐波那契堆中的树不一定是二项树;而且二项堆中的树是有序排列的,但是斐波那契堆中的树都是有根而无序的。   1. 基本...

Geek 1万+

用R搞定生态溯源:MixSIAR贝叶斯混合模型从安装到出图的保姆级教程

本文提供了一份详细的MixSIAR贝叶斯混合模型教程,涵盖从R环境配置、数据预处理到模型参数设置和可视化分析的完整流程。通过实战案例和常见问题解决方案,帮助生态学研究者快速掌握混合模型在生态溯源中的应用,提升数据分析效率。

weixin_42531516的博客 469

三维视觉智能焊接系统:免示教技术的工业应用实践

本文深入探讨了三维视觉智能焊接系统中免示教技术的工业应用实践。该系统通过三维视觉相机实时扫描工件,自动识别焊缝并生成轨迹,将产线换型时间从数小时缩短至几分钟,显著提升了生产柔性。文章详细解析了其核心硬件、算法及工厂部署流程,并展望了与数字孪生、工艺智能化融合的未来趋势。

weixin_29091105的博客 432

go 斐波那契数列

go 斐波那契数列

wgchen 887

python docx设置标题中文字体rPr.rFonts.set(qn(‘w:eastAsia‘),u‘黑体‘),报错‘NoneType‘ object has no attribute ‘set‘

一、我的代码: 因为要编一个报告自动化生成的代码,所以用了python docx,在设置标题自己写了一段代码,要求将标题设置成:一级标题 黑体 小四 from docx import Document from docx.oxml.ns import qn from docx.shared import Pt def add_Head(document, level, text, font, size): # document word对象 # level 几级标题 # text 标题内容 # f

qq_40272386的博客 8866

递归算法之斐波那契数列(Fibonacci Sequence)详细解读

斐波那契数列(Fibonacci Sequence)是一个经典的数列,最早由意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci)在13世纪提出

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 4901

用OpenNI2获取奥比中光Astra Pro及 Astra Pro SM输出的深度图(win,linux arm64 x64平台)

搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 上获取深度信息,之前的驱动下载已经不好用了。

babytiger的专栏 1309

Spring Boot 微服务 API 网关实战:Spring Cloud Gateway 整合,搞定路由转发 + 统一认证 + 限流熔断(企业级落地)

摘要:本文详细介绍了SpringCloud Gateway在微服务架构中的核心作用与实现方案。作为API网关,它解决了服务入口分散、认证冗余、流量失控等痛点,提供路由转发、统一认证、限流熔断等能力。文章通过图书管理系统案例,演示了SpringBoot整合Gateway的全流程,包括基础路由配置、JWT全局认证、局部参数校验、Sentinel限流熔断以及Nacos动态路由等核心功能实现。特别强调了企业级落地中的关键注意事项,如路由顺序、过滤器执行顺序、HTTPS配置等。该方案能有效构建统一、安全、高效的微服务

lamehsl的专栏 1381

java实现裴波那契堆

当时看到裴波那契堆的时候觉得没什么,后来看到图这部分的时候,发现他比较重要,于是实现以下 package tree; import java.util.HashSet; import java.util.Set; public class FibHeap { public Node min; public int count; public static clas

chenzhichao的博客 1058

Geoserver新手必看:5分钟搞定世界地图发布(附中国省市数据)

本文为Geoserver新手提供了快速发布世界地图的实战指南。从环境搭建、数据准备入手,详细讲解了如何创建工作区、添加数据存储、发布图层及配置关键参数,并最终通过创建图层组实现地图服务的整合与预览。文章旨在帮助用户快速掌握Geoserver发布地图服务的核心流程与实用技巧。

cola5的博客 224

二叉搜索树的删除操作可以交换吗_堆和二叉堆的实现和特性

作者公众号:一角钱技术(org_yijiaoqian)堆 HeapHeap:可以迅速找到一堆数中的最大或者最小值的数据结构。将根节点最大的堆叫做大顶堆或大根堆,根节点最小的堆叫做小顶堆或小根堆。常见的堆有二叉堆、裴波那契堆等。堆本身是一个相对比较抽象的数据结构,那么它有具体的实现就分为二叉堆(二项堆、Binary)、裴波那契堆(基于树的)。那么要实现的话一般面试来说或者经常会用的话就是二叉堆来实现...

weixin_39822673的博客 173

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

算法导论笔记——第十九章 裴波那契堆

裴波那契堆:是一系列具有最小堆序(min-heap ordered)的有根树的集合。也就是说,每棵树均遵循最小堆性质(min-heap property):每个结点的关键字大于或等于其父结点的关键字。 可合并堆:支持5种操作 make-heap,insert,minimum,extract-min,union 除此之外,裴波那契堆还支持decrease-key和delete操作 ...

weixin_34381687的博客 138

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

堆和二叉堆的实现和特性

点赞再看,养成习惯,公众号搜一搜【一角钱技术】关注更多原创技术文章。 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章。 堆 Heap Heap:可以迅速找到一堆数中的最大或者最小值的数据结构。 将根节点最大的堆叫做大顶堆或大根堆,根节点最小的堆叫做小顶堆或小根堆。 常见的堆有二叉堆、裴波那契堆等。 堆本身是一个相对比较抽象的数据结构,那么它有具体的实现就分为二叉堆(二项堆、Binary)、裴波那契堆(基于树的)。那么要实现的话一般面试来说或者经常会用的话就..

org_hjh的博客 403

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

算法和数据结构提纲

算法: 1、冒泡排序。 2、选择排序。 3、插入排序。 4、合并排序。 5、堆排序。 6、快速排序。 7、基数排序。 8、计数排序。 9、桶排序。 10、BF算法。 11、KMP算法。 12、关键路径 13、汉诺塔问题 14、八皇后问题 15、中缀表达式转换为后缀表达式 16、逆波兰计算器 17、

d7880364的专栏 379

小顶堆 删除最小值维护_堆和二叉堆的实现和特性

堆 HeapHeap:可以迅速找到一堆数中的最大或者最小值的数据结构。将根节点最大的堆叫做大顶堆或大根堆,根节点最小的堆叫做小顶堆或小根堆。常见的堆有二叉堆、裴波那契堆等。堆本身是一个相对比较抽象的数据结构,那么它有具体的实现就分为二叉堆(二项堆、Binary)、裴波那契堆(基于树的)。那么要实现的话一般面试来说或者经常会用的话就是二叉堆来实现,当然在工业级比较牛逼的应用都是裴波那契以及...

weixin_39794213的博客 154

8月逆袭,仅靠这份业界最强算法及数据结构宝典,我挺进字节跳动

非算法方向的你 面了多少次试? 最后,因为不懂算法, 死在了半路上? 这些痛, 作为技术创新型公司的小编——个推君 怎么会不懂? 为此,个推君特请了我司经验丰富的面试官为你奉上一份热乎的面试宝典。 宝典可不是面试题哦 仅送给想认真钻研的童鞋 帮大家梳理知识点 让大家举一反三,offer拿到手软! 这份PDF涉及的那些AI基础知识是永远不会过时,且被后人反复使用的。在秋招/春招、找实习或者社招上都可以很好的体现。比如面试中几个高频的问题:既包含基于技术的章,如分治法、动态规划、贪心算法、.

weixin_50666791的博客 200

数据结构和算法提纲

算法: A、排序: 1、冒泡排序。 2、选择排序。 3、插入排序。 4、合并排序。 5、堆排序。 6、快速排序。 7、基数排序。 8、计数排序。 9、桶排序。 B、字符串模式匹配: 1、BF算法。 2、KMP算法。 数据结构: 1、栈。 2、队列。 3、链表。 4、树。 5、有根树。 6、有序树。 7、二叉树。 8、线索二叉树。 9、二叉查找树

843

我挺进字节跳动,仅靠这份业界最强算法及数据结构宝典

近年,在全球信息化大潮的推动下,我国的计算机产业发展迅猛,对专业人才的需求日益迫切。这对计算机教育界和出版界既是机遇,也是挑战:而专业教材的建设在教育战略上显得举足轻重。在我国信息技术发展时间较短的现状下,美国等发达国家在其计算机科学发展的几十年间积淀和发展的经典教材仍有许多值得借鉴之处。因此,引进一批国外优秀计算机教材将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨、建设真正的世界一流大学的必由之路。

m0_46995061的博客 343

10月逆袭,仅靠这份业界最强算法及数据结构宝典,我挺进字节跳动

近年,在全球信息化大潮的推动下,我国的计算机产业发展迅猛,对专业人才的需求日益迫切。这对计算机教育界和出版界既是机遇,也是挑战:而专业教材的建设在教育战略上显得举足轻重。在我国信息技术发展时间较短的现状下,美国等发达国家在其计算机科学发展的几十年间积淀和发展的经典教材仍有许多值得借鉴之处。因此,引进一批国外优秀计算机教材将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨、建设真正的世界一流大学的必由之路。

the shy 2675
上一篇: 数据结构-B树实现
下一篇: 数据结构-van emde boas 树
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、付费专栏及课程。

余额充值