数据结构与算法d期终复习_第1页
数据结构与算法d期终复习_第2页
数据结构与算法d期终复习_第3页
数据结构与算法d期终复习_第4页
数据结构与算法d期终复习_第5页
已阅读5页,还剩166页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 D.S.复习提纲复习提纲 第第1章:章: 数据,数据结构,基本类型,抽象数据类型,数据,数据结构,基本类型,抽象数据类型,Java语言的面向对象语言的面向对象编程、编程、递归的概念与实现递归的概念与实现 。 主要能用递归思想写出算法主要能用递归思想写出算法 例子:例子: ppt-递归例递归例1 求求n! 作业作业- 例例2 求数组中的最大值求数组中的最大值 例例3 求数组元素的平均值求数组元素的平均值 例例2,例例3如果用链表来实现呢?如果用链表来实现呢? 复习例题复习例题-例例4 统计二叉树中的叶结点个数统计二叉树中的叶结点个数 例例5 交换每个结点的左子女和右子女交换每个结点的左子女和右

2、子女 例例1. 求求n!factorial function f(n)=n! 1 n1 (recursive component) /递归部分递归部分 f(n)f(5)=5*f(4)=5*4f( 3)=5*4*3f(2)=5*4*3*2f(1)=120 static long factorial (int n) if ( n a n-1?temp:a n-1; int max(int a,int n) if(n = = 1) return a0;int m = max(a,n-1);if( m an-1 )return m;else return an-1;例例2. 求数组中的最大值求数组中的

3、最大值如果用链表来实现表:如果用链表来实现表: 求链表中的最大值求链表中的最大值 int GetMaxInt( ListNode f ) if( f.link = = NULL ) return f .data ; else int i = GetMaxInt( f.link ); if ( i f .data ) return i ; else return f .data ; 或或 else return ( f . data) ( GetMaxInt( f . link ) ) ? f . data : GetMaxInt( f . link );例例3 . 求数组元素的平均值求数组元素

4、的平均值float average( int a,int n) if(n = = 1) return a0;else return (average(a,n-1)*(n-1)+an-1)/n; 如果用链表:如果用链表: float Average( ListNode f, int n ) if( f.link = = NULL ) return f.data; else return ( Average ( f.link, n-1 ) * ( n-1 ) + f.data ) / n;例例4. 统计叶子结点个数统计叶子结点个数int leafNum ( BinTreeNode * root )

5、 if ( root = = NULL ) return 0 ; if ( root-leafchild = = NULL & root-rightchild = = NULL ) return 1; else return leafNum( root- leftchild ) + leafNum ( root- rightchild ) ; 例例5. 交换左右子树交换左右子树void Swapchild ( BinTreeNode * p ) if ( p = = NULL ) return ; BinTreeNode * temp = p - left ; p -left = p - ri

6、ght ; p - right = temp; Swapchild ( p -left ); Swapchild (p -right );第第2章章 算法分析算法分析 最佳、最差和平均情况下的复杂度差异最佳、最差和平均情况下的复杂度差异; 大大O、和和 符号符号 1)分析某个语句的执行次数(频度)分析某个语句的执行次数(频度)2)分析某个程序段执行的时间复杂度(用大)分析某个程序段执行的时间复杂度(用大O表示,要求写出推导过程)表示,要求写出推导过程) ppt:-对排序算法与查找算法的分析对排序算法与查找算法的分析 例例1-for (int i = 1; i = n; i+) for (int

7、 j = 1; j=n; j+) cij = 0.0; for ( int k = 1; k = n; k+) cij = cij+aik*bkj; 次数为次数为: n*n*n第第2章章 算法分析算法分析例例2. x = 0; y = 0; for (int i = 1; i = n; i+) for (int j = 1; j = i; j+) for (int k = 1; k 0) if(x100) x -= 10; y-; else x+; 1100次次 第第3章章 表、表、栈和队列栈和队列 表、栈和队列的(基本概念,顺序存储结构,链式存储结构,应用),表、栈和队列的(基本概念,顺序存

8、储结构,链式存储结构,应用), 表:表: 逻辑逻辑-(e1, e2, .en) 物理物理-数组实现数组实现 链表实现链表实现-单链表单链表 循环链表循环链表 双向链表双向链表 cursor 表头结点表头结点用链表实现用链表实现 操作操作-查找、插入、删除等查找、插入、删除等 ppt-多项式相加多项式相加 约瑟夫问题约瑟夫问题 双链表的插入、删除双链表的插入、删除 例题例题-逆转链表等题逆转链表等题第第3章章 表表 例例1. 逆转链表(假设不带表头结点)逆转链表(假设不带表头结点) public void inverse( ListNode f ) if ( f = = NULL ) retur

