算法
FollowYourHeart2015
所思,所想……
展开
-
二叉树
二叉树二叉树定义满二叉树完全二叉树 二叉树定义 二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这棵树就是一棵二叉树。 满二叉树 二叉树中还有连两种特殊的二叉树叫做满二叉树和完全二叉树。如果二叉树中每个内部结...转载 2018-12-19 14:56:59 · 252 阅读 · 0 评论 -
B树、B+树
针对大量的数据存储,用二叉树还是B树? 在前一节我们有谈过二叉树,其中查询效率最高的为平衡二叉树,既然如此,用它作为数据库存储引擎是否最合适呢?答案是否定的。原因如下: 对于大量的存储数据而言,平衡二叉树的树高会很大,很明显的一个缺点,就是树越高,查询效率越低(拿一个树高为3和树高为1000的两棵树对比,答案显而易见); 针对平衡二叉树而言,逻辑上相邻的节点(比如父子节点),物理上不一定相邻,这...原创 2018-12-26 19:52:31 · 3339 阅读 · 0 评论 -
快排-java实现
快排是一种高效的排序方式,时间复杂度为n*log(n),一次递归需要比较n次,递归的深度为log(n),最坏的情况下,时间复杂度为(1/2)*n*(n-1),已排序的数组,每次比较的次数为(n-1)+(n-2)+……+1 代码实现如下: package com.syj.test.sort; import java.util.Arrays; import java.util.HashMap; /...原创 2018-12-26 20:17:36 · 2196 阅读 · 1 评论 -
二叉树前序、中序、后续、广度优先遍历
二叉树遍历 二叉树的遍历之前也看过,但好记性不如烂笔头,记录下吧 二叉树定义: 二叉树遍历: 有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要...原创 2018-12-25 17:55:54 · 355 阅读 · 0 评论 -
链表逆序、逆转
链表逆序、逆转 链表分为单链表、双链表,此次讨论单链表的情况。之前有思考链表如何逆转,直到看了HashMap 1.7的resize操作,才发现原来逆转有这样简洁的写法(1.8虽然没有逆转,但实现也很经典,感兴趣可以自己研究)。特此记录分享下: 要实现的效果如下: 节点定义 package com.syj.test.linkedtest; import lombok.Data; /** * ...原创 2018-12-25 18:27:25 · 261 阅读 · 0 评论