08 2015 档案
摘要:最短路径和最小生成树在应用很是不同的,比如:一开始修建一条地铁,然后在地铁点上有多个点,需要修建一个路程最短的地铁线,将这些地铁点连接起来,这就是最小生成树(点与点之间距离是已知的)。小强需要从A点去B点旅游,中间会经过好几个点,需要找出条最短路径到达B点。从应用上明显看出,两者的目的不同、初始化条件也是不同的。 一、Dijkstra(迪杰斯特拉)算法 Dijkstra(迪杰斯特拉)算法是典型...
阅读全文
摘要:一个连通图的生成树是一个极小的连通子图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。那么我们把构造连通网的最小代价生成树称为最小生成树。 找连通网的最小生成树,经典的有两种算法,普里姆算法和克鲁斯卡尔算法。 一、普利姆(Prim)算法 普利姆算法,图论中一种算法,可在加权连通图里搜索最小生成树。此算法搜索到的边子集所构成的树中,不但包括连通图里的所有顶点,且所有边的权值最小。 1、...
阅读全文
摘要:上一篇了解图的基本概念,包括图的分类、术语以及存储结构。本篇就是应用图的存储结构,将图进行数据抽象化,应用遍历方法,对数据进行遍历。由于图复杂的数据结构,一定保证图中所有顶点被遍历。如果只访问图的顶点而不关注边的信息,那么图的遍历十分简单,使用一个foreach语句遍历存放顶点信息的数组即可。但是,如果为了实现特定算法,就必须要根据边的信息按照一定的顺序进行遍历。图的遍历算法是求解图的连通性问题、...
阅读全文
摘要:线性表和树两类数据结构,线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系,本章所述的图结构中的元素则是“多对多”的关系。图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。一、图的定义与术语定义:...
阅读全文
摘要:哈夫曼树又称为最优二叉树,哈夫曼树的一个最主要的应用就是哈夫曼编码,本文通过简单的问题举例阐释哈夫曼编码的由来,并用哈夫曼树的方法构造哈夫曼编码,最终解决问题来更好的认识哈夫曼树的应用--哈夫曼编码。一、引子在学习中我们经常遇到将各科成绩改为优秀、良好、中等、及格和不及格。那么根据分级原理,代码表示...
阅读全文
摘要:树都可用二叉链表作为存储结构,对比各自的结点结构可以看出,以二叉链表作为媒介可以导出树和二叉树之间的一个对应关系。 ◆ 从物理结构来看,树和二叉树的二叉链表是相同的,只是对指针的逻辑解释不同而已。 ◆ 从树的二叉链表表示的定义可知,任何一棵和树对应的二叉树,其右子树一定为空。 1 树转换成二叉树 对于一般的树,可以方便地转换成一棵唯一的二叉树与之对应。将树转换成二叉树在“孩子兄弟表示...
阅读全文
摘要:二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。 一、特殊的二叉树及特点 1、斜树 所有的结点都只有左子树(左斜树),或者只有右子树(右斜树)。这就是斜树,应用较少 2、满二叉树 所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是...
阅读全文
摘要:树是一种数据结构,其中一个元素可以有两个或者多个数据元素,具有一对多的特点,用树结构来存储文件。 树的概念 结点的度:子结点的个数。例如结点1中有3个子结点,结点1的度是3. 树的度:树的度等于所有结点度中度最高的值。结点最高的度为3,树的度为3. 叶子结点:度为0的结点,即没有子结点的结点。例如:上图中3,5,6,7,9,10。 分支结点:除了叶子结点以外的...
阅读全文
摘要:上文讲解了KMP算法,这种算法在字符串匹配中应用比较少,在各种文本编辑器中的查找功能大多采用Boyer-Moore算法。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。算法讲解开始:假定字符串为"HERE IS A SIMPLE EX...
阅读全文
摘要:模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。如果T中存在一个或多个模式为P的子串,就给出该子串在T中的...
阅读全文
摘要:计算机程序离不开算法和数据结构,在数据结构算法应用中,栈和队列应用你比较广泛,因为两者在数据存放和读取方面效率比较高,本章节重点讲解两者的基本概念和实现。基本概念栈:是一种先进后出,后进先出的数据结构,本质上是线性表,只是限制仅允许在表的一段进行插入和删除工作。此端为栈顶,这是在栈中应用很关键的概念...
阅读全文
摘要:前言顺序表是用一组地址连续的存储单元来保存数据的,所以它具有随机存取的特点。即查找快速,但是做插入或删除动作是,需要移动大量元素,效率较低。 链表是线性表的链式存储结构,它相比于顺序表,在插入和删除元素时,效率要高很多。 每个数据单元有两部分组成,一个是数据域,存储数据值;另一个是指针域,指向下一个...
阅读全文
摘要:1 前言算法时间复杂度,也就是算法的时间量度,就是在计算机上执行耗时。个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。在应用中用O表示。 一个算法是由控制结构和原操作构成的,其执行的时间取决于二者的综合效果。为了便于比较同一问题的不同算法,通常把算法中基本操...
阅读全文
摘要:1 数据序号名称定义举例1数据对客观事物的符号表示,在计算机中就是能被识别的符号集合数值、图片、视频、音频等形式2数据项数据中具有独立含义,不可分割的最小数据单位,客观实体一种特征数据表示成员变量3数据元素过个相关数据项的集,一个客观实体多种实体特征的数据描述,计算机加工的进本单位类似结构体抽象的数...
阅读全文
摘要:前言顺序表是在计算机内存中以数组的形式保存的线性表,是指使用一组连续分配存储单元有序的存储数据元素的线性结构。 顺序表还有后面讲的单链表、循环链表、双链表都是链表,根本区别是在内存中存储数据的方式不同,每种方式都有优劣点,这也根据应用场景的不同,决定用什么方式存储数据。基本算法在线性表中算法操作中,...
阅读全文