叶子结点

HashMap源码分析

☆樱花仙子☆ 提交于 2019-12-15 12:31:19
HashMap 文章目录 HashMap 基本属性 构造函数 无参构造 HashMap(int,float)型构造函数 HashMap(int)型构造函数 `HashMap(Map)型构造函数` HashMap常用方法 put方法 hash方法 putVal方法 寻找key对应的映射关系: treeifyBin方法 treeify方法 get方法 resize方法 hashmap的实现原理:首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。 当链表数组的容量超过初始容量的0.75时,再散列将链表数组扩大2倍,把原链表数组的搬移到新的数组中 当table中的元素足够多时,发生冲突的概率就会大大增加,冲突的增多会导致每个桶中的元素个数变多,这样的话会使得查找元素效率变得低下,当同一个桶中元素个数达到8时,桶中的元素结构将转换为红黑树。 基本属性 public class HashMap < K , V > extends AbstractMap < K

p2p

风流意气都作罢 提交于 2019-12-15 09:03:33
1.概念原理 现在基本上很多网络应用的软件都涉及p2p技术(QQ,PPS,对战平台…),p2p技术旨在于摒弃以前只能从服务器获得资源的观念,每台电脑都是一个peer,都可以从其他peer上获取自己想要的资源,而同时自己也在向他人共享自己的资源.这里有一个很大的优势就是可以极大程度节省服务器的带宽. 打个比喻,优酷和pps,一个是基于服务器->客户端的模式,一个是p2p技术,优酷要想为用户提供高清视频只能通过优化视频压缩(例如最新的H.264)和增大自身服务器带宽.而pps完全不用担心带宽问题,只要用户数量多的话基本上可以满速观看视频. 在这里在停停,pps采用的是rmvb压缩封装,体积比h264flv大上十倍,但是pps依然可以流畅观看.这就是p2p技术的优势. 在中国大部分用户都使用路由器或交换器之类的其他NAT设备来共享网络,这使得不同内网的用户之间的交流变得十分困难,p2p技术的出现确实另其变得可行和简便. 2.发展历程 自P2P广受关注以来,它的发展历程大致可以分为3个阶段: 第一阶段,1999年至2000年左右,P2P技术由应用开发向学术研究发展。因为当时P2P技术刚重新受到关注,涌现了许多著名的P2P应用系统,但由于P2P存在安全、标准和版权等缺陷,许多应用都被扼杀。P2P技术的完善迫在眉睫,于是越来越多的学者开始研究P2P技术,旨在更好地应用它。 第二阶段

数据结构(树)

心已入冬 提交于 2019-12-14 17:39:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 树: 树是 n个结点 的有限集合,有且仅有一个 根结点, 其余结点可分为m个根结点的 子树。 度: 指的是一个节点拥有子节点的个数。如二叉树的节点的最大度为2。 高度/深度: 数的层数,根节点为第一层,依次类推。 叶子节点: 度为0的节点,即没有子节点的节点。 二叉树: 在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子) 前序遍历(前根遍历): 根 ——>左——>右 中序遍历(中根遍历):左——> 根 ——>右 后序遍历(后根遍历):左——>右——> 根 满二叉树: 在一棵二叉树中,如果所有分支结点都有左孩子和右孩子结点,并且叶子结点都集中在二叉树的最下层,这样的树叫做满二叉树 高度为h,由2^h-1个节点构成的二叉树。 完全二叉树: 二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数(即1~h-1层为一个满二叉树),第 h 层所有的结点都连续集中在最左边。 二叉查找树(BST): 又称二叉排序树,亦称二叉搜索树(Binary Search Tree)。 定义: 一棵空树,或者是具有下列性质的二叉树: 1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3)左

B-树(B树)详解

