随笔分类 -  数据结构与算法

红黑树总结
摘要:本文主要来源于维基百科以及<算法导论> 笔者对原文一些说法语句进行了调整,增加笔者的一些理解1.红黑树概览红黑树是一种很有意思的平衡检索树。它的统计性能要好于平衡二叉树,因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。2.关于红黑树的性质红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树增加了如下的额外性质:性质1. 节点是红色或黑色。 阅读全文

posted @ 2012-07-29 20:01 as_ 阅读(4760) 评论(1) 推荐(1) 编辑

B+树与B*树小结
摘要:一、B+树1.B+树定义与特性B+树是B-树的变体,也是一种多路搜索树:其定义基本与B-树同,除了:1).非叶子结点的子树指针与关键字个数相同;2).非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间);3).为所有叶子结点增加一个链指针;4).所有关键字都在叶子结点出现为了全面 这里给出网上另外一种说法:一棵m阶的B+树和m阶的B树的差异在于: 1.有n棵子树的结点中含有n个关键字; (而B 树是n棵子树有n-1个关键字) 2.所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接。 阅读全文

posted @ 2012-07-25 20:04 as_ 阅读(9672) 评论(0) 推荐(2) 编辑

B-树小结汇总
摘要:本文很多内容均来源于网络,经过修改,因来源众多,不一一指出 当查找的文件较大,且存放在磁盘等直接存取设备中时,为了减少查找过程中对磁盘的读写次数,提高查找效率,基于直接存取设备的读写操作以"页"为单位的特征。 1972年R.Bayer和E.M.McCreight提出了一种称之为B-树的多路平衡查找树。它适合在磁盘等直接存取设备上组织动态的查找表。1、定义与特性B-树是一种平衡的多路查找树,在文件系统中有所应用。主要用作文件的索引。B-树结构特性: 一棵m阶B-树,或为空树,或为满足下列特性的m叉树:(m≥3)(1)根结点只有1个,关键字字数的范围[1,m-1],分支数量范围 阅读全文

posted @ 2012-07-25 15:37 as_ 阅读(18336) 评论(5) 推荐(3) 编辑

平衡二叉树(AVL树)小结
摘要:一、定义概览AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因子 -2或2的节点被认为是不平衡的,并需要重新平衡这个树。平衡因子可以直接存储在每个节点中,或从可能存储在节点中的子树高度计算出来。一般我们所看见的都是排序平衡二叉树二、一般性质AVL树具有以下性质:它是一棵空树或它的左右两个子树的高度差 阅读全文

posted @ 2012-07-24 16:25 as_ 阅读(13582) 评论(1) 推荐(1) 编辑

深度优先遍历与广度优先遍历
摘要:深度优先遍历1.深度优先遍历的递归定义 假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。 图的深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Dept.. 阅读全文

posted @ 2012-07-18 10:42 as_ 阅读(52716) 评论(0) 推荐(6) 编辑

排序算法汇总总结
摘要:一、插入排序直接插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,... 阅读全文

posted @ 2012-07-17 09:47 as_ 阅读(29474) 评论(5) 推荐(4) 编辑

Trie--字典树
摘要:在计算机科学中,trie,又称前缀树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作 /ˈtriː/ "tree"。但是,其他作者把它读作 /ˈtraɪ/ "try"。在图示中,键标注在节点中 阅读全文

posted @ 2012-07-14 12:20 as_ 阅读(1153) 评论(0) 推荐(0) 编辑

字典序算法
摘要:全排列的生成算法对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。字典序法按照字典序求下一个排列的算法/*例字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。注意一个全排列可看做一个字符串,字符串可有前缀、后缀。*/生成给定全排列的下一个排列所谓一个全排列的下一个排列就是这一个排列与下一个排列之间没有其他的排列。这就要求这一个排列与下一个排列有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。/*例839647521是1—9的排列。1—9的排列最前面的是123456789,最后面的是987654321,从右 阅读全文

posted @ 2012-07-12 15:04 as_ 阅读(2024) 评论(0) 推荐(0) 编辑

拓扑排序算法
摘要:/* *输入pTask为装有Task结构体的数组 *算法存在的Bug 当输入的Task的child数组中存在自己的ID 运行失败 */struct Task{ int ID; int *child; //装有其前驱Task的ID的数组 int child_num; }; void completeMission(Task *pTask,int Task_num) { int i,j; Task *pt for( i=0;i<Task_num;i++) { if((pTask+i)->child_nu... 阅读全文

posted @ 2012-07-12 10:22 as_ 阅读(736) 评论(0) 推荐(0) 编辑

导航