数据结构
文章平均质量分 95
有梦想的攻城狮
既然选择了远方,留给别人的就只能是背影
展开
-
伸展树你需要了解一下
伸展树(Splay Tree)是一种平衡二叉搜索树,它能在O(log n)内完成插入、查找和删除操作。它是丹尼尔·斯立特Daniel Sleator 和 罗伯特·恩卓·塔扬Robert Endre Tarjan 在1985年发明的。伸展树是一种自调整形式的二叉查找树,它会在每次查找之后对树进行重构,把被查找的条目搬移到离树根近一些的地方。具体来说,伸展树沿着从某个节点到树根之间的路径,通过一系列的旋转把这个节点搬移到树根去。原创 2023-12-03 17:24:10 · 887 阅读 · 0 评论 -
B+数你需要了解一下
B+树是一种树数据结构,通常用于数据库和操作系统的文件系统中。B+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。这种数据结构能够提高数据访问的速度,并且可以有效地降低磁盘I/O操作次数。在B+树中,数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。B+树的叶子结点都是相链的,因此对整棵树的遍历只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。原创 2023-11-27 23:55:02 · 909 阅读 · 19 评论 -
B树你需要了解一下
B树(B-tree)是一种自平衡的树,能够保持数据有序,常被用于数据库和文件系统的实现。B树可以看作是一般化的二叉查找树,它允许拥有多于2个子节点。与自平衡二叉查找树不同,B树为系统大块数据的读写操作进行了优化。B树减少定位记录时所经历的中间过程,从而加快存取速度。这种数据结构可以用来描述外部存储,这种数据结构常被应用在数据库和文件系统的实现上。原创 2023-11-26 23:56:34 · 2155 阅读 · 8 评论 -
二叉查找(排序)树你需要了解一下
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树,是一种重要的数据结构。若左子树不空,则左子树上所有结点的值均小于它的根结点的值。若右子树不空,则右子树上所有结点的值均大于它的根结点的值。在一般情况下,查询效率比链表结构要高。原创 2023-11-23 00:15:46 · 197 阅读 · 7 评论 -
哈夫曼树你需要了解一下
哈夫曼树(Huffman Tree)是一种特殊的二叉树,也被称为最优二叉树。在计算机科学中,它是由权值作为叶子节点构造出来的一种二叉树。哈夫曼树的特点是,对于给定的n个权值,构造出的哈夫曼树具有最小的带权路径长度(WPL)。具体来说,哈夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码。这个变长编码表是通过评估来源符号出现机率的方法得到的。出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码。这样,编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。原创 2023-11-22 21:40:10 · 767 阅读 · 1 评论 -
完全二叉树你需要了解一下
完全二叉树(Complete Binary Tree)是一种特殊的二叉树,它的定义是:如果设二叉树的深度为h,除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。完全二叉树的性质包括:深度为k的完全二叉树,节点数在2k到2k+1−1之间。若根节点编号为1,则第i个节点的编号为i。对于任意一节点i,其左儿子的编号为2i,右儿子的编号为2i+1。如果i不是根节点,它的父节点编号为i/2(向下取整)。原创 2023-11-21 22:44:05 · 1922 阅读 · 3 评论 -
满二叉树你需要了解一下
满二叉树(Full Binary Tree)是一种特殊的二叉树,其中每个节点都有两个子节点或没有子节点。换句话说,满二叉树的每个层级都是完全填满的。这种树结构具有一定的平衡性,其深度和节点数量之间存在明确的关系。在满二叉树中,如果树的深度为d,则节点的总数为2^d - 1。例如,深度为3的满二叉树将包含7个节点(2^3 - 1 = 7)。此外,满二叉树是完全二叉树的一种特例。完全二叉树是指除了最后一层外,其他层的节点都是满的,而且最后一层的节点都靠左边排列。原创 2023-11-21 21:56:09 · 149 阅读 · 1 评论 -
AVL树你需要了解一下
AVL树是一种自平衡二叉查找树,它得名于发明者G.M.Adel’son-Vel’skii和E.M.Landis。AVL树的特点是任何节点的两个子树的高度最大差别为1,因此它也被称为高度平衡树。在AVL树中,每个节点的平衡因子只有-1、0、1三种,通过旋转操作来保持树的平衡。AVL树的平衡因子定义为每个节点的左右子树的高度之差的绝对值。在AVL树中,每个节点的左子树和右子树的高度差不会超过1。因此,AVL树在插入和删除操作时可能需要通过一次或多次旋转来重新平衡树结构。原创 2023-11-21 00:46:07 · 181 阅读 · 2 评论 -
红黑树你需要了解一下
红黑树(Red Black Tree)是一种自平衡二叉查找树,也是计算机科学中用到的一种数据结构。红黑树的特点是在进行插入和删除操作时,通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。红黑树最早由Rudolf Bayer在1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees)。后来在1978年被Leo J. Guibas和Robert Sedgewick修改为现在的“红黑树”。原创 2023-11-20 01:42:15 · 537 阅读 · 2 评论 -
Thrift协议详解
Thrift协议是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。Thrift通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的跨平台高效服务,可以使用C#、C++(基于POSIX兼容系统)、Cappuccino、Cocoa、Delphi、Erlang、Go、Haskell、Java、Node.js、OCaml、Perl、PHP、Python、Ruby和Smalltalk。原创 2023-11-19 00:03:37 · 2338 阅读 · 3 评论 -
Hessian协议详解
Hessian协议是一种基于二进制的轻量级远程调用协议,用于在分布式系统中进行跨语言的通信。它使用简单的二进制格式来序列化和反序列化数据,并支持多种编程语言,如Java、C#、Python等。Hessian协议相对于其他协议的优势在于其简单性和高效性。它使用二进制进行序列化和反序列化,相对于使用XML或JSON的协议来说,Hessian的消息体更小、传输速度更快。在Java中,可以通过Hessian协议轻松地实现跨网络的方法调用。原创 2023-11-18 00:03:09 · 1629 阅读 · 0 评论 -
RMI协议详解
RMI(Remote Method Invocation,远程方法调用)是Java中的一种远程通信协议,用于实现跨网络的对象方法调用。RMI协议基于Java的分布式计算,可以让客户端程序调用远程服务器上的方法,使得分布在不同机器上的对象能够通过网络进行通信。RMI协议的实现基于Java的远程对象技术,其中远程对象需要继承java.rmi.UnicastRemoteObject类,并定义远程方法。原创 2023-11-18 00:01:35 · 2030 阅读 · 0 评论 -
ProtocolBuffers(protobuf)详解
Protocol Buffers(通常简称为protobuf)是Google公司开发的一种数据描述语言,它能够将结构化数据序列化,可用于数据存储、通信协议等方面。这种序列化格式很灵活、高效、自动化,不依赖于语言和平台并且可扩展性极强。使用protobuf时,您只需将数据结构定义一次(使用.proto文件定义),便可以使用特别生成的源代码轻松地使用不同的数据流完成对这些结构数据的读写操作,即使使用不同的语言(protobuf的跨语言支持特性)。原创 2023-11-17 00:46:32 · 2865 阅读 · 0 评论 -
Java中Deque接口方法解析
在Java中,有两种非常常用的数据结构,分别是队列和栈,而该接口的实现类可以同时实现上述的两种数据结构,该接口就是Deque,Deque接口全称Double Ended Queue,名为双端队列,是一种既可以实现栈,也可以实现队列的数据结构,Deque接口继承了Queue接口的方法原创 2023-10-24 15:29:21 · 1860 阅读 · 8 评论 -
Java中交集、并集、差集的实现
在我们的日常开发的过程中,经常会遇到一些问题需要我们进行一些集合的运算,这里我们对集合中最为常用的交集、并集、差集这几种运算进行了一个简单的总结:交集的实现 public static Set<Object> intersection(Set<Object> s1,Set<Object> s2){ Set<Object> result = new HashSet<Object>(); result.clear(); result.ad原创 2016-04-30 23:47:13 · 6451 阅读 · 0 评论