9、n; ListNode p = f . link ; pr = NULL; while ( p ! = NULL ) f . link = pr ; pr = f ; f = p ; p = p . link ; f . link = pr ; 第第3章章例例2. 设有如下结构的循环链表和可利用空间表设有如下结构的循环链表和可利用空间表 data link L a0 a1 . an-1 Avail 请在常数时间内实现将请在常数时间内实现将L链表中的所有结点归还到可利用空间表链表中的所有结点归还到可利用空间表 ListNode p = L.link; L.link = Avail; Avail

10、= p; 栈、队列栈、队列 定义定义-栈的定义,栈的定义, 队列的定义队列的定义 机内实现机内实现-数组数组 (循环队列)(循环队列) 单链表单链表 应用应用 栈栈-对表达式求值。中缀对表达式求值。中缀-后缀后缀-对后缀表达式求值对后缀表达式求值 递归函数的实现。递归函数的实现。 PPT:第:第4章中用非递归实现中序章中用非递归实现中序,后序遍历后序遍历(在第在第4章中讲章中讲) 队列队列-循环队列的补充题:已知队尾元素的位置与元素的个数,循环队列的补充题:已知队尾元素的位置与元素的个数, 求队头元素的位置。求队头元素的位置。 中缀到后缀:中缀到后缀: (a+b)*(c-d)/2*e)- ab

11、+cd-2/e* 用了什么栈?用了什么栈? 对后缀表达式求值:对后缀表达式求值: 用了什么栈用了什么栈 例例2. 队列队列-循环队列的补充题循环队列的补充题 已知队尾元素的位置与元素的个数,已知队尾元素的位置与元素的个数, 求队头元素的位置。求队头元素的位置。 先用实例来分析,然后归结到一般情况。先用实例来分析,然后归结到一般情况。 .frontrear情况一情况一: front=rear-length+1.rearfront情况二情况二: front=rear-length+1+m合并合并: front=(rear-length+1+m)%mfront特殊矩阵的压缩存储特殊矩阵的压缩存储 A

12、rrays and Matrix1D-Array1. One-dimensional array 1D-array is a limited sequence composed of n (n 0) elements which are of the same data type. For example: Location of the element Loc(ai)=Loc(a0)+i 35 27 49 18 60 54 77 83 41 02a 0 1 2 3 4 5 6 7 8 9Size-1i2D-Array Two-dimensional arrays are composed o

13、f n rows and m columns.a00 a01 a02a0 m-1 a10 a11 a12a1 m-1a20 a21 a22a2 m-1.an-10 an-11an-12.an-1 m-1 Anm=2D-ArrayThere are three ways to implement a 2D array 1) mapping the 2D-array to a 1D-arraya00 a01a0 m-1a10a11 .an-1 m-1a00 a01 a02a0 m-1 a10 a11 a12a1 m-1a20 a21 a22a2 m-1.an-10 an-11an-12.an-1

14、m-1 Row major order2D-Array Location mapping: a) row-major order Loc(aij)=Loc(a00)+i*m+j*l b) column-major order Loc(aij)=Loc(a00)+j*n+i*l2D-Array An 3D-Array: int am1m2m3 Location mapping Loc(aijk)=Loc(a000)+i*m2*m3+j*m3+kSpecial MatrixA square matrix has the same number of rows and columns. Some s

15、pecial forms of square matrix that arise frequently are: Diagonal. M(i,j)=0 for i!=j; Tridiagonal. M(i,j)=0 for|i-j|1; Lower triangular. M(i,j)=0 for ij; Symmetric.M(i,j)=M(j,i);Special MatrixFor example: 2 0 0 0 2 1 0 0 2 0 0 0 0 1 0 0 3 1 3 0 5 1 0 0 0 0 4 0 0 5 2 7 0 3 1 0 0 0 0 6 0 0 9 0 4 2 7 0

