数据结构与算法
xiaoguobaf
这个作者很懒,什么都没留下…
展开
-
归并排序(附Java实现和分析)
归并排序(附Java实现和分析)介绍归并排序的思路,并分析时间复杂度、空间复杂度和稳定性,如有错误或者不足,欢迎交流讨论。 思路:归并即将两个有序数组归并成一个更大的有序数组。有具体来说,分两种,自底向上,先将数组中每两个排序,然后将两个含有两个元素的有序数组归并为一个含有4个的数组,然后再将两个含有4个元素的数组归并为含有8个元素的一个含有8个元素的数组,如此这般;自顶向下,即将要排序的数组分为原创 2016-03-29 19:18:17 · 663 阅读 · 1 评论 -
RBT(红黑树)插入算法
#2-3查找树为了保持平衡性,同时也为了避免AVL那样多次的判断和旋转,需要一些灵活性,故允许一个节点可以保存两个键,它有三条链接,称3节点,BST中的节点称2节点。 2-3查找树的定义:它是一棵查找树或空树,由2节点和3节点组成,2节点含有一个键和两条链接,2节点的左子树中的键均小于该节点的键,右子树中的键均大于该节点的键;3节点含有两个键和三条链接,左子树中的键小于该节点的键,中子树中的键在该原创 2016-08-03 16:26:12 · 1556 阅读 · 0 评论 -
AVL
前言由于二叉查找树(BST)没有平衡条件,插入可能使树的结构不平衡,一种比较极端的情况就是其结果看起来就是一个带有两个链接的链表一样。如按顺序向BST中插入ABCDE,结果将是: 重建图: 若采用AVL,结果是: 从层序遍历的结果来看,此时重建的AVL也是一棵满二叉树。 AVL即带有平衡条件的二叉查找树,其平衡条件是每个节点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定原创 2016-08-03 16:25:35 · 653 阅读 · 0 评论 -
二叉查找树(BST)
前言二叉查找树是一棵二叉树,如果用来构造符号表的话,那么每个节点含有一个键值对,对于每个节点,其键大于其左子树中所有节点的键,且小于其右子树中所有节点的键,如果中序遍历二叉查找树并打印其键,那么键将按从小到大的顺序打印。如果仅仅是为了描述二叉查找树,是可以不用构造符号表的,每个节点只含有键就够了,但是本着实用主义,还是构造了符号表,符号表又称字典、索引,数据库的曾删改查就是基于符号表(B-树、红黑树原创 2016-08-03 16:25:14 · 568 阅读 · 0 评论 -
二叉树遍历
1 二叉树的先序遍历先序遍历从树的头节点开始,按照先根节点,然后左子树,再右子树的顺序遍历整棵树。 先给出二叉树节点的定义 package binaryStree;/** * 二叉树节点定义 * @author 小锅巴 */public class TreeNode { public TreeNode left;//左链接 public TreeNode right;/原创 2016-08-03 16:24:55 · 455 阅读 · 0 评论 -
数据结构之栈
1、顺序存储结构与链式存储结构顺序存储结构数据存在内存地址连续的一块区域,数组便是这种存储结构的典型表现。由于是在一块的内存区域,只要确定第一个元素的内存地址,后面的元素就可以在这快区域上随机存取。下面的示意图展示了顺序存储结构在内存中的存储形式: 链式存储结构 链式存储结构区别于顺序存储结构的一点就是数据是存放内存中任意一个地址中,每个数据除了有自己的数据属性还有下一个数据内存地址的引用,原创 2016-04-14 00:16:55 · 491 阅读 · 0 评论 -
快速排序(附Java实现和分析)
总结一下快速排序,如有错误或者不足,欢迎交流讨论。 1、快速排序的思路快速排序和归并排序的思路很相似,都是采取的分治思想。快速排序通过选择一个元素,该元素称为枢轴元素或切分元素,然后将它放到一个合适的位置上,使得它前面的元素不大于它,它后面的元素不小于它,然后将枢轴元素为分界点,两边的数组也采取类似的方法,即选取枢轴元素,使得前面的元素不大于它,后面的不小于它,重复进行下去,直到数组里面只有一个元原创 2016-04-07 12:21:07 · 5627 阅读 · 0 评论 -
算法的复杂度
原贴地址http://blog.csdn.net/booirror/article/details/7707551算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个转载 2016-02-26 15:14:47 · 404 阅读 · 0 评论 -
RBT(红黑树)的删除算法
2-3树中删除最小键作为一个热身,回到2-3树来看下删除,简单起见,从删除最小键开始。如果含有最小键的节点不是2节点(3节点或4节点),那么直接删除该节点,不会破坏树的平衡性,但是如果是2节点,由于删除后变为空节点,有可能会破坏平衡性,故删除最小键的思路是沿左链接向下进行变换,确保当前节点不是2节点。 根节点根节点的左右孩子都为2节点此时将3个2节点合并为一个4节点 根节点的右孩子不为2节点左孩原创 2016-08-03 16:26:37 · 5129 阅读 · 4 评论