筅森魡賤 提交于 2019-12-14 15:45:07
具体讲解之前,有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树。特此说明。 1、B-树(B树)的基本概念 B-树中所有结点中孩子结点个数的最大值成为B-树的阶,通常用m表示,从查找效率考虑,一般要求m>=3。一棵m阶B-树或者是一棵空树,或者是满足以下条件的m叉树。 1)每个结点最多有m个分支(子树);而最少分支数要看是否为根结点,如果是根结点且不是叶子结点,则至少要有两个分支,非根非叶结点至少有ceil(m/2)个分支,这里ceil代表向上取整。 2)如果一个结点有n-1个关键字,那么该结点有n个分支。这n-1个关键字按照递增顺序排列。 3)每个结点的结构为: n k1 k2 ... kn p0 p1 p2 ... pn 其中,n为该结点中关键字的个数;ki为该结点的关键字且满足ki<ki+1;pi为该结点的孩子结点指针且满足pi所指结点上的关键字大于ki且小于ki+1,p0所指结点上的关键字小于k1,pn所指结点上的关键字大于kn。 4)结点内各关键字互不相等且按从小到大排列。 5)叶子结点处于同一层;可以用空指针表示,是查找失败到达的位置。 注

[bzoj1304] 叶子的染色

╄→尐↘猪︶ㄣ 提交于 2019-12-14 09:48:43
Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根、内部结点和叶子均可)着以黑色或白色。你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点(哪怕是这个叶子本身)。 对于每个叶结点u,定义c[u]为从根结点从U的简单路径上最后一个有色结点的颜色。给出每个c[u]的值,设计着色方案,使得着色结点的个数尽量少。 Input 第一行包含两个正整数m, n,其中n是叶子的个数,m是结点总数。结点编号为1,2,…,m,其中编号1,2,… ,n是叶子。以下n行每行一个0或1的整数(0表示黑色,1表示白色),依次为c[1],c[2],…,c[n]。以下m-1行每行两个整数a,b(1<=a < b <= m),表示结点a和b 有边相连。 Output 仅一个数,即着色结点数的最小值。 Sample Input 5 3 0 1 0 1 4 2 5 4 5 3 5 Sample Output 2 Hint M<=10000 N<=5021 题解 推荐博文 题解 P3155 【[CQOI2009]叶子的染色】 来源: https://www.cnblogs.com/hihocoder/p/12038167.html

R-tree总结

左心房为你撑大大i 提交于 2019-12-14 09:09:30
R-tree   R-tree是用来做空间数据存储的树状数据结构。R-tree是B-tree向多维空间发展的另一种形式,并且R树也是平衡树。   R树的核心思想是聚合距离相近的节点并在树结构的上一层将其表示为这些节点的最小外接矩形,这个最小外接矩形就成为上一层的一个节点。因为所有节点都在它们的最小外接矩形中,所以跟某个矩形不相交的查询就一定跟这个矩形中的所有节点都不相交。叶子节点上的每个矩形都代表一个对象,节点都是对象的聚合,并且越往上层聚合的对象就越多。   R树的主要难点在于构建一棵既能保持平衡(所有叶子节点在同一层),又能让树上的矩形既不包括太多空白区域也不过多相交(这样在搜索的时候可以处理尽量少的子树)的高效的树。 1 R-tree数据结构   通常,我们不选择去索引几何物体本身,而是采用最小限定箱 MBB(minimum bounding box) 作为不规则几何图形的 key 来构建空间索引。在二维空间中,我们称之为最小边界矩形MBR(minimum bounding retangle)。叶子节点(leaf node)则存储每个对象需要的数据,一般是一个外接矩形和指向数据的标识符(Index,Obj_ID)。如果是点数据,叶子节点只需要存储这些点本身。如果是多边形数据,一般的做法是在叶子节点中存储多边形的最小外接矩形和指向这个多边形的数据的唯一标识符。而非叶子节点

二叉树结构的建立与遍历

坚强是说给别人听的谎言 提交于 2019-12-14 07:50:24
#include <stdio.h> #include <stdlib.h> #define MAX_LEN 50 /*二叉树的二叉链表结构*/ typedef struct node { struct node *lchild; struct node *rchild; char data; }BTREE; /*栈的数组实现*/ typedef struct { int top; BTREE *a[MAX_LEN]; //结构体数组,每个元素均为一个结点 }Stack; /*队列的数组实现*/ typedef struct { BTREE *a[MAX_LEN]; //结构体数组,每个元素均为一个结点 int front; int rear; }Queue; /*为栈分配空间*/ Stack *Createstack() { Stack *p; p = (Stack *)malloc(sizeof(Stack)); p->top = -1; return p; } /*为队列分配空间*/ Queue *Createqueue() { Queue *p; p = (Queue *)malloc(sizeof(Queue)); p->front = 0; p->rear = 0; return p; } /*菜单*/ int Menu() { int x; printf("\n\n"