16、(a)Diagonal (b) Tridiagonal Lower Triangular 2 1 3 0 2 4 6 0 0 1 3 8 4 1 9 5 0 0 1 6 6 9 4 7 0 0 0 0 0 5 7 0(d)Upper Triangular (e)SymmetricSpecial Matrix1)Lower Triangular a11a21 a22a31 a32 a33an1 an2 annLocation mapping in row-major order: Loc(a(i,j)=Loc(a(1,1)+(1+2+3+i-1)+(j-1)*l =Loc(a(1,1)+(i*(

17、i-1)/2+j-1)*lSpecial Matrix2)Upper Triangular a11 a12 a1n a22a2n . annK=1i-1Location mapping in row-major order: Loc(a(i,j)=Loc(a(1,1)+ (n-k+1)+j-i*lSpecial Matrix3) Tridiagonal a11 a12 a21 a22 a23 a32 a33 a34 an,n-1 an,nLocation mapping in row-major order: Loc(a(i,j)=Loc(a(1,1)+(i-1)*3-1+(j-i+1)*lS

18、parse Matrices1.Definition: An m*n matrix is said to be sparse if “many” of its elements are zero. number of zero elementsnumber of non-zero elementsSparse Matrices An example of sparse matrix:0 0 0 2 0 0 0 6 0 0 7 00 0 0 9 0 0 0 4 5 0 0 0Sparse Matrices 2.Array representation The nonzero entries of

19、 an sparse matrix may be mapped into a 1D array in row major order. The structure of each element is: row col value Sparse Matrices For example : 1 4 2 2 2 6 2 5 7 3 4 9 4 2 4 4 3 5row col valuea:MaxTerms-10120 0 0 2 0 0 0 6 0 0 7 00 0 0 9 0 0 0 4 5 0 0 0 Sparse Matrices3. Linked Representation 例子:例

20、子: 四行四行 0 0 11 0 0 12 0 0 0 0 0 -4 0 0 0 0 0 0 0 0 五五 列列F 4 5 3TTTTTheadnodeH0 H1 H2 H3 H4 TTTTH0H1H2H3F 0 211F 1 012F 2 1-4习题:习题: 设有一个设有一个n*n的对称矩阵的对称矩阵A,如下图,如下图(a)所示。为了节约存储,可以所示。为了节约存储,可以只存对角线及对角线以上的元素,或者只存对角线或对角线以下只存对角线及对角线以上的元素,或者只存对角线或对角线以下的元素。前者称为上三角矩阵,后者称为下三角矩阵。我们把它的元素。前者称为上三角矩阵,后者称为下三角矩阵。我们把它

21、们按行存放于一个一维数组们按行存放于一个一维数组B中,如图中,如图(b)和图和图(c)所示。并称之为所示。并称之为对称矩阵对称矩阵A的压缩存储方式。试问:的压缩存储方式。试问: 1)存放对称矩阵)存放对称矩阵A上三角部分或下三角部分的一维数组上三角部分或下三角部分的一维数组B有多少元有多少元素?素? 2)若在一维数组)若在一维数组B中从中从0号位置开始存放,则如图号位置开始存放,则如图(a)所示的对称矩所示的对称矩阵中的任一元素阵中的任一元素aij在只存上三角部分的情形下在只存上三角部分的情形下(图图(b)应存于一维应存于一维数组的什么下标位置?给出计算公式。数组的什么下标位置?给出计算公式。

22、 3)若在一维数组)若在一维数组B中从中从0号位置开始存放,则如图号位置开始存放,则如图(a)所示的对称矩所示的对称矩阵中的任一元素阵中的任一元素aij在只存下三角部分的情况下在只存下三角部分的情况下*(图图(c)应存于一维应存于一维数组的什么下标位置?给出计算公式。数组的什么下标位置?给出计算公式。 a00 a01 a0 n-1 a00 a01 a0n-1 a00 a10 a11 a1 n-1 a11 a1n-1 a10a11 . . an-10 an-11 an-1n-1 an-1n-1 an-10 an-11 an-1n-1 (a) (b) (c)答案:答案: 1) 1+2+3+n =

