摘要: 【1】克鲁斯卡尔算法普里姆算法是以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树。克鲁斯卡尔算法是直接以边为目标去构建。因为权值是在边上,直接去找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环路而已。此时我们用到了图的存储结构中的边集数组结构。以下是边集数组结构的定义代码:本算法所用同普里姆算法的实例,我们直接创建图的边集数组。并对边的权值从小到大排序后如下图:【2】克鲁斯卡尔算法及详解克鲁斯卡尔算法及其详解:鉴于此算法很简单,当 i=0, i=1, i=2时执行结果可以眼观,不再赘述。直接分析重点:此算法的Find函数由边数e决定,时间复杂度为O(loge 阅读全文
posted @ 2013-12-04 16:38 kaizenly 阅读(17653) 评论(0) 推荐(0)
摘要: 【1】什么是最小生成树?对于连通的带权图(连通网)G,其生成树也是带权的。生成树T各边的权值总和称为该树的权。权最小的生成树称为G的最小生成树(Minimum SpannirngTree)。简记为MST。注意:最小是指权值最小一个连通图的生成树是一个极小的连通子图,它包含全部的顶点,但只有足以构成一棵树的n-1条边。求最小生成树有两种算法:普里姆算法和克鲁斯卡尔算法不好理解?看不懂?能通俗点不?看个实例哈:假设你是电信实施工程师,需要为一个镇的九个村庄架设通信网络做设计。村庄位置大致如下图,之间连线的数字表示村与村间的可通达直线距离。你们领导要求你必须用最小的成本完成这次任务。你说怎么办?好, 阅读全文
posted @ 2013-12-04 11:40 kaizenly 阅读(10684) 评论(0) 推荐(2)
摘要: 【1】图的基本概念(1)图是由顶点集合以及顶点间的关系集合组成的一种数据结构。 Graph = (V,E) V是顶点的又穷非空集合;E是顶点之间关系的有穷集合,也叫边集合。 (2)有向图:顶点对是有序的;无向图:顶点对是无序的。 (3)无向边:若顶点Vi到Vj之间的边没有方向,则称这条边为无向边,用无序偶对(Vi,Vj)来表示。 如果图中任意两个顶点时间的边都是无向边,则称该图为无向图: 由于是无向图,所以连接顶点A与D的边,可以表示为无序对(A,D),也可以写成(D,A) 对于如上无向图来说,G=(V,{E}) 其中顶点集合V={A,B,C,D};边集合E={(A,B),(B... 阅读全文
posted @ 2013-12-03 11:28 kaizenly 阅读(31331) 评论(0) 推荐(1)
摘要: 【1】什么是堆?堆是一种特殊的完全二叉树(关于完全二叉树可以参见随笔《树》)。堆分为两种:最大堆和最小堆最大堆只需要满足父节点大于两个子节点,而子节点之间没有要求。最小堆只需要满足父节点小于两个子节点,而子节点之间没有要求。那么,既然作为一棵完全二叉树,每层中的节点应该是从左到右填满的。如果一个节点没有左儿子,那么它一定也没有右儿子。并且在第N层中如果存在节点,肯定是由左向右依次排列,而且第N-1层必须是填满的。【2】堆的实现最小堆的实现代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using... 阅读全文
posted @ 2013-12-02 19:06 kaizenly 阅读(1388) 评论(0) 推荐(1)
摘要: 【1】赫夫曼树基本概念 别名“最优树”,是一种带权路径最短的树。 (1)路径:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。 (2)路径长度:路径上的分支数目。 (3)树的路径长度:从树根到一每结点的路径长度之和。 (4)结点的带权路径长度:从该结点到树根之间的路径长度与结点上权值的乘积。 (5)树的带权路径长度:树中所有叶子结点的带权路径长度之和。记作:WPL 【2】赫夫曼树的构造 (1)由给定的n个权值{W1,W2,…,Wn}构成n棵二叉树的集合F={T1,T2,…,Tn} 其中每棵二叉树Ti中只有一个带权为Wi的根节点,其左右子树均空。 (2)在F中选取根结点的权值最小和 阅读全文
posted @ 2013-12-02 14:29 kaizenly 阅读(6655) 评论(0) 推荐(0)
摘要: 【1】队列的概念 (1)队列(Queue)是运算受到限制的一种线性表。 只允许在表的一端进行插入,而在另一端进行删除元素的线性表。 队尾(rear)是允许插入的一端。队头(front)是允许删除的一端。 (2)空队列是不含元素的空表。 (3)队列是先进先出的线性表。 【2】循环队列 关于循环队列请看 阅读全文
posted @ 2013-12-01 19:04 kaizenly 阅读(603) 评论(0) 推荐(0)
摘要: 【1】栈的基本概念 (1)栈是限定仅在表尾进行插入和删除操作的线性表。所谓的表尾是指栈顶,而不是栈底。 (2)栈是后进先出的线性表。 (3)把允许插入和删除的一端称为栈顶,另一端称为栈底。 (4)不含任何元素的栈称为空栈。 判定条件为top等于-1。 (5)栈是一个线性表,栈元素具有线性关系。 【2 阅读全文
posted @ 2013-12-01 16:06 kaizenly 阅读(1444) 评论(0) 推荐(0)
摘要: 【1】线性表的链式存储 线性表的顺序存储结构特点: 逻辑关系上相邻的两个元素在物理位置上也相邻; 可以随机存取任一元素,它的存储位置可用一个简单直观的公式表示。 然而,从另一个角度来看,这个优点也表明了这种存储结构的弱点: 在做插入或删除操作时,需要移动大量的元素。 线性表的链式存储不要求逻辑上相邻 阅读全文
posted @ 2013-12-01 10:28 kaizenly 阅读(518) 评论(0) 推荐(0)
摘要: 【1】树的基本概念 1: 树属于一种非线性数据结构 2: 树以分支关系描述数据元素之间的层次结构 3: 树(tree)是 n(n≥0) 个结点的有限集 4: 树的结构中,有且仅有一个特殊的结点,称为树的根结点(root) 5: 树中存在唯一的称为根的数据元素 6: 树中各子树是互不相交的集合 7: 阅读全文
posted @ 2013-11-29 12:08 kaizenly 阅读(1596) 评论(0) 推荐(0)
摘要: 【1】线性结构在数据元素的非空有限集中,线性结构特点:a. 存在唯一的一个被称作“第一个”的数据元素b. 存在唯一的一个被称作“最后一个”的数据元素c. 除第一个之外,集合中的每个数据元素均只有一个前驱d. 除最后一个之外,集合中每个数据元素均只有一个后继【2】线性表线性表是最常用且简单的一种数据结构。一个线性表是n个数据元素的有限序列。线性表中的数据元素可以是各种各样的,但同一线性表中的元素必定具有相同特性。在复杂的线性表中,一个数据元素可以由若干个数据项组成。这种情况下,常把数据元素称为记录。而含大量记录的线性表称为文件。【3】顺序表线性表的顺序表示指用一组地址连续的存储单元依次存储线性表 阅读全文
posted @ 2013-11-26 14:43 kaizenly 阅读(3168) 评论(0) 推荐(0)
摘要: 【1】模板类的声明与定义最近在编写模板类时发现一个问题:当把模板类分开为 .h声明文件 和 .cpp实现文件时,在模板类的main文件使用模板功能时,编译结果完全正确,却无法链接成功。注意:编译各个文件均完全无误,当链接成执行程序时候报错,报错信息为无法链接到被调用函数!但是,如果把main放到.cpp文件中就没有任何问题,或者把 .cpp 和 .h 文件放在一起也没有问题。于是摸索着学习,解决问题有两种方式:1. 在调用模板类时引入其.cpp实现文件2. 将模板类的.cpp实现文件全部写进.h中【2】为什么?请参见文章《为什么C++编译器不能支持对模板的分离式编译》Good Good Stu 阅读全文
posted @ 2013-11-26 11:52 kaizenly 阅读(1413) 评论(0) 推荐(0)
摘要: 【1】静态链接 静态链接是指由链接器在链接时将库的内容加入到可执行程序中的做法。 链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。 函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。 在使用静态库的情况下,在编译链接可执行文件时,链接器从库 阅读全文
posted @ 2013-11-22 15:04 kaizenly 阅读(856) 评论(0) 推荐(0)
摘要: 声明一点:Win7系统,安装的是VS2010 dumpbin.exe位于C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin目录下。 初次运行时报错,错误为无法连接mspdb100.dll。 拷贝目录C:\Program Files ( 阅读全文
posted @ 2013-11-21 19:53 kaizenly 阅读(520) 评论(0) 推荐(0)
摘要: 【1】客户为什么不应直接控制组件的生命期? 假设一个组件A正在使用另一个组件B,可想组件A(客户)代码中肯定有若干个指向组件B接口的指针。 那么这种情况下,当使用完一个接口而仍然在使用另一个接口时,是不能将组件释放掉的。 而且很难知道两个接口指针是否指向同一组件,因此决定何时可以安全的释放一个组件将 阅读全文
posted @ 2013-11-21 19:16 kaizenly 阅读(2692) 评论(0) 推荐(0)
摘要: 【1】IUnknown接口 客户同组件交互都是通过接口完成的。 在客户查询组件的其它接口时,也是通过接口完成的。而那个接口就是IUnknown。 IUnknown接口的定义包含在Win32SDK中的UNKNEN.h头文件中。引用如下: 【2】COM接口内存结构 所有的COM接口都继承自IUnknow 阅读全文
posted @ 2013-11-21 14:45 kaizenly 阅读(5486) 评论(0) 推荐(0)
摘要: 【1】接口 DLL的接口是它所输出的那些函数。 C++类的接口是该类的一个成员函数集。 COM接口是包含一个函数指针数组的内存结构。 每一个数组元素包含的是一个由组件所实现的函数的地址。 在COM中接口就是一切。对于客户而言,一个组件就是一个接口集。 客户只能通过接口才能同COM组件打交道。 对程序 阅读全文
posted @ 2013-11-21 11:09 kaizenly 阅读(3082) 评论(0) 推荐(0)
摘要: 【1】组件产生的背景 一个应用程序通常是由单个二进制文件组成的。 当应用程序版本发布后一般不会发生任何变化,对于操作系统、硬件以及客户需求的改变都必须要等到修复源代码后且整个应用程序被重新编译才可处理。 很显然这种状况极不理想。矛盾总是推动事物向前发展的源动力。 当人们认识到应用程序在发行之后不应该 阅读全文
posted @ 2013-11-20 19:29 kaizenly 阅读(7635) 评论(0) 推荐(0)
摘要: 所谓COM,英文为Componet Object Model,中文为组件对象模型(其实这种解释只有在考试卷上才具有一点实际意义)。 【1】为什么需要COM? COM是为了解决OLE问题而产生的。COM与OLE的关系类似于微积分与物理的问题。 实际上牛顿当年就是为了解决物理中的机械及动力学问题而发明微 阅读全文
posted @ 2013-11-20 15:24 kaizenly 阅读(1315) 评论(0) 推荐(0)
摘要: 【1】计算机系统概述冯诺依曼计算机系统组成计算机五大构成计算机软件系统高级语言程序转换过程计算机系统组成典型的计算机主板组成框图微机工作示意图存储器工作过程【2】计算机内存容量计算常识计算机系统对内存的识别是以Byte(字节)为单位,每个字节由8位二进制数组成,即8bit(比特,也称“位”)1KB=1024B=1024字节1MB=1024KB=1048576字节1GB=1024MB=1073741824字节1TB=1024GB=1099511627776字节1PB=1024TB=1125899906842624字节1EB=1024PB=1152921504606846976字节1ZB=1024 阅读全文
posted @ 2013-09-06 23:50 kaizenly 阅读(1795) 评论(0) 推荐(0)
摘要: 【1】计算机启动过程详解 对于使用电脑用户来说,打开电源启动电脑几乎是每天必做的事情,但计算机在显示这些启动画面的时候都在做什么呢?大多数用户都未必清楚。 下面就向大家介绍一下从打开电源到出现Windows桌面的蓝天白云,计算机到底都背后干了哪些工作。 电脑的启动过程中有一个非常完善的硬件自检机制。 阅读全文
posted @ 2013-09-06 18:11 kaizenly 阅读(11952) 评论(0) 推荐(4)
打赏