数据结构和算法
文章平均质量分 72
木子小新
这个作者很懒,什么都没留下…
展开
-
一步一步写二叉查找树
一步一步写二叉查找树 作者:C小加 更新时间:2012-8-9 二叉查找树(BST)是二叉树的一个重要的应用,它在二叉树的基础上加上了这样的一个性质:对于树中的每一个节点来说,如果有左儿子的话,它的左儿子的值一定小于它本身的值,如果有右儿子的话,它的右儿子的值一定大于它本身的值。 二叉查找树的操作一般有插入、删除和查找,这几个操作的平均时间复杂度都为O(logn),插入和查找操原创 2015-09-24 17:17:10 · 396 阅读 · 0 评论 -
基本数据结构:二叉树(binary tree)
基本数据结构:二叉树(binary tree) 作者:C小加 更新时间:2012-8-6 二叉树首先是一棵树,每个节点都不能有多于两个的儿子,也就是树的度不能超过2。二叉树的两个儿子分别称为“左儿子”和“右儿子”,次序不能颠倒。如图1是一个简单的二叉树。 二叉树的种类 一种是满二叉树,除了最后一层的叶子节点外,每一层的节点都必须有两个儿子节点。如图2是一原创 2015-09-24 17:16:14 · 482 阅读 · 0 评论 -
基本数据结构:树(tree)
基本数据结构:树(tree) 作者:C小加 更新时间:2012-8-3 无论是链表,栈还是队列,它们都是线性结构的,每个节点的左边最多一个节点,右边也最多一个节点,对于大量的输入数据,线性表的访问时间太慢,不宜使用。这里我要说一种非线性的数据结构,其大部分操作的运行时间平均为O(logn)。 我们涉及到的这种数据结构叫做树。在计算机科学中,树是非常有用的抽象概念。我们形象的去描述原创 2015-09-24 17:15:12 · 554 阅读 · 0 评论 -
移位乘除法
移位实现的乘除法比直接乘除的效率高很多。 用移位实现乘除法运算 a=a*4; b=b/4; 可以改为: a=a b=b>>2; 说明: 除2 = 右移1位 乘2 = 左移1位 除4 = 右移2位 乘4 = 左移2位 除8 = 右移3位 乘8 = 左移3位 ... ... 通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。 大部分的C编译器,用原创 2015-09-20 21:19:52 · 736 阅读 · 0 评论 -
阶乘因式分解:求阶乘后某因子个数
给定两个数m,n 求m!分解质因数后因子n的个数。 这道题涉及到了大数问题,如果相乘直接求的话会超出数据类型的范围。 下面给出一种效率比较高的算法,我们一步一步来。 m!=1*2*3*……*(m-2)*(m-1)*m 可以表示成所有和n倍数有关的乘积再乘以其他和n没有关系的 =(n*2n*3n*......*kn)*ohter other是不含n因子的数的乘积 因为原创 2015-09-20 21:19:43 · 1444 阅读 · 0 评论 -
KMP算法中关于next数组的探究
从《严书》上看到了KMP算法,看了一遍没懂,但觉得挺神奇的,就花费了几天时间深入的理解。 算法的原理其实不难,难的就是那个巧妙的next数组,这个next数组很吸引我,我的大部分时间也都是花费在这个数组上面的。这个next数组是KMP里面一个很关键的地方,对于在数据结构书上看过一遍整个算法流程的人,能够把next数组搞明白,整个KMP算法的整体思想就差不多理解了。然后在一些细节上面深入思考一下,原创 2015-09-20 21:21:13 · 346 阅读 · 0 评论 -
基本数据结构:栈(stack)
基本数据结构:栈(stack) 作者:C小加 更新时间:2012-8-1 栈(stack)是限制插入和删除只能在一个位置上进行的线性表,该位置在表的末端,叫做栈顶。添加元素只能在尾节点后添加,删除元素只能删除尾节点,查看节点也只能查看尾节点。添加、删除、查看依次为入栈(push)、出栈(pop)、栈顶节点(top)。形象的说,栈是一个先进后出(LIFO)表,先进去的节点要等到后边进去的原创 2015-09-22 18:04:00 · 287 阅读 · 0 评论 -
基本数据结构:链表(list)
基本数据结构:链表(list) 作者:C小加 更新时间:2012-7-31 谈到链表之前,先说一下线性表。线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表有两种存储方式,一种是顺序存储结构,另一种是链式存储结构。 顺序存储结构就是两个相邻的元素在内存中也是相邻原创 2015-09-22 18:02:54 · 426 阅读 · 0 评论 -
一步一步写平衡二叉树(AVL树)
一步一步写平衡二叉树(AVL树) 作者:C小加 更新时间:2012-8-20 平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删原创 2015-09-24 17:17:54 · 290 阅读 · 0 评论