随笔分类 - 数据结构与算法
摘要:在讨论不相交集数据结构之前,首先需要讨论等价关系。首先定义一下关系的概念:若对于每一对元素(a,b),a,bS,aRb或者为true或者为false,则称在集合S上定义关系R。如果aRb是true,那么a和b有关系。所谓的等价关系需要在关系的基础上满足下面三个性质: 1.(自反性)对于所有的aS,a
阅读全文
摘要:归并排序最坏情况下时间复杂度为O(NlogN),它所使用的比较次数几乎是最优的。同时归并排序是分治策略和递归策略的一个非常好的实例。归并排序的基本操作是合并两个已经排序的表。对于一个要排序的数组,归并算法首先将数组分为两部分,然后分别对这两部分递归调用自己,这个递归算法的递归终止条件是数组长度为一,
阅读全文
摘要:排序大致分为两类,内部排序和外排序。内部排序指要排序的数据量很小,可以将全部数据读入内存,然后在其中进行排序。外部排序指数据量很大,数据无法全部读入内存,必须在磁盘或者磁带上完成的排序。首先来研究内排序,有几种简单的排序算法如插入排序,冒泡排序,选择排序时间复杂度为O(N*N),另外有一种希尔排序(
阅读全文
摘要:利用分离连接法解决冲突需要用到链表数据结构,同一个链表中保存的数据是关键字经过hash后映射到相同hash表位置的数据,当在hash表中查找数据时,首先对关键字进行hash找到链表在hash表中的位置,然后在链表中查找数据。插入删除操作遵循相同的步骤,首先找到要操作的数据,然后在链表上进行处理。这里
阅读全文
摘要:二叉树提供了对一组数据进行各种操作的强大功能,特别是在处理有序数据时二叉查找树非常方便。例如FindMax和FindMin操作,在表数据结构中这两个操作时间复杂度为O(N),但在二叉查找树中这两个操作只需要O(logN)的时间复杂度。但在很多情况下,数据的顺序并不是应用所关心的问题。这一类应用只需要
阅读全文
摘要:除了二叉查找树之外,还有许多其他类型的树,这些树因为其独特的性质,在很多特定的领域获得了广泛的应用。这里简单介绍两种特别的树,伸展树和B树。 伸展树 伸展树是二叉查找树的扩展,是一种特殊的二叉查找树。但不同与普通的二叉平衡查找树如AVL树,伸展树没有严格的平衡条件,但是伸展树仍然可以保证其基本操作的
阅读全文
摘要:二叉查找树在最坏情况下高度可能为N-1,即插入元素时后插入的元素总比以前插入的元素大或者小。为了解决这种不平衡的情况,引入了平衡条件来限制树中节点的深度不能过深,其中最老的一种平衡树称为AVL树。这种树限制树中每个节点的左右子树的高度相差不能超过一。(另一种更严格的树限制节点的左右子树高度必须相等,
阅读全文
摘要:使二叉树成为二叉查找树的性质是,对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大于X的关键字值。这意味着,该树所有的元素以某种统一的方式排序。 二叉查找树的声明 二叉查找树是一棵特殊的二叉树,二叉查找树中节点的结构与二叉树种节点的结构相同,关键在于可以在二
阅读全文
摘要:要研究二叉查找树(binary search tree)首先要熟悉二叉树(binary tree)的概念与性质,二叉查找树是在二叉树基础上衍生出的数据结构。 二叉树 二叉树是一棵树,其中每个节点都不能有多于两个(<=2)的儿子。二叉树的一个性质是平均二叉树的深度要比N小得多。分析表明,这个平均深度为
阅读全文
摘要:线性数据结构(例如链表)在检索数据项时,最坏情况下可能需要遍历整个链表才能找到检索的数据项或者直接没有找到要检索的数据项,这样检索数据的时间复杂度为O(n),其中n为链表的大小(即链表中数据项的数目)。当需要处理的数据量很大时,这样的时间复杂度是不可接受的。而使用二叉查找树(binary searc
阅读全文

浙公网安备 33010602011771号