23、*(1+n)*n 2) loc(Ai,j ) = loc(B0) + ( n+n-1+.+n-i+2 + j-i ) t = *(2*n-i+1)*i + j-i ij 3) loc(Ai,j = loc(B0) + (1+2+3+.+i-1+j-1) t = *i*(i+1) + j i=j t = *j*(j+1) + i ij 对角线元素的地址:对角线元素的地址:t = i*(i+3)/2t = *(2*n-i+2)*(i-1)+j-it = *(2*n-j+2)*(j-1)+j-it = *i*(i-1)+j-1t = *j*(j-1)+i-1V1V2V3V4A(i,j)=0 1 1

24、11 0 1 11 1 0 01 1 0 0V1V2V3V46871012A(i,j)=0 8 12 68 0 7 1012 7 0 6 10 0第第4章章 树树 1.二叉树的定义、性质二叉树的定义、性质 2.满二叉树与完全二叉树的概念满二叉树与完全二叉树的概念 3.二叉树的机内存储:二叉树的机内存储: 数组表示(完全二叉树)、左数组表示(完全二叉树)、左-右拉链表示、右拉链表示、cursor 递归递归 4.先序、中序、后序遍历先序、中序、后序遍历 非递归非递归 层次遍历层次遍历-用到队列用到队列例例1. 第第4章中用非递归实现中序章中用非递归实现中序,后序遍历后序遍历Inorder, Pos

25、torder non-recursive algorithm Inorder non-recursive algorithm ABCDEFIHGroottemplate void InOrder(BinaryNode* t) if(t) InOrder(tLeft); visit(t); InOrder(tRight); Inorder non-recursive algorithm void Inorder(BinaryNode * t) StackBinaryNode* s(10); BinaryNode * p = t; for ( ; ; ) 1) while(p!=NULL) s.p

26、ush(p); p = p-Left; 2) if (!s.IsEmpty( ) p = s.pop( ); cout element; p = p-Right; else return; 5. 利用先序、中序可唯一构造一棵树利用先序、中序可唯一构造一棵树 先序:先序:ABDCEGFHI 中序:中序:DBAEGCHFI 利用中序、后序可唯一构造一棵树利用中序、后序可唯一构造一棵树 手工画出一棵树手工画出一棵树 利用算法生成一棵树利用算法生成一棵树Create BinaryTree recursive algorithm preorder:ABDCEGFHI inorder: DBAEGCHFI

27、 ABCDEFIHG *6. 利用广义表表示来构造一棵树利用广义表表示来构造一棵树 7. 应用应用 树的机内表示:树的机内表示: 广义表表示、双亲表示、左子女广义表表示、双亲表示、左子女-右兄弟表示右兄弟表示 1) Take a tree as a binary treeabcdefghijfirstchild data nextsiblingabcdefghij树的存储方式:三种树的存储方式:三种广义表表示:广义表表示:a(b(f,g),c,d(h,i,j),e)双亲表示法双亲表示法左子女左子女右兄弟表示法右兄弟表示法 class TreeNode: T data; TreeNode *fi

28、rstchild, *nextsibling; class Tree: TreeNode * root, *current; 树树-二叉树的转换二叉树的转换 Forest Binary tree Forest Binary tree A F H B C D G I J E K 每棵树转为二叉树每棵树转为二叉树 A F H B G I C K J D E 把每棵二叉树根用右链相连把每棵二叉树根用右链相连 A B F C G H D I E R J Binary tree Forest A B F C G H D I E R J树与森林的遍历树与森林的遍历 树的遍历:深度优先遍历,广度优先遍历树的

29、遍历:深度优先遍历,广度优先遍历深度优先遍历深度优先遍历 先序次序遍历(先序)先序次序遍历(先序) 访问树的根访问树的根 按先序遍历根的第一棵子树,第二棵子树,按先序遍历根的第一棵子树,第二棵子树, 等。等。 后序次序遍历(后序)后序次序遍历(后序) 按后序遍历根的第一棵子树,第二棵子树,按后序遍历根的第一棵子树,第二棵子树,等等 访问树的根。访问树的根。 A 先根:先根:ABEFCGKLDHIJM与与 B C D 对应的二叉树的先序一致对应的二叉树的先序一致 E F G H I J 后根:后根:EFBKLGCHIMJDA与与 对应的二叉树的中序一致对应的二叉树的中序一致 K L M 广度优先

