小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

2012年11月20日

VC++2012编程演练数据结构《36》磁盘文件进行排序

摘要: 如何给磁盘文件排序问题描述:输入:一个最多含有n个不相同的正整数的文件,其中每个数都小于等于n,且n=10^7。输出:得到按从小到大升序排列的包含所有输入的整数的列表。条件:最多有大约1MB的内存空间可用,但磁盘空间足够。且要求运行时间越短越好。分析:一步一步地解决这个问题,创建一个工程声名如下#... 阅读全文

posted @ 2012-11-20 19:31 牛栏山1 阅读(128) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《35》多路平衡归并

摘要: 多路平衡归并一般说来,如果初始归并段有m个,那么这样的二路归并树就有élog2mù+1层,要对数据进行élog2mù遍扫描。采用k路平衡归并时,则相应的归并树有élogkmù+1层,要对数据进行élogkmù遍扫描。 做内部归并时,在k个记录中选择最小者,需要顺序比较k-1次。每趟归并u个记录需要... 阅读全文

posted @ 2012-11-20 19:26 牛栏山1 阅读(164) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《34》树形选择排序

摘要: 树形选择排序(Tree Selection Sort) 树形选择排序又称锦标赛排序(Tournament Sort),是一种按照锦标赛的思想进行选择排序的方法。首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进行两两比较,如此重复,直至选出最小的记录为止。 这个过程可用一棵有n个... 阅读全文

posted @ 2012-11-20 19:04 牛栏山1 阅读(144) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《33》希尔排序

摘要: 希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然... 阅读全文

posted @ 2012-11-20 18:49 牛栏山1 阅读(120) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《32》桶排序

摘要: 桶排序假定:输入是由一个随机过程产生的[0, 1)区间上均匀分布的实数。将区间[0, 1)划分为n个大小相等的子区间(桶),每桶大小1/n:[0, 1/n), [1/n, 2/n), [2/n, 3/n),…,[k/n, (k+1)/n ),…将n个输入元素分配到这些桶中,对桶中元素进行排序,然后... 阅读全文

posted @ 2012-11-20 18:41 牛栏山1 阅读(122) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《31》狄杰斯特拉算法

摘要: 狄杰斯特拉算法 Dijkstra(狄杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。... 阅读全文

posted @ 2012-11-20 18:28 牛栏山1 阅读(157) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《30》弗洛伊德算法

摘要: 弗洛伊德算法是基于动态规划的求解有负权图的单源最短路的一种较高效的算法。时间复杂度:O(n^3)空间复杂度:O(n^2)弗洛伊德算法采用图的带权邻接矩阵存储结构。算法基本思想 假设求顶点Vi到Vj的最短路径。弗洛伊德算法依次找从Vi到Vj,中间经过结点序号不大于0的最短路径,不大于1的最短路径,... 阅读全文

posted @ 2012-11-20 18:22 牛栏山1 阅读(133) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《29》图

摘要: 图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。 在上面两个图结构中,一个是有向图,即每条边都有方向,另一个是无向图,即每条边都没有方向。 在有向图中,通常将边称作弧... 阅读全文

posted @ 2012-11-20 18:00 牛栏山1 阅读(90) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《28》拓扑排序算法

摘要: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。什么是拓扑序列 通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,... 阅读全文

posted @ 2012-11-20 17:47 牛栏山1 阅读(88) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《26》最大堆二叉树

摘要: 最大堆是二叉堆的两种形式之一。 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆. 注意: ①堆中任一子树亦是堆。 ②以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆最大堆和最小堆是二叉堆的两种形式。 最大堆:根结点的键值是所有堆结点键... 阅读全文

posted @ 2012-11-20 17:31 牛栏山1 阅读(91) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《27》最小堆二叉树

摘要: 最大堆和最小堆是二叉堆的两种形式。 最大堆:根结点的键值是所有堆结点键值中最大者。 最小堆:根结点的键值是所有堆结点键值中最小者。 而最大-最小堆集结了最大堆和最小堆的优点,这也是其名字的由来。 最大-最小堆是最大层和最小层交替出现的二叉树,即最大层结点的儿子属于最小层,最小层结点的儿子属... 阅读全文

posted @ 2012-11-20 17:29 牛栏山1 阅读(126) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《25》线索二叉树

摘要: 线索二叉树按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列。在该序列中,除第一个结点外每个结点有且仅有一个直接前驱结点;除最后一个结点外每一个结点有且仅有一个直接后继结点。这些指向直接前驱结点和指向直接后续结点的指针被称为线索(Thread),加了线索的二叉树称为线索二叉... 阅读全文

posted @ 2012-11-20 17:09 牛栏山1 阅读(139) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《24》哈夫曼树

摘要: 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树又称为最优树. 1、路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定... 阅读全文

posted @ 2012-11-20 16:52 牛栏山1 阅读(175) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《23》二叉树排序

摘要: 在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。值得注意的是... 阅读全文

posted @ 2012-11-20 16:39 牛栏山1 阅读(141) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《22》常规排序算法

摘要: 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个... 阅读全文

posted @ 2012-11-20 15:23 牛栏山1 阅读(111) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《21》二叉排序树

摘要: 二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 步骤:若根结点的... 阅读全文

posted @ 2012-11-20 15:02 牛栏山1 阅读(111) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《20》索引文件

摘要: 索引文件由索引表和主文件两部分构成。 索引表是一张指示逻辑记录和物理记录之间对应关系的表。索引表中的每项称作索引项。索引项是按键(或逻辑记录号)顺序排列。若文件本身也是按关键字顺序排列,则称为索引顺序文件。否则,称为索引非顺序文件。(1)索引顺序文件 (Indexed Sequential F... 阅读全文

posted @ 2012-11-20 14:50 牛栏山1 阅读(114) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《19》散列文件

摘要: 散列文件是利用散列存储方式组织的文件,亦称为直接存取文件。它类似于散列表[1],即根据文件中关键字的特点,设计一个散列函数和处理冲突的方法,将记录散列到存储设备上。 与散列表不同的是,对于文件来说,磁盘上的文件记录通常是成组存放的,若干个记录组成一个存储单位,在散列文件中,这个存储单位叫做桶(B... 阅读全文

posted @ 2012-11-20 14:37 牛栏山1 阅读(190) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《18》KMP算法

摘要: KMP算法是通过分析子串,预先计算每个位置发生不匹配的时候,所需GOTO的下一个比较位置,整理出来一个next数组,然后在上面的算法中使用。Knuth-Morris-Pratt Algorithm,简称KMP算法。 一种由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pr... 阅读全文

posted @ 2012-11-20 13:58 牛栏山1 阅读(114) 评论(0) 推荐(0) 编辑

VC++2012编程演练数据结构《17》稀疏矩阵

摘要: 如果在矩阵中,多数的元素为0,称此矩阵为稀疏矩阵(sparse matrix)。由于矩阵在程序中常使用二维阵列表示,二维阵列的大小 稀疏矩阵与使用的存储器空间成正比,如果多数的元素没有数据,则会造成存储器空间的浪费,为此,必须设计稀疏矩阵的阵列储存方式,利用较少的存储器空间储存完整的矩阵数据。 ... 阅读全文

posted @ 2012-11-20 13:38 牛栏山1 阅读(113) 评论(0) 推荐(0) 编辑

导航