数据结构-红黑树扩张-区间树

在红黑树的基础上实现区间树的创建,左旋,右旋,插入和查找 题目:在红黑树的基础上实现区间树的创建,左旋,右旋,插入和查找 算法思想: 区间树介绍:       区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。区间[low,high]表示成一个对象i,low表示区间的低点,high表示区间的高点。通过建立这种特定的结构,可使区间的元素的查找和插入都可以在O(lgn)的时间内完成。 相比于红 阅读详情

发布一个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 IntervalTree {
	private Node root;
	//private Node nil;
	
	public IntervalTree(int [][]data){
		for(int i=0;i<data.length;i++){
			Node node=new Node();
			node.setLow(data[i][0]);
			node.setHigh(data[i][1]);
			insert(node);
		}
	}
	/**
	 * 中序遍历
	 */
	public void inorderTreeWalk(){
		innerInorderTreeWalk(root);
		System.out.println();
	}
	/**
	 * 中序遍历
	 */
	private void innerInorderTreeWalk(Node node){
		if(node!=null){
			innerInorderTreeWalk(node.left);
			System.out.print("-->{"+node.low+","+node.high+"}");
			innerInorderTreeWalk(node.right);
		}
	}
	/**
	 * 先序遍历
	 */
	public void preorderWalk(){
		System.out.println("      "+((root.color==Node.RED?"R":"B")+"{"+root.low+","+root.high+"-"+root.max+"}"));
		innerPreorderWalk(root,1);
		System.out.println();
	}
	private void innerPreorderWalk(Node node,int depth){
		if(node!=null){
			if(node.left!=null){
				for(int i=6-depth*2;i>0;i--){
					System.out.print(" ");
				}
				System.out.print((node.left.color==Node.RED?"R":"B")+"{"+node.left.low+","+node.left.high+"-"+node.left.max+"},{"+node.low+","+node.high+"}");
			}else{
				System.out.print("  ");
			}
			if(node.right!=null){
				System.out.print("  ");
				System.out.print((node.right.color==Node.RED?"R":"B")+"{"+node.right.low+","+node.right.high+"-"+node.right.max+"},{"+node.low+","+node.high+"}");
			}else{
				System.out.print("  ");
			}
			if(node.left!=null||node.right!=null){
				System.out.println();
			}
			innerPreorderWalk(node.left,depth+1);
			innerPreorderWalk(node.right,depth+1);
			
		}
		
	}
	/**
	 * 后续遍历
	 */
	public void postorderWalk(){
		innerPostorderWalk(root);
		System.out.println();
	}
	private void innerPostorderWalk(Node node){
		innerPostorderWalk(node.left);
		innerPostorderWalk(node.right);
		System.out.print("-->{"+node.low+","+node.high+"}");
	}
	/**
	 * 查找值为value的节点
	 * @param value
	 * @return
	 */
	public Node search(int low,int high){
		if(low<high){
			int tmp=low;
			low=high;
			high=tmp;
		}
		return innerSearch(root,low,high);
	}
	private Node innerSearch(Node node,int low,int high){
		Node x=root;
		while(x!=null&&!(low<=x.high&&x.low<=high)){
			if(x.left!=null&&x.left.max>=low){
				x=x.left;
			}else{
				x=x.right;
			}
		}
		return x;
	}
	/**
	 * 返回最小值节点
	 * @return
	 */
	public Node minimum(){
		return innerMinimum(root);
	}
	private Node innerMinimum(Node node){
		if(node.left!=null){
			return innerMinimum(node.left);
		}
		return node;
	}
	/**
	 * 返回最大值节点
	 * @return
	 */
	public Node maximum(){
		return innerMaximum(root);
	}
	private Node innerMaximum(Node node){
		if(node.right!=null){
			return innerMaximum(node.right);
		}
		return node;
	}
	/**
	 * 返回给定节点的后继结点
	 * @param node
	 * @return
	 */
	public Node successor(Node node){
		if(node.right!=null){
			return innerMinimum(node.right);
		}
		Node y=node.parent;
		while(y!=null&&y.right==node){
			node=y;
			y=y.parent;
		}
		return y;
	}
	/**
	 * 插入
	 * @param node
	 */
	private void insert(Node node){
		if(node.low>node.high){
			int tmp=node.low;
			node.low=node.high;
			node.high=tmp;
		}
		Node y=null;
		Node x=root;
		while(x!=null){
			y=x;
			if(node.low<x.low){
				x=x.left;
			}else{
				x=x.right;
			}
		}
		node.parent=y;
		if(y==null){
			root=node;
		}else if(y.low>node.low){
			y.left=node;
		}else{
			y.right=node;
		}
		node.max=node.high;
		Node z=node;
		while(z!=null){
			if(z.left==null&&z.right!=null){
				z.max=Math.max(z.right.max, z.high);
			}else if(z.right==null&&z.left!=null){
				z.max=Math.max(z.left.max, z.high);
			}else if(z.right==null&&z.left==null){
				z.max=z.high;
			}else{
				z.max=Math.max(Math.max(z.high, z.left.max),z.right.max);
			}
			z=z.parent;
		}
		root.parent=null;
		node.color=Node.RED;
		preorderWalk();
		insertFixUp(node);
		preorderWalk();

	}
	/**
	 * 插入修复颜色
	 * @param node
	 */
	private void insertFixUp(Node node){
		if(node.parent==null){
			node.color=Node.BLACK;
		}else if(node.parent.parent==null){
			node.color=Node.RED;
		}else {
			while(node.parent==null||node.parent.color==Node.RED){
				if(node.parent==null){
					node.color=Node.BLACK;
					return;
				}else if(node.parent==node.parent.parent.left){
					Node y=node.parent.parent.right;
					if(y==null||y.color==Node.RED){
						node.parent.color=Node.BLACK;
						if(y!=null){
							y.color=Node.BLACK;
						}else{
							node.parent.parent.color=Node.RED;
							rightRotate(node.parent.parent);
							return;
						}
						node.parent.parent.color=Node.RED;
						
						node=node.parent.parent;
					}else if(node==node.parent.right){
						node=node.parent;
						leftRotate(node);
					}else{
						node.parent.color=Node.BLACK;
						node.parent.parent.color=Node.RED;
						rightRotate(node.parent.parent);
					}
				}else{
					Node y=node.parent.parent.left;
					if(y==null||y.color==Node.RED){
						node.parent.color=Node.BLACK;
						if(y!=null){
							y.color=Node.BLACK;
						}else{
							node.parent.parent.color=Node.RED;
							leftRotate(node.parent.parent);
							return;
						}
						node.parent.parent.color=Node.RED;
						
						node=node.parent.parent;
					}else if(node==node.parent.left){
						node=node.parent;
						rightRotate(node);
					}else{
						node.parent.color=Node.BLACK;
						node.parent.parent.color=node.RED;
						leftRotate(node.parent.parent);
					}
				}
			}
		}
	}
	public void insert(int low,int high){
		Node node=new Node();
		node.setLow(low);
		node.setHigh(high);
		insert(node);
	}
	private void delete(Node node){
		Node y=node;
		int yoc=y.color;
		Node x;
		if(node.left==null&&node.right!=null){
			 x=node.right;
			transplant(node, node.right);
			Node z=x;
			while(z!=null){
				if(z.left==null&&z.right!=null){
					z.max=Math.max(z.right.max, z.high);
				}else if(z.right==null&&z.left!=null){
					z.max=Math.max(z.left.max, z.high);
				}else if(z.right==null&&z.left==null){
					z.max=z.high;
				}else{
					z.max=Math.max(Math.max(z.high, z.left.max),z.right.max);
				}
				z=z.parent;
			}
		}else if(node.right==null&&node.left!=null){
			 x=node.left;
			transplant(node, node.left);
			Node z=x;
			while(z!=null){
				if(z.left==null&&z.right!=null){
					z.max=Math.max(z.right.max, z.high);
				}else if(z.right==null&&z.left!=null){
					z.max=Math.max(z.left.max, z.high);
				}else if(z.right==null&&z.left==null){
					z.max=z.high;
				}else{
					z.max=Math.max(Math.max(z.high, z.left.max),z.right.max);
				}
				z=z.parent;
			}
		}else if(node.left==null&&node.right==null){
			if(node.parent==null){
				root=null;
				System.out.println("root is null");
				return;
			}
			x=node.parent;
			Node z=x;
			
			if(node==node.parent.left){
				node.parent.left=null;
				while(z!=null){
					if(z.left==null&&z.right!=null){
						z.max=Math.max(z.right.max, z.high);
					}else if(z.right==null&&z.left!=null){
						z.max=Math.max(z.left.max, z.high);
					}else if(z.right==null&&z.left==null){
						z.max=z.high;
					}else{
						z.max=Math.max(Math.max(z.high, z.left.max),z.right.max);
					}
					z=z.parent;
				}
				if(x.color==Node.RED){
					leftRotate(x);
					preorderWalk();
					return;
				}else if(x.color==Node.BLACK&&node.color==Node.BLACK){
					x=node.parent.right;
					deleteFixUp(x);
					return;
				}
			}else{
				node.parent.right=null;
				while(z!=null){
					if(z.left==null&&z.right!=null){
						z.max=Math.max(z.right.max, z.high);
					}else if(z.right==null&&z.left!=null){
						z.max=Math.max(z.left.max, z.high);
					}else if(z.right==null&&z.left==null){
						z.max=z.high;
					}else{
						z.max=Math.max(Math.max(z.high, z.left.max),z.right.max);
					}
					z=z.parent;
				}
				if(x.color==Node.RED){
					rightRotate(x);
					preorderWalk();
					return;
				}else if(x.color==Node.BLACK&&node.color==Node.BLACK){
					x=node.parent.left;
					deleteFixUp(x);
					return;
				}
			}
		}else{
			y=innerMinimum(node.right);
			yoc=y.color;
			 
			if(y.parent!=node){
				Node z=y.right;
				transplant(y, y.right);
				while(z!=null){
					if(z.left==null&&z.right!=null){
						z.max=Math.max(z.right.max, z.high);
					}else if(z.right==null&&z.left!=null){
						z.max=Math.max(z.left.max, z.high);
					}else if(z.right==null&&z.left==null){
						z.max=z.high;
					}else{
						z.max=Math.max(Math.max(z.high, z.left.max),z.right.max);
					}
					z=z.parent;
				}
				y.right=node.right;
				y.right.parent=y;
				
			}
			Node z=y;
			transplant(node, y);
			while(z!=null){
				if(z.left==null&&z.right!=null){
					z.max=Math.max(z.right.max, z.high);
				}else if(z.right==null&&z.left!=null){
					z.max=Math.max(z.left.max, z.high);
				}else if(z.right==null&&z.left==null){
					z.max=z.high;
				}else{
					z.max=Math.max(Math.max(z.high, z.left.max),z.right.max);
				}
				z=z.parent;
			}
			x=y.right;
			y.left=node.left;
			y.left.parent=y;
			y.color=node.color;
			if(x==null){
				preorderWalk();
				y.color=Node.RED;
				if(y.left!=null){
					y.left.color=Node.BLACK;
					rightRotate(y);
				}else if(y.right!=null){
					y.right.color=Node.RED;
					leftRotate(y);
				}else{
					y.color=Node.RED;
				}
				preorderWalk();
				return;
				
			}
		}
		
		preorderWalk();
		if(yoc==Node.BLACK){
			deleteFixUp(x);
			preorderWalk();
		}
		
	}
	private void deleteFixUp(Node node){
		if(node==null){
			
		}
		while(node!=root&&node.color==Node.BLACK){
			Node w;
			if(node==node.parent.left){
				w=node.parent.right;
				if(w.color==Node.RED){
					w.color=Node.BLACK;
					node.parent.color=Node.RED;
					leftRotate(node.parent);
					w=node.parent.right;
				}
				if(w.left.color==Node.BLACK&&w.right.color==Node.BLACK){
					w.color=Node.RED;
					node=node.parent;
				}else if(w.right.color==Node.BLACK){
					w.left.color=Node.BLACK;
					w.color=Node.RED;
					rightRotate(w);
					w=node.parent.right;
				}
				w.color=node.parent.color;
				node.parent.color=Node.BLACK;
				w.right.color=Node.BLACK;
				leftRotate(node.parent);
				node=root;
				
			}else{
				w=node.parent.left;
				if(w.color==Node.RED){
					w.color=Node.BLACK;
					node.parent.color=Node.RED;
					rightRotate(node.parent);
					w=node.parent.left;
				}
				if(w.right.color==Node.BLACK&&w.left.color==Node.BLACK){
					w.color=Node.RED;
					node=node.parent;
				}else if(w.left.color==Node.BLACK){
					w.left.color=Node.BLACK;
					w.color=Node.RED;
					leftRotate(w);
					w=node.parent.left;
				}
				w.color=node.parent.color;
				node.parent.color=Node.BLACK;
				w.left.color=Node.BLACK;
				rightRotate(node.parent);
				node=root;
			}
		}
		node.color=Node.BLACK;
		
	}
	/**
	 * 左旋转
	 * @param node
	 */
	private void leftRotate(Node node){
		Node y=node.right;
		node.right=y.left;
		if(y.left!=null){
			y.left.parent=node;
		}
		y.parent=node.parent;
		if(node.parent==null){
			root=y;
		}else if(node==node.parent.left){
			node.parent.left=y;
		}else{
			node.parent.right=y;
		}
		y.left=node;
		node.parent=y;
		
		if(node.left==null&&node.right!=null){
			node.max=Math.max(node.right.max, node.high);
		}else if(node.right==null&&node.left!=null){
			node.max=Math.max(node.left.max, node.high);
		}else if(node.right==null&&node.left==null){
			node.max=node.high;
		}else{
			node.max=Math.max(Math.max(node.high, node.left.max),node.right.max);
		}
		if(y.left==null&&y.right!=null){
			y.max=Math.max(y.right.max, y.high);
		}else if(y.right==null&&y.left!=null){
			y.max=Math.max(y.left.max, y.high);
		}else if(y.right==null&&y.left==null){
			y.max=y.high;
		}else{
			y.max=Math.max(Math.max(y.high, y.left.max),y.right.max);
		}
	}
	/**
	 * 右旋转
	 * @param node
	 */
	private void rightRotate(Node node){
		Node y=node.left;
		node.left=y.right;
		if(y.right!=null){
			y.right.parent=node;
		}
		y.parent=node.parent;
		if(node.parent==null){
			root=y;
		}else if(node==node.parent.left){
			node.parent.left=y;
		}else{
			node.parent.right=y;
		}
		y.right=node;
		node.parent=y;
		if(node.left==null&&node.right!=null){
			node.max=Math.max(node.right.max, node.high);
		}else if(node.right==null&&node.left!=null){
			node.max=Math.max(node.left.max, node.high);
		}else if(node.right==null&&node.left==null){
			node.max=node.high;
		}else{
			node.max=Math.max(Math.max(node.high, node.left.max),node.right.max);
		}
		if(y.left==null&&y.right!=null){
			y.max=Math.max(y.right.max, y.high);
		}else if(y.right==null&&y.left!=null){
			y.max=Math.max(y.left.max, y.high);
		}else if(y.right==null&&y.left==null){
			y.max=y.high;
		}else{
			y.max=Math.max(Math.max(y.high, y.left.max),y.right.max);
		}
	}
	private void transplant(Node u,Node v){
		if(u.parent==null){
			root=v;
		}else if(u==u.parent.left){
			u.parent.left=v;
		}else{
			u.parent.right=v;
		}
		if(v!=null){
			v.parent=u.parent;
		}
	}
	/**
	 * 删除节点
	 * @param value
	 */
	public void delete(int low,int high){
		delete(search(low,high));
	}
	private static class Node{
		public static final int RED=1;
		public static final int BLACK=2;
		private Node left;
		private Node right;
		private Node parent;
		private int low;
		private int high;
		private int color;
		private int max;
		public Node getLeft() {
			return left;
		}
		public void setLeft(Node left) {
			this.left = left;
		}
		public Node getRight() {
			return right;
		}
		public void setRight(Node right) {
			this.right = right;
		}
		public Node getParent() {
			return parent;
		}
		public void setParent(Node parent) {
			this.parent = parent;
		}
		
		public int getColor() {
			return color;
		}
		public void setColor(int color) {
			this.color = color;
		}
		public int getLow() {
			return low;
		}
		public void setLow(int low) {
			this.low = low;
		}
		public int getHigh() {
			return high;
		}
		public void setHigh(int high) {
			this.high = high;
		}
		public int getMax() {
			return max;
		}
		public void setMax(int max) {
			this.max = max;
		}
		
		
		
	}
	public static void main(String[] args) {
		int [][] data=new int[][]{{1,2},{3,5},{2,4},{6,11},{3,9},{9,15},{1,10},{10,12},{11,16}};
		IntervalTree tree=new IntervalTree(data);
		tree.inorderTreeWalk();
		System.out.println("===========");
		System.out.println(tree.search(9, 15).low+","+tree.search(9, 15).high);
		tree.delete(9, 15);
		System.out.println(tree.search(11, 16).low+","+tree.search(11, 16).high);
		tree.delete(11, 16);
		
	}

}

 

红黑树、区间树 红黑树继承二叉查找树,区间树继承红黑树,main函数中写的是区间树的测试程序 立即下载

相关推荐

中科大 算法导论 课件(全套8)红黑树及其扩张

中国科学技术大学 算法导论 课件 计算机相关专业必修

数据结构之区间树

区间树 (Interval tree), 是一种二叉搜索树。它将一个区间划分成一些单元区间(即单个数据),每个单元区间对应一个叶节点,非叶节点表示其所代表的子树对应的子区间。区间树中,每个节点的子节点分别表示它的左右半区间。对于每一个非叶节点 ,设其对应区间为[a, b],它的左子树表示的区间为[a, (a+b)/2], 右子树表示的区间为[(a+b)/2+1, b] (1)区间树的建立核心代码: //包括begin,不包括end void build(int node,int begin,int end)

有梦想的小新人的博客 1707

AD在建PCB封装时如何添加元器件的3D模型

3D模型

k1ang的博客 1万+

【数据结构】线段树(区间树)

文章目录概述实现 概述 线段树也称为“区间树”,它的适用场景也是很普遍的,关注的重点是“线段”,或者说是区间。非常经典的线段树题目是“区间染色”,搜搜看呗! 有的时候我们处理的数据的时候也需要进行区间的查询,比如说查询一个区间[i,j]的最大值,最小值,或者区间数字和。换成生活中的场景就是在2019年一年中,你的博客在什么时间段关注你的人增长最快啊,一天中自己的博文阅读量最高的时间段啊,某个星系中...

明月沉江春雾晓 2633

【学长笔记】关于车牌识别的CCPD数据集按比例划分

本文介绍了一个用于CCPD车牌数据集划分的Python脚本,主要功能包括:1) 将数据集按比例划分为训练集、验证集和测试集;2) 支持图像与标签文件校验;3) 可自定义划分比例和样本数量限制;4) 自动生成标准目录结构。脚本使用随机种子确保可重复性,并通过tqdm显示进度条。处理后数据可直接用于YOLO等目标检测模型的训练与评估,建议在预处理完成后立即执行划分以避免数据泄露。文章还提供了相关技术博客的参考链接。

apple_53308981的博客 1480

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 282

玩转数据结构——第八章:线段树(区间树)

线段树(Segment Tree) 内容概览: 一、什么是线段树? 二、线段树的基础表示 三、创建线段树 四、线段树中的区间查询 五、LeetCode上线段树相关的问题 六、线段树的更新操作 七、线段树更多相关的问题 为什么要使用区间树? 对于给定区间 更新:更新区间中一个元素或者一个区间的值,数组的实现是级别 查询:查询一个区间[i,j]的最大值,最小值,或者区间数字和,...

犟驴的博客 457

如何利用三阈值游程理论识别干旱事件_python

如果当前时间点与上一个干旱事件的结束位置相隔不超过一个月(`index - current_event['end_index']

weixin_44259522的博客 1947

《算法导论3rd第十四章》数据结构扩张

算法导论,十四章,数据结构扩张。即如果通过附加属性使用基础数据结构满足各种需求

懒猫的脚印 1148

十一、机器学习进阶知识:径向基神经网络(RBFNN)的实现(Python,附源码及数据集)

本文对径向基神经网络(RBFNN)的理论基础及建模步骤进行介绍,之后使用Python实现基于RBFNN的数据预测,通俗易懂,适合新手学习,附源码及实验数据集。

weixin_42051846的博客 1万+

计算机应用数学--第一次作业

中科大 计算机应用数学 第一次作业

一杯水果茶!足矣~ 1329

Day_25,数据结构扩张以红黑树为基础(将红黑树变更为区间树)

#include <stdio.h> #include <string.h> #include <iostream> using namespace std; int Campare(int x,int y) { if (x>y) return 1; else if (x==y) return 0; else return -1; } enum NodeColor { RED = 1

weixin_40301728的博客 426

AIGC游戏测试自动化:AI如何提升游戏QA效率

随着游戏产业的蓬勃发展,游戏的复杂度和规模不断增加,传统的游戏测试方式面临着巨大的挑战。本文章的目的在于深入探讨AIGC技术在游戏测试自动化中的应用,分析AI如何提升游戏QA的效率。范围涵盖了从核心概念到实际应用的各个方面,包括算法原理、数学模型、项目实战案例以及未来发展趋势等。本文将按照以下结构进行阐述:首先介绍核心概念与联系,明确AIGC和游戏测试自动化的相关概念和关系;接着讲解核心算法原理和具体操作步骤,通过Python代码进行详细说明;然后介绍数学模型和公式,并举例说明;

AI 原生应用开发的博客 1357

算法导论第十四章数据结构扩张学习总结

本章主要介绍两种通过扩张红黑树构造出的数据结构,一种是动态顺序统计树,另一种是区间树,之后介绍了如何扩张现有数据结构的一个通用方法。 动态顺序统计 秩:一个元素在集合线性序中的位置 顺序统计树:在红黑树上新增加1个size属性,这个属性包含了以x为根的子树(包括x本身)的(内)结点数,则该红黑树为顺序统计树,如下图所示: 查找具有给定秩的元素:找出T中的第i个小的元素,调用OS-SELECT(T,i),伪代码如下: 确定一个元素的秩:返回对T进行中序遍历后得到的线性序中x的位置,伪代码如下: 对子树规

weixin_44062852的博客 346

YOLO26涨点改进 | 全网独家创新,注意力改进篇| SCI一区Top | 引入AFCA自适应细粒度通道注意力,联合建模全局与局部通道依赖关系,适合目标检测、图像去雾、关键点检测、图像分类、图像分割

🔥本文提出了一种基于AFCA(自适应细粒度通道注意力)模块改进的YOLO26目标检测网络。AFCA通过联合建模全局与局部通道依赖关系,实现了更精细的通道注意力分配,能够增强目标相关特征并抑制背景噪声。该模块采用自适应融合策略动态平衡通道权重,在保持轻量级结构的同时,显著提升了小目标和复杂背景下的检测性能。文章详细介绍了AFCA的结构原理、实现优势,并提供了完整的代码实现和YAML配置文件,指导读者如何将该模块集成到YOLO26框架中。实验结果表明,AFCA在检测精度和鲁棒性方面优于传统注意力机制。

Ai缝合怪、助力小伙伴高效发论文 305

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构之五(数据结构的扩充、动态统计、区间树)

1.        动态有序统计 静态统计:是指数据内容一旦确定,就不再有增加、删除操作,排序的内容是静态固定不变的。(见排序之五) 动态统计:内容有可能有增减。 动态统计主要有两种操作。一是获取数组中第i大的数。二是给一个数x,返回x在数组中的位置。 动态统计实现方式:以红黑树为基础进行扩充,在每个节点x存储额外的一个记录信息---以x为根的子树的节点数(包含x自己,以及其内部孩子节点,

onyheart的专栏 1282

pscad IEEE标准系统搭建说明

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

《算法导论》学习分享——14. 数据结构的扩张

14. 数据结构的扩张 文章目录14. 数据结构的扩张动态顺序统计量查看给定秩的元素查看一个元素的秩维护size如何扩张数据结构区间树 一些工程应用需要的只是教科书中的标准数据结构,也有许多其他的应用需要对现有数据结构进行少许的创新和改造,但只有很少的情况需要创造全新类型的数据结构。 更经常的是,通过存储额外信息的方法来扩张标准的数据结构,然后对这种数据结构编写新的操作来支持所需要的应用。 比如:...

MaoMao-go 295

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《算法导论》Ch.14_学习笔记

数据结构的扩张>

qq_42943306的博客 587

第14章《数据结构的扩张》:如何扩张数据结构

如何扩张数据结构 对基本数据进行扩张以支持一些附加功能,在算法设计过程中是相当常见的。所以扩张一种数据结构大概可以分为如下4个步骤: 选择一种基础数据结构 确定基础数据结构中要维护的附加信息 检验基础数据结构上的基本修改操作能否维护附加信息 设计一些新操作 以上仅作为一个一般模式,大多数的设计工作都包含试探和纠错的成分,过程中所有步骤通常可以并行进行 区间树 扩张红黑树来支持由区间构成的动态集...

BGoodHabit的博客 681

算法导论读书笔记-第十四章-数据结构的扩张

算法导论第14章 数据结构的扩张 一些工程应用需要的只是标准数据结构, 但也有许多其他的应用需要对现有数据结构进行少许的创新和改造, 但是只在很少情况下需要创造出全新类型的数据结构, 更经常的是通过存储额外信息的方法来扩张一种标准的数据结构, 然后对这种数据结构编写新的操作来支持所需要的应用. 但是对数据结构的扩张并不总是简单直接的, 因为新的信息必须要能被该数据结构上的常规操作更新和维护. 14...

weixin_34075551的博客 239

算法导论笔记——第十二~十四章 数据结构(二)树

第十二章 二叉搜索树 >=左子树的所有key,<=右子树的所有key 在一棵高度为h的二叉搜索树上,动态集合上的操作SEARCH,MINIMUM,MAXIMUM,SUCCESSOR,PREDECESSOR,INSERT和DELETE可以在O(h)时间内完成。 h>=(lgn向下取整) 和快速排序算法一样,其平均性能更接近于最好情形。 随机构建二叉搜索树期望高度为O(lg...

weixin_33905756的博客 163

数据结构扩张

扩张红黑树构造出两种数据结构动态顺序统计: 支持一般动态集合上顺序统计操作的数据结构,通过这种结构我们可以快速的找到一个集合中的第i小的数,或者一个指定元素在集合中的全序中的位置。 修改红黑树使得可以在O(lgn)时间内确定任何的顺序统计量,集合在集合线性序中的位置成为元素的**秩**。在红黑树的节点中添加了一个新的属性x.size,包含了以x为根的(包含x)的子树的内节点数,即这棵子树的大

deta的专栏 417

跟我一起学算法——红黑树

目录 定义 性质 旋转 插入 数据结构扩张 应用 参考 定义 红黑树(red-black tree)是一种改进的二叉查找树,结点域中增加颜色属性(红或黑)。 二叉查找树的一般操作的时间为 O(lgn)。但若它退...

城志的学习笔记 412

【算法学习3】数据结构

算法学习数据结构,为了更好开展后续算法的实现

m0_64548999的博客 320

《算法导论》读书笔记(五)

《算法导论》读书笔记之第12章 二叉查找树 摘要:   本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lgn),从而基本动态集合的操作平均时间为θ(lgn)。 ...

weixin_34273046的博客 144
上一篇: 数据结构-红黑树扩张-顺序统计树
下一篇: 算法实践篇-钢条切割问题-动态规划
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、付费专栏及课程。

余额充值