30、遍历广度优先遍历 A B C D E F G H I J K L M 分层访问:分层访问:ABCDEFGHIJKLM 森林的遍历森林的遍历 深度优先遍历深度优先遍历 * 先根次序遍历先根次序遍历 访问访问F的第一棵树的根的第一棵树的根 按先根遍历第一棵树的子树森林按先根遍历第一棵树的子树森林 按先根遍历其它树组成的森林按先根遍历其它树组成的森林 * 中根次序遍历中根次序遍历 按中根遍历第一棵树的子树森林按中根遍历第一棵树的子树森林 访问访问F的第一棵树的根的第一棵树的根 按中根遍历其它树组成的森林按中根遍历其它树组成的森林 * 后根次序遍历后根次序遍历 按后根遍历第一棵树的子树森林按后根遍历第

31、一棵树的子树森林 按后根遍历其它树组成的森林按后根遍历其它树组成的森林 访问访问F的第一棵树的根的第一棵树的根二叉树的先序二叉树的先序 二叉树的中序二叉树的中序二叉树的后序二叉树的后序 A K B C D I H E F G J 先根:先根:ABEFCGDKIHJ 中根:中根:EFBGCDAIJHK 后根:后根:FEGDCBJHIKA A B K E C I F G D H J 广度优先遍历(层次遍历)广度优先遍历(层次遍历)补充:补充: 线索树线索树 Thread Tree1.Purpose:2. Thread Tree Representation left Thread Tree and

32、 right Thread Tree3.Thread Tree class 1.Purpose: Example: A B C D E F G H J Thread Tree A B C D E F G H J Inorder: DBAEGCHFJThread Treeroot2. 机内如何存储机内如何存储 一个结点增加两个标记域:一个结点增加两个标记域: leftchild leftthread data rightthread rightchild 0 leftchild 指向左子女指向左子女 leftThread = = 1 leftchild 指向前驱(某线性序列)指向前驱(某线性序列

33、) 0 rightchild 指向右子女指向右子女 rightThread = = 1 rightchild 指向后继指向后继 Thread Tree left threadTree right threadTree 8. 哈夫曼树哈夫曼树 哈夫曼树的构造哈夫曼树的构造 哈夫曼编码哈夫曼编码 扩充的二叉、三叉、扩充的二叉、三叉、.、t叉树叉树 15, 3, 14, 2, 6, 9, 16, 17 构造扩充的三叉树。构造扩充的三叉树。9. 等价类问题等价类问题 PPT第第8章章第第4.1章:二叉搜索树章:二叉搜索树 1.二叉搜索树的概念二叉搜索树的概念 2.带索引的二叉搜索树的概念带索引的二叉搜

34、索树的概念 3. AVL树树-平衡的二叉搜索树平衡的二叉搜索树 4. B-树树 1.二叉搜索树的概念二叉搜索树的概念 二叉搜索树二叉搜索树 Example:45125390781006124373 left element right二叉搜索树二叉搜索树主要操作:主要操作: 查找、插入、删除查找、插入、删除151224108111816172029232132303533 2.带索引的二叉搜索树的概念带索引的二叉搜索树的概念 An indexed binary search tree is derived from an ordinary binary search tree by addin