数据结构之树

时光怂恿深爱的人放手 提交于 2019-12-14 07:26:28
数据结构之树(含代码) 树的基本概念 子树的个数没有限制,但它们一定是互不相交的 树的结点包含一个数据元素及若干指向其子树的分支;结点拥有的子树数称为结点的度;度为0的结点称为叶结点或终端结点;度不为0的结点称为非终端结点或分支结点;除根结点之外,分支结点也称为内部结点;树的度是树内各结点的度的最大值。 结点的层次从根开始定义起;树中结点的最大层次称为树的深度或高度; 如果将树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树 双亲表示法 每个结点都有data和left,right,data是数据,存储结点的数据信息;而lef,rig是指针,存储该结点的双亲在数组中的下标;根结点没有双亲,所以指针域为-1; 二叉树 二叉树是n个结点的有限集合,该集合或者为空集,或者由一个根结点和两棵互不相交的、分别成为根结点的左子树和右子树的二叉树组成 二叉树的特点: 每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点 左子树和右子树是有顺序的,次序不能任意颠倒 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树 满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上 特点: 叶子只能出现在最下一层 非叶子结点的度一定是2 在同样深度的二叉树中,满二叉树的结点个数最多,子树最多 完全二叉树

B-树(B树)

二次信任 提交于 2019-12-14 01:37:18
,B-树就是B树 英文名字叫做B-tree,中间的短线是英文连接符,只是翻译的时候将短线翻译成了减号。 全称Balance-tree(平衡多路查找树) , 平衡 的意思是左边和右边分布均匀。 多路 的意思是相对于二叉树而言的,二叉树就是二路查找树,查找时只有两条路,而B-tree有多条路,即父节点有多个子节点。 二,B-树用途 使用B-tree结构可以 显著减少定位 记录时所经历的中间 过程 ,从而加快存取速度。这个数据结构一般用于 数据库的索引 ,综合效率较高。 三,阶的概念 对于一棵m阶B-tree,每个结点至多可以拥有m个子结点。 即遍观整棵树,子节点最多的个数是m,那么这棵树就是m阶树。 四,树的度 树的度就是树的高度,即树的层数。 下图以二叉树为例,其他类型数与此相同。 五,B-树的定义 (1)树中每个结点至多有m 棵子树(注:m指的是树的阶); (2)若根结点不是叶子结点,则至少有两棵子树(注:根节点至少有两个儿子); (3)除根结点之外的所有非叶子结点至少有p个子节点( , 为向上取整。); (4)所有的非叶子结点中 包含以下数据 :(n,A0,K1,A1,K2,…,Kn,An) 其中: Ki (i=1,2,…,n)为 关键码 ,且Ki<Ki+1(注: ki是真实数据 ,存放在线性表当中,且从左至右升序排列) Ai 为指向儿子的指针(i=0,1,…,n),且指针Ai

MySQL InnoDB结构

旧街凉风 提交于 2019-12-13 08:29:52
逻辑存储结构 Tablespace(表空间) InnoDB把数据保存在表空间内,表空间可以看作是InnoDB存储引擎逻辑结构的最高层。本质上是一个由一个或多个磁盘文件组成的虚拟文件系统,存储表和索引,还保存了回滚段、双写缓冲区等 Segment(段) 表空间的主要组织单位,常见的段有数据段、索引段、回滚段等,是构成索引、表、回滚段的基本元素。 创建一个索引(B+树)时会同时创建两个段,分别是内节点段和叶子段,内节点段用来管理(存储)B+树非叶子(页面)的数据,叶子段用来管理(存储)B+树叶子节点的数据。 extent(区/簇) 簇是构成段的基本元素,一个段由若干个簇构成。 簇是由64个连续的页组成的,每个页大小为16KB,即每个簇的大小为1MB。 Page(页) 页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB。常见的页类型有数据页(B-tree Node)、Undo页(Undo Log Page)、系统页(System Page)、事务数据页(Transaction system Page)等。 Row(行) 数据的存放形式,最多允许存放16KB/2-200,即7992行记录。 页结构 名称 描述 File Header(文件头信息) 如表空间中页的偏移值、上/下一页位置指针、页类型等 Page Header(页头信息) 如当前页记录的数量、页中空闲空间的起始地址