1、2.3:算法的设计应满足五个目标:正确性:算法应确切的满足应用问题的需求,这是算法设计的基本目标。健壮性:即使输入数据不合适,算法也能做出适当的处理,不会导致不可控结 高时间效率:算法的执行时间越短,时间效率越高。 果。高空间效率:算法执行时占用的存储空间越少,空间效率越高。可读性:算法的可读性有利于人们对算法的理解。 2.4:度量算法的时间效率,时间复杂度,(课本39页)。2.5:递归定义:即用一个概念本身直接或间接地定义它自己。递归定义有两个条件:至少有一条初始定义是非递归的,如1!=1. 由已知函数值逐步递推计算出未知函数值,如用(n-1)!定义n!。第二章:线性表1.1线性表:线性表是
2、由n(n=0)个类型相同的数据元素a0,a1,a2,an-1,组成的有限序列,记作: LinearList = (a0,a1,a2,an-1)其中,元素ai可以是整数、浮点数、字符、也可以是对象。n是线性表的元素个数,成为线性表长度。若n=0,则LinearList为空表。若n0,则a0没有前驱元素,an-1没有后继元素,ai(0in-1)有且仅有一个直接前驱元素ai-1和一个直接后继元素ai+1。1.2线性表的顺序存储是用一组连续的内存单元依次存放线性表的数据元素,元素在内存的物理存储次序与它们在线性表中的逻辑次序相同。线性表的数据元素数据同一种数据类型,设每个元素占用c字节,a0的存储地址
3、为Loc(a0),则ai的存储地址Loc(ai)为:Loc(ai) = Loc(a0)+ i*c 数组是顺序存储的随机存储结构,它占用一组连续的存储单元,通过下标识别元素,元素地址是下标的线性函数。1.3:顺序表的插入和删除操作要移动数据元素。平均移动次数是 属数据表长度的一半。(课本第50页)线性表的链式存储是用若干地址分散的存储单元存储数据元素,逻辑上相邻的数据元素在物理位置上不一定相邻,必须采用附加信息表示数据元素之间的顺序关系。它有两个域组成:数据域和地址域。通常成为节点。(课本第55页及56页)1.5单链表(课本56页)单链表的遍历:Node p = head; while(p!=n
4、ull) 访问p节点;p = p.next;单链表的插入和删除操作非常简便,只要改变节点间的链接关系,不需移动数据元素。单链表的插入操作:1):空表插入/头插入 2)中间插入/尾插入 if(head = null) Node q = new Node(x); head = new Node q.next = p.next; else p.next = q; Node q=new Node=0,s是串名,一对双引号括起来的字符序列s0s1s2sn-1是串值,si(i=0,1,2,n-1)为特定字符集合中的一个字符。一个串中包含的字符个数称为串的长度。长度为0的串称为空串,记作“”,而由一个或多个
5、空格字符构成的字符串称为空格串。子串:由串s中任意连续字符组成的一个子序列sub称为s的子串,s称为sub的主串。子串的序号是指该子串的第一个字符在主串中的序号。串比较:两个串可比较是否相等,也可比较大小。两个串(子串)相等的充要条件是两个串(子串)的长度相同,并且各对应位置上的字符也相同。两个串的大小由对应位置的第一个不同字符的大小决定,字符比较次序是从头开始依次向后。当两个串长度不等而对应位置的字符都相同时,较长的串定义为较“大”。第五章:数组和广义表数组是一种数据结构,数据元素具有相同的数据类型。一维数组的逻辑结构是线性表,多维数组是线性表的扩展。一维数组:一维数组采用顺序存储结构。一个
6、一维数组占用一组连续的存储单元。设数组第一个元素a0的存储地址为Loc(a0),每个元素占用c字节,则数组其他元素ai的存储地址Loc(ai)为: Loc(ai)= Loc(a0)+i*c数组通过下标识别元素,元素地址是下标的线性函数。一个下标能够唯一确定一个元素,所划给的时间是O(1)。因此数组是随机存取结构,这是数组最大的优点。多维数组的遍历:有两种次序:行主序和列主序。行主序:以行为主序,按行递增访问数组元素,访问完第i行的所有元素之后再访问第i+1行的元素,同一行上按列递增访问数组元素。a00,a01,a0(n-1), a10,a11,a1(n-1),a(m-1)0,a(m-1)1,a
7、(m-1)(n-1) 2)列主序:以列为主序,按列递增访问数组元素,访问完第j列的所有元素之后再访问第j+1列的元素,同一列上按列递增访问数组元素。 多维数组的存储结构:多维数组也是由多个一维数组组合而成,组合方式有一下两种。静态多维数组的顺序存储结构:可按行主序和列主序进行顺序存储。按行主序存储时,元素aij的地址为:Loc(aij)= Loc(a00)+(i*n+j)*c按列主序存储时,Loc(aij)= Loc(a00)+(j*m+i)*c动态多维数组的存储结构。 二维数组元素地址就是两个下标的线性函数。无论采用哪种存储结构,多维数组都是基于一维数组的,因此也只能进行赋值、取值两种存取操
8、作,不能进行插入,删除操作。第六章:树是数据元素(结点)之间具有层次关系的非线性结构。在树结构中,除根以外的结点只有一个直接前驱结点,可以有零至多个直接后继结点。根没有前驱结点。树是由n(n=0)个结点组成的有限集合(树中元素通常称为结点)。N=0的树称为空树;n0大的树T;有一个特殊的结点称为根结点,它只有后继结点,没有前驱结点。除根结点之外的其他结点分为m(m=0)个互不相交的集合T0,T1,T3.,Tm-1,其中每个集合Ti(0=im)本身又是一棵树,称为根的子树。树是递归定义的。结点是树大的基本单位,若干个结点组成一棵子树,若干棵互不相交的子树组成一棵树。树的每个结点都是该树中某一棵子
9、树的根。因此,树是由结点组成的、结点之间具有层次关系大的非线性结构。结点的前驱结点称为其父母结点,反之,结点大的后继结点称为其孩子结点。一棵树中,只有根结点没有父母结点,其他结点有且仅有一个父母结点。拥有同一个父母结点的多个结点之间称为兄弟结点。结点的祖先是指从根结点到其父母结点所经过大的所有结点。结点的后代是指该结点的所有孩子结点,以及孩子的孩子等。结点的度是结点所拥有子树的棵数。度为0的结点称为叶子结点,又叫终端结点;树中除叶子结点之外的其他结点称为分支结点,又叫非叶子结点或非终端结点。树的度是指树中各结点度的最大值。结点的层次属性反应结点处于树中的层次位置。约定根结点的层次为1,其他结点
10、的层次是其父母结点的层次加1。显然,兄弟结点的层次相同。树的高度或深度是树中结点的最大层次树。设树中x结点是y结点的父母结点,有序对(x,y)称为连接这两个结点的分支,也称为边。设(X0,X1,.,Xk-1)是由树中结点组成的一个序列,且(Xi,Xi+1)(0=0)棵互不相干的树的集合。给森林加上一个根结点就变成一棵树,将树的根节点删除就变成森林。二叉树的性质1:若根结点的层次为1,则二叉树第i层最多有2 的i-1次方(i=1)个结点。二叉树的性质2:在高度为k的二叉树中,最多有2的k次方减一个结点。二叉树的性质3:设一棵二叉树的叶子结点数为n0,2度结点数为n2,则n0=n2+1。一棵高度为
11、k的满二叉树是具有2的k次方减一个结点的二叉树。满二叉树中每一层的结点数目都达到最大值。对满二叉树的结点进行连续编号,约定根节点的序号为0,从根节点开始,自上而下,每层自左至右编号。一棵具有n个结点高度为k的二叉树,如果他的每个节点都与高度为k的满二叉树中序号为0n-1的结点一一对应,则这棵二叉树为为完全二叉树。满二叉树是完全二叉树,而完全二叉树不一定是满二叉树。完全二叉树的第1k-1层是满二叉树第k层不满,并且该层所有结点必须集中在该层左边的若干位置上。二叉树的性质4:一棵具有n个结点的完全二叉树,其高度k=log2n的绝对值+1二叉树的性质5:一棵具有n个结点的完全二叉树,对序号为i的结点
12、,有若i=0,则i为根节点,无父母结点;若i0,则i的父母结点的序号为(i-1)/2。若2i+1n,则i的左孩子结点序号为2i+1;否则i无左孩子。若2i+2n,则i的右孩子结点的序号为2i+2,否则i无右孩子。二叉树的遍历二叉树的遍历是按照一定规则和次序访问二叉树中的所有结点,并且每个结点仅被访问一次。二叉树的三种次序遍历1:先根次序;访问根节点,遍历左子树,遍历右子树。2:中根次序;遍历左子树,访问右子树,遍历右子树。3:后根次序;遍历左子树,遍历右子树,访问根节点。先根次序遍历时,最先访问根节点;后根次序遍历时,最后访问根节点;中根次序遍历时,左子树上的结点在根节点之前访问,右子树上的结
13、点在根节点之后访问。二叉树的插入和删除操作P147二叉树的层次遍历P149习题P167 610,619第七章图是由定点集合及顶点间的关系集合组成的一种数据关边系。顶点之间的关系成为边。一个图G记为G=(V,E),V是顶点A的有限集合,E是边的有限集合。即 V=A|A属于某个数据元素集合E=(A,B)|A,B属于V或E=|A,B属于V且Path(A,B)其中Path(A,B)表示从顶点A到B的一条单向通路,即Path(A,B)是有方向的。无向图中的边事没有方向,每条边用两个顶点的无序对表示。有向图中的边是有方向,每条边用两个顶点的有序对表示。完全图指图的边数达到最大值。n个顶点的完全图记为Kn。
14、无向完全图Kn的边数为n*(n-1)/2,有向完全图Kn的边数为n*(n-1)。子图:设图G=(V,E),G=(V,E),若V包含于V且E包含于E,则称图G是G的子图。若G是G的真子图。连通图:在无向图G中,若从顶点VI到Vj有路径,则称Vi和Vj是联通的。若图G中任意一对顶点Vi和Vj(Vi不等于Vj)都是联通的,则称G为连通图。非连通图的极大联通子图称为该图的联通分量。强连通图:在有向图中,若在每一对顶点Vi和Vj(Vi不等于Vj)之间都存在一条从Vi到Vj的路径,也存在一条从Vi到Vj的路径,也存在一条从Vi到Vj的路径,则称该图的强连通图。非强连通图的极大强连通子图称为该图的强连通图分
15、量。图的遍历遍历图是指从图G中任意一个顶点V出发,沿着图中的边前行,到达并访问图中的所有顶点,且每个顶点仅被访问一次。遍历图要考虑一下三个问题:指定遍历的第一个访问顶点由于一个顶点可能与多个顶点相邻,因此要在多个邻接顶点之间约定一种访问次序。由于图中可能存在回路,在访问某个顶点之后,可能沿着某条路径又回到该顶点。深度优先搜索图的深度优先搜索策略是,访问某个顶点v,接着寻找v的另一个未被访问的邻接顶点w访问,如此反复执行,走过一条较长路径到达最远顶点;若顶点v没有未被访问的其他邻接顶点,则回到前一个被访问顶点,再寻找其他访问路径。图的深度优先搜索遍历算法P188 联通的无回路的无向图,简称树。树
16、中的悬挂点又成为树叶,其他顶点称为分支点。各连通分量均为树的图称为森林,树是森林。由于树中无回路,因此树中必定无自身环也无重边(否则他有回路)若去掉树中的任意一条边,则变成森林,成为非联通图;若给树加上一条边,形成图中的一条回路,则不是树。P191生成树和生成森林:一个连通无向图的生成树是该图的一个极小联通生成子图,它包含原图中所有顶点(n个)以及足以构成一棵树的n-1条边。 一个非联通的无向图,其各连通图分量的生成图组成该图的生成森林。图的生成图或生成森林不是唯一的,从不同顶点开始、采用不同遍历可以得到不同的生成树或森林。 在生成树中,任何树中,任何两个顶点之间只有唯一的一条路径。第八章折半
17、查找算法描述 P206,P207二叉排序树及其查找:二叉排序树或者是一棵空树;或者是具有下列性质的二叉树:每个结点都有一个作为查找依据的关键字,所有结点的关键字互不相同。若一个结点的左子树不空,则左子树上所有结点的关键字均小于这个节点的关键字;每个结点的左右子树也分别为二叉排序树。在一棵二叉排序树中,查找值为value的结点,算法描述如下:从根结点开始,设p指向根结点将value与p结点的关键字进行比较,若两者相等,则查找成功;若value值较小,则在p的左子树中继续查找;若value值较大,则在p的右子树中继续查找。重复执行上一步,直到查找成功或p为空,若p为空,则查找不成功。习题 8-6
18、第九章直接插入排序算法描述:p228冒泡排序算法的描述:p232快速排序算法描述p233直接选择排序算法描述p236直接选择排序算法实现如下:Public static void selectSort(inttable) for(int i=0;table.length-1;i+) int min=I; for(int j=i+1;jtable.length;j+) if(tablejtablemin) min=j; if(min!=i) int temp=tablei; tablei=tablemin; tablemin=temp;堆排序是完全二叉树的应用,是充分利用完全二叉树特性的一种选择排序。堆定义:设n个元素的数据序列k0,k1,。kn-1,当且仅当满足下列关系k1=k2i+1且ki=k2i+1且ki=2i+2i=0,1,2,3,.n/2-1时,序列k0,k1.kn-1称为最小堆或最大堆。将最小(大)堆看成是一颗完全二叉树的层次遍历序列,则任意一个结点的关键字都小于等于(大于等于)它的孩子节点的关键字值,由此可知,根结点值最小(大)。根据二叉树的性质5,完全二叉树中的第i(0n)个结点,如果有孩子,则左孩子为第2i+1个结点,右孩子为第2i+2个结点。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1