35、g the field leftSize to each tree node. Value in Leftsize field=number of the elements in the nodes left subtree +1leftSize left element right Example: 4 20 2 15 1 25 1 18 1 12 1 30 例子:例子: 写一递归函数实现在带索引的二叉搜索树(写一递归函数实现在带索引的二叉搜索树(IndexBST)中查找第中查找第k个小个小的元素。的元素。public Comparable findK( BinaryNode root, i

36、nt k)if( root=null) return null;/空空 if( kroot. leftSize) /在右子树在右子树findK( root. right, k-root. leftSize);/注意减去注意减去 else return root.element;3.AVL树树-平衡的二叉搜索树平衡的二叉搜索树 Definition of an AVL tree: (1) is a binary search tree (2) Every node satisfies |hL-hR|=1 where hL and hR are the heights of TL(left sub

37、tree) and TR(right subtree),respectively. 例子例子1345681011121518202224+10-10-1AVL Tree Height of an tree: the longest path from the root to each leaf node Balance factor bf(x) of a node x : height of right subtree of x height of left subtree of x Left data Right balance(height) Each node: AVL Tree The

38、 height of an AVL tree with n elements is O(log2 n), so an n-element AVL search tree can be searched in O(log2 n) time. AVL Tree 插入插入 左外侧,左外侧, 右外侧右外侧-一次旋转一次旋转 左内侧,右内侧左内侧,右内侧-二次旋转二次旋转 AVL树的插入树的插入: 1. 首先要正确地插入首先要正确地插入 2. 找到有可能发生的最小不平衡子树找到有可能发生的最小不平衡子树 3. 判别插入在不平衡子树的外侧还是内侧判别插入在不平衡子树的外侧还是内侧 4. 根据根据3的判别结

39、果的判别结果,再进行单旋还是双旋再进行单旋还是双旋 从空的从空的AVL树建树的算法。一个例子树建树的算法。一个例子 : 7个关键码发生四种转动个关键码发生四种转动 A, Z, C, W, D, X, YAAZAZCW右双旋转右双旋转AAZZCC右内右内ADZCW左外左外右单旋转右单旋转ACDZW左单旋转左单旋转右外AACCDDZZXXWWY左双旋转左双旋转左内AACYCDDZZXXWW AVL树的删除:树的删除: 方法方法 : 与二叉搜索树的删除方法一样。与二叉搜索树的删除方法一样。 假设被删除结点为假设被删除结点为W, 它的中序后继为它的中序后继为X, 则用则用X代替代替W,并并 删除删除X

40、. 所不同的是所不同的是:删除删除X后后,以以X为根的子树高度减为根的子树高度减1,这一高度这一高度 变化可能影响到从变化可能影响到从X到根结点上每个结点的平衡因子到根结点上每个结点的平衡因子,因此要进因此要进 行一系列调整。行一系列调整。WX AVL树的算法分析树的算法分析 具有具有n个结点的平衡二叉树(个结点的平衡二叉树(AVL),进行一次插入或删除),进行一次插入或删除的时间最坏情况的时间最坏情况O(log2 n) 证明:实际上要考虑证明:实际上要考虑n n个结点的平衡二叉树的最大高度个结点的平衡二叉树的最大高度 (3/2) log2 (n + 1 ) 设设T T h h 为一棵高度为为

41、一棵高度为h h,且结点个数最少的平衡二叉树。,且结点个数最少的平衡二叉树。h-2h-1h假设右子树高度为假设右子树高度为h-1因结点个数最少因结点个数最少,左子树高度左子树高度只能是只能是h-2这两棵左子树这两棵左子树,右子树高度分别右子树高度分别为为h-2, h-1,也一定是结点数最少的也一定是结点数最少的:n = 7h = 3T 3h = 1T 1n = 2h =2T 2n = 4 h = 4T 4n = 12h = 0T 0n = 1 AVL Tree例子:例子: 对一棵空的对一棵空的AVL树,分别画出插入关键码为树,分别画出插入关键码为 16,3,7,11,9,28,18,14,15

42、后的后的AVL树。树。4. B-树(外查找)树(外查找)B-Trees of order m 70年年 R.Bayer提出的。提出的。 Definition : A B-tree of order m is an m-way search tree. If the B-tree is not empty, the corresponding extended tree satisfies the following properties: 1) the root has at least two children 2) all internal nodes other than the roo

43、t have at least m/2 children 3) all external nodes are at the same levelB-treesexample 10 80 2 4 6 20 30 40 50 60 7082 84 86 88123 a B-tree of order 7B树的插入:树的插入: (注意分支数的上界(注意分支数的上界m) 一定只发生在外部结点的上一层。一定只发生在外部结点的上一层。 1. 能插。按序插入能插。按序插入 2. 不能插。不能插。 将关键码按序插入后,把该结点分为两个结点,将关键码按序插入后,把该结点分为两个结点,并把中间的关键码上提到父亲结

44、点,可能引起再一次分裂,并把中间的关键码上提到父亲结点,可能引起再一次分裂,依次向上传递。可能引起树升高一层。依次向上传递。可能引起树升高一层。 10 802 4 6 20 30 40 50 60 70 82 84 86 88A B-Tree of order 7Insert 3能插能插 10 802 3 4 6 20 30 40 50 60 70 82 84 86 88 Example: Insert 4430 802050 6090102535 40557082 8595A B-Tree of order 3不能插不能插 802060901025 44557082 859535403050

45、删除:(注意分支数的下界删除:(注意分支数的下界 m/2 ) 有两种情况有两种情况: 1. 发生在外部结点的上一层(与插入情况一样)发生在外部结点的上一层(与插入情况一样) 1)能删则删)能删则删 2) 不能删(关键码要删除,但分支数也减少不能删(关键码要删除,但分支数也减少1) a. 能借则借,但要作关键码的适当调整;能借则借,但要作关键码的适当调整; b. 不能借,则与邻近的一个结点合并,相应的父结点的一个关键不能借,则与邻近的一个结点合并,相应的父结点的一个关键 码要下放,如果引起父结点的不平衡,则还是能借则借,不能码要下放,如果引起父结点的不平衡,则还是能借则借,不能 借,则合并,这样

46、会引起更上一层的不平衡,依次传递上去,借,则合并,这样会引起更上一层的不平衡,依次传递上去, 可能会引起树高降低一层。可能会引起树高降低一层。 Example: delete 379 283 353 401307 313 331 347367 379 389283 347 401307 313 331353 367 389A B-TREE of order 7 Example:a B-Tree of order 7 ,delete 431283 353 401367 379 389419 431 4392. 删除发生在以上各层删除发生在以上各层 删除它删除它 Replace it with t

47、he smallest key in the right subtree or the largest key in the left subtree 这样就变成这样就变成1的情况的情况 Example:Delete 80, then replace it with 82 or 70, delete 82 or 70 at last30 802050 6085102535 4055708290A B-TREE of order 3B-tree例子:例子:1. 分别分别 delete 50 ,40 in the following 3阶阶B-树树.503060 802040557095第第5章:

48、散列章:散列 1.散列函数的选择散列函数的选择 2.解决冲突的方法解决冲突的方法 开地址法:线性探查法开地址法:线性探查法 平方探查法平方探查法 二次散列二次散列 链地址法链地址法 Hash Function1. 散列函数的选择散列函数的选择 2. solve a collision Open Addressing 1) linear Probing If hash(key)=d and the bucket is already occupied then we will examine successive buckets d+1, d+2,m-1, 0, 1, 2, d-1, in th

49、e arraysolve a collision example keys : Burke, Ekers, Broad, Blum, Attlee, Alton, Hecht, Ederly hash( key ) = ord( x ) ord(A) x为取为取key第一个字母在字母表中的位置。例如:第一个字母在字母表中的位置。例如: hash(Attlee) = 0 H( Burke ) = 1 , H( Ekers ) = 4 , H( Broad ) = 1, H( Blum ) = 1, H( Attlee ) = 0 , H( Hecht ) = 7 , H(Alton ) = 0

50、, H( Ederly ) = 4, 设散列表长设散列表长 m = 26 ( 025 ) 分析比较次数:分析比较次数: 搜索成功的平均搜索长度搜索成功的平均搜索长度 1/8( 1 + 1 + 2 + 3 + 1 + 1 + 6 + 3 ) = 18/8 * 搜索不成功的平均搜索长度搜索不成功的平均搜索长度 1/26( 9+8+7+6+5+4+3+2+ 1+1+1+.+1) = (9+8+7+6+5+4+3+2+ 18) = 62/26solve a collision 2) Quadratic probing If hash(k)=d and the bucket is already occ

51、upied then we will examine successive buckets d+1, d+22, d+33, in the array example : ( 89,18, 49, 58, 69 ) hash( k ) = k % 10; 0 1 2 3 4 5 6 7 8 9 49 58 69 18 89 2 3 3 1 1 ASVsucc=(1+1+2+3+3)/5solve a collision 3) Double Hashing If hash1(k)=d and the bucket is already occupied then we will counting

52、 hash2(k) =c, examine successive buckets d+c, d+2c, d+3c, in the array example: hash1(k) = k % 10; hash2(k) = R (k % R ); 其中其中 R = 0.0 & i j ) j- ; while ( ai 0 & i j ) i+ ; float temp = ai ; ai = aj; aj = temp; j- ; i+ ; 第第7章:排序章:排序考纲上的题目:考纲上的题目: 下列排序算法中,时间复杂度为下列排序算法中,时间复杂度为O(nlog2n)且占有额外空间最少的是且占有额

53、外空间最少的是 A. 堆排序堆排序 B. 起泡排序起泡排序 C. 快速排序快速排序 D. 希尔排序希尔排序第第9章:图章:图 1.无向图、有向图的有关概念无向图、有向图的有关概念 2.图的机内存储图的机内存储 邻接矩阵邻接矩阵 邻接表邻接表 3.图的若干算法图的若干算法 1) 图的遍历图的遍历-DFS BFS 2) 最小代价生成树最小代价生成树-Prime算法算法 Kuscal算法算法 3) 最短路径最短路径-Dijkstra算法算法 Floyed算法算法 4) 活动网络活动网络-AOV拓扑排序拓扑排序 AOE关键路径关键路径 4. 例例1, 例例22.图的机内存储图的机内存储 邻接矩阵邻接矩

54、阵 邻接表邻接表 Representation of graphs and digraphs1.Adjacency Matrix G=(V,E), V=V1,V2,Vn then the adjacency matrix of graph G: A(i,j)=1 if , E or (i,j) E0 otherwise Representation of graphs and digraphs For example: graph V1V2V3V4A(i,j)=0 1 1 11 0 1 11 1 0 01 1 0 01)Adjacency matrix of graph is a symmet

55、ric matrix2) A(i,j)= A(j,i)=di (degree of vertex i)nj=1nj=1V1V2V3V46871012A(i,j)=0 8 12 68 0 7 1012 7 0 6 10 0 Representation of graphs and digraphs Digraph V1V2V5V4V3A(i,j)=0 1 0 0 01 0 0 0 10 1 0 1 01 0 0 0 10 0 0 0 0 A(i,j)= diout A(j,i)=diin j=1nnj=1 Representation of graphs and digraphs Represe

56、ntation of networks, replace 1 with weights, others with W(i,j) if i!=j and , E or(i,j) E otherwise A(i,j)= Representation of graphs and digraphs For example: 除了邻接矩阵外除了邻接矩阵外,还要顶点信息表还要顶点信息表.34128623 1495A(i,j)= 1 4 9 2 3 5 8 6 Representation of graphs and digraphs2. Linked-adjacency Lists reduce the

57、storage requirement if the number of edges in the graph is small.V1V3V2V443 0243 0112 012 01234 h dest link Representation of graphs and digraphs Digraph:V1V2V31134622 4 3 11 03 2 01 61 3 0123 h dest cost link 2 6 3 3 02 2 01 4 01 11 123 hdata adjNode Table: dest cost link第第9章:图章:图3.图的若干算法图的若干算法 1)

58、图的遍历图的遍历-DFS BFSDFS:思想思想: 从图中某个顶点从图中某个顶点V0出发出发,访问它访问它,然后选择一个然后选择一个V0 邻接到的未被访问的邻接到的未被访问的一个邻接点一个邻接点V1出发深度优先遍历图出发深度优先遍历图,当遇到一个所有邻接于它的结点都被当遇到一个所有邻接于它的结点都被访问过了的结点访问过了的结点U时时,回退到前一次刚被访问过的拥有未被访问的邻接点回退到前一次刚被访问过的拥有未被访问的邻接点W,再从再从W出发深度遍历出发深度遍历,直到连通图中的所有顶点都被访问过为止直到连通图中的所有顶点都被访问过为止.BFS:思想:从图中某顶点思想:从图中某顶点V0出发,在访问了

59、出发,在访问了V0之后依次访问之后依次访问v0的各个未曾访问的各个未曾访问过的邻接点,然后分别从这些邻接点出发广度优先遍历图,直至图中所有顶过的邻接点,然后分别从这些邻接点出发广度优先遍历图,直至图中所有顶点都被访问到为止点都被访问到为止.2) 最小代价生成树最小代价生成树-Prime算法算法 Kuscal算法算法最小代价生成树(最小代价生成树(minimun-cost spanning tree)问题的提出:如何找到一个网络的最小生成树,即各边问题的提出:如何找到一个网络的最小生成树,即各边权的总和为最小的生成树权的总和为最小的生成树Kuscal算法算法: 实现思想实现思想 具体实现具体实现

60、 数据结构数据结构: 邻接矩阵邻接矩阵 堆、并查集堆、并查集-实现技巧实现技巧 Prime算法算法 :实现思想实现思想 具体实现具体实现 数据结构数据结构: 邻接矩阵邻接矩阵 辅助数据结构:开辟两个附加数组辅助数据结构:开辟两个附加数组 对于具体实现,还可以有其他一些实现方法对于具体实现,还可以有其他一些实现方法 算法结构为:算法结构为:时间复杂度:时间复杂度:O(n2)求最小的求最小的 n修改修改 nnn思考题:这两种算法分别适合那种情况?思考题:这两种算法分别适合那种情况?3) 最短路径最短路径-Dijkstra算法算法 Floyed算法算法两种算法:两种算法:1)边上权值为非负情况的从一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论