0911算法基础第二次习题课 2011.11.24.

Slides:



Advertisements
Similar presentations
摆一摆,想一想. 棋子个数数的个数 摆出的数 、 10 2 、 11 、 20 3 、 12 、 21 、 30 4 、 13 、 22 、 31 、 40 5 、 14 、 23 、 32 、 41 、
Advertisements

3 的倍数的特征 的倍数有 : 。 5 的倍数有 : 。 既是 2 的倍数又是 5 的倍数有 : 。 12 , 18 , 20 , 48 , 60 , 72 , , 25 , 60 ,
第八章 第四节 机动 目录 上页 下页 返回 结束 一个方程所确定的隐函数 及其导数 隐函数的微分法.
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多操作算法简单,而任何树都可以与二叉树 相互转换,这样就解决了树的
圆的一般方程 (x-a)2 +(y-b)2=r2 x2+y2+Dx+Ey+F=0 Ax2+Bxy+Cy2+Dx+Ey+ F=0.
第三章 函数逼近 — 最佳平方逼近.
第二章 二次函数 第二节 结识抛物线
小学生游戏.
第十章 内部排序 10.1 概述 10.2 插入排序 直接插入排序 其他插入排序 希尔排序
第5章 定积分及其应用 基本要求 5.1 定积分的概念与性质 5.2 微积分基本公式 5.3 定积分的换元积分法与分部积分法
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
第2章 Z变换 Z变换的定义与收敛域 Z反变换 系统的稳定性和H(z) 系统函数.
第三章 多维随机变量及其分布 §2 边缘分布 边缘分布函数 边缘分布律 边缘概率密度.
第二章 矩阵(matrix) 第8次课.
9.1-1 按照竞争树的办法求最小值需n-1次比较,然后在lgn个与最小值比较过的元素中求出最小值即为原来n个元素的次小值,需lgn-1次比较,所以共需n+lgn-2次比较 题目是要证明3n/2-2是最少的比较次数,而不是要构造出这样的算法。我们把某个元素与其它元素间的大小关系称作一条信息,那么最大元素包含n-1条信息(这个元素比其它n-1个元素都大),同样,最小元素也包含n-1条信息,同时求出最大和最小元素就需要获得2n-2条信息。未比较过的元素记为N,比较后较小的元素记为S,较大的元素记为
元素替换法 ——行列式按行(列)展开(推论)
第2讲 绪论(二).
Cyclic Hanoi问题 李凯旭.
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第11讲 树和二叉树(二).
动态规划(Dynamic Programming)
组合数学 第五章 二项式系数 主要内容: 1. 二项式系数及相关性质 2. 链与反链.
第5到第6章的勘误表 注意:这个 c 应改为 d 1、第 92 页 倒数第 7 行:
使用矩阵表示 最小生成树算法.
无向树和根树.
10066: The Twin Towers ★★★☆☆ 題組:Problem Set Archive with Online Judge
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
线段的有关计算.
顺序表的删除.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
算法导论第三次习题课
离散数学─归纳与递归 南京大学计算机科学与技术系
⑴当∠MBN绕点B旋转到AE=CF时(如图1),比较AE+CF与EF的大小关系,并证明你的结论。
复习.
第4章 Excel电子表格制作软件 4.4 函数(一).
算法导论第一次习题课.
定理21.9(可满足性定理)设A是P(Y)的协调子集,则存在P(Y)的解释域U和项解释,使得赋值函数v(A){1}。
§8.3 不变因子 一、行列式因子 二、不变因子.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
第5节 树 前两章学习的栈和队列属于线性结构。在这种结构中,数据元素的逻辑位置之间呈线性关系,每一个数据元素通常只有一个前件(除第一个元素外)和一个后件(除最后一个元素外)。在实际生活中,可以用线性结构描述数据元素之间逻辑关系的问题是很广泛的,但也有很多问题不能依靠线性结构来解决,例如家谱、行政组织机构等都是非线性的数据结构。其中树就是一种非线性的数据结构。
1.2 子集、补集、全集习题课.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第七、八次实验要求.
2.2矩阵的代数运算.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
2019/5/21 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 11:21:44.
#define RBTREE_RED 0 #define RBTREE_BLACK 1 typedef int dataType; typedef struct treeNode{ dataType key; int color; //red:0.
2019/5/20 第三节 高阶导数 1.
正弦、余弦函数的性质 华容一中 伍立华 2017年2月24日.
§2 方阵的特征值与特征向量.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
生 物 信 息 学 Bioinformatics 巩晶 癌症研究中心 山东大学 医学院
定义5 把矩阵 A 的行换成同序数的列得到的矩阵,
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
找 因 数.
主讲人: 吕敏 { } Spring 2012 ,USTC 算法基础 主讲人: 吕敏 { } Spring 2012 ,USTC.
插入排序的正确性证明 以及各种改进方法.
三角 三角 三角 函数 余弦函数的图象和性质.
第七章 搜索结构 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
§4.5 最大公因式的矩阵求法( Ⅱ ).
本节内容 1. 平衡二叉树的定义 2.平衡化旋转 3.平衡二叉排序树的插入操作 昆山爱达人信息技术有限公司
离散数学─归纳与递归 南京大学计算机科学与技术系
第二次课后作业答案 函数式编程和逻辑式编程
算法基础习题课2 助教:刘倩玉.
最小生成树 最优二叉树.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

0911算法基础第二次习题课 2011.11.24

9.1-1 按照竞争树的办法求最小值需n-1次比较,然后在lgn个与最小值比较过的元素中求出最小值即为原来n个元素的次小值,需lgn-1次比较,所以共需n+lgn-2次比较 9.1-2 题目是要证明3n/2-2是最少的比较次数,而不是要构造出这样的算法。我们把某个元素与其它元素间的大小关系称作一条信息,那么最大元素包含n-1条信息(这个元素比其它n-1个元素都大),同样,最小元素也包含n-1条信息,同时求出最大和最小元素就需要获得2n-2条信息。未比较过的元素记为N,比较后较小的元素记为S,较大的元素记为L,那么每次比较获得的信息数如下表:

在最坏情况下,只能在两个未比较过的元素间比较才能得到两条信息,其余的比较至多得到一条信息,而未比较过的元素至多有n个,这样为了得到2n-2条消息至少需要n/2+(2n-2-n)=3n/2-2次比较

9.2-4 最坏时Randomized-Partition每次都返回余下元素中最大的一个,划分序列是{9,8,7,6,5,4,3,2,1,0} 9.3-1 每组7个元素时大于x的元素为 ,此时递归式为 用代换法解得复杂度为O(n) 每组3个元素时同理可得递归式为 用代换法解得复杂度为Ω(nlogn)

9.3-2 SELECT中大于x的元素至少为 当n>=140时满足3n/10-6>= ,同理可证小于的情况 9.3-4 通过比较得到的第i小的元素,在比较过程中比这个元素小的元素构成的集合即为i – 1个小数集合,而比较过程中比这个元素大的元素则构成了n – i 个大元素集合。不需要增加比较次数,只需要每次保留比较信息即可 9.3-7算法步骤: 1 找出集合S的中位数i,O(N); 2 构造新集合S',其中的元素为: S' = { x'= |x-i| | x 属于S}; n次 3 找出集合S'中的第K小的元素d;O(N); 4 对集合S中的每一个元素x,如果|x-i|<=d, 则x是满足要求的元素. n次

12.2-1, 12.2-5, 12.2-6:略 12.3-1 Tree-Insert(T,z) { T-Insert(T,z){ y=root(T); x=root(T); if(y==NIL){ if(key[z]<key[x]) key[y]=key[z]; if(left[x]==NIL) left[y]=NIL; left[x]=key[z]; right[y]=NIL; } else T-Insert(left[x],z); else else T-Insert(y,z); if(right[x]==NIL) } right[x]=key[z]; else T-insert(right[x],z);

12.3-3 中序遍历O(n),最好情况下是完全二叉树,运行时间为O(nlogn),最坏情况下是一个链,运行时间O(n^2) 12.3-6 自己定义一个priority,可以是左右子树的高、左右子树的大小或者等概率随机选择一个 13.1-1 略 13.1-2 都不是,红色违反性质4,黑色违反性质5 13.1-6 最多时是红黑相间的满二叉树,而且最底层内结点为红色,此时内结点总数为(2^2k)-1,最少时是全黑的满二叉树,此时内结点总数为 (2^k)-1

13.2.2 BST(Binary Search Tree)上某个结点的旋转次数,是这个结点能够左旋和右旋的次数之和,即非空的右孩子结点和非空的左孩子结点数之和。对BST上所有结点的旋转次数求和,得到BST的边数为n – 1,这就是n – node的BST可能的旋转数目。 13.2.4 首先证明任意的二分查找树可通过至多n-1次旋转变成右行链。 再由对称性可知右行链可通过至多n-1次旋转变成任意的二分查找树,这样任意两棵二分查找树之间的转换至多需要2(n-1)次旋转。

13.2.5 (1)右行链就不可以通过右旋转换成其它的二分查找树。T1中的根变换到T2相应位置,需要O(n);T1两个子树的节点分别为k个和n-k-1个;得递归式: 13.3.1 取成黑色会改变树的黑高度,这样调整起来更麻烦。 13.3.2 略 13.3.5 用归纳法证即可。

13.4-3.删除过程如下: 删去结点8,其他结点颜色不变 删去结点12,则第四条性质不满足,依据case 2 ,结点19改为黑色,结点31改为红色 删去结点19,结点31成为结点38的左孩子,结点31改为黑色 删去结点31,则第四条性质不满足,依据case 2 ,结点41改为红色 删去结点38,结点41成为根结点,改为黑色 删去结点41,树空,结束

14.1-1.函数运行过程大致如下: r=13, i=10, i<r 设X为T的左孩子, 进入r=8, i=10, i>r 设Y为X的右孩子, 进入r=3, i=2, i<r 设Z为Y的左孩子, 进入r=1, i=2, i>r 设M为Z的右孩子, 进入r=1, i=1, i=r 返回M,即值为20的结点

14. 3-6.实现要求的数据结构有多种。一种参考的数据结构可以书中14 14.3-6.实现要求的数据结构有多种。一种参考的数据结构可以书中14.3节介绍的Interval trees作为基础的数据结构,动态集合中的每个值作为结点的 low endpoint,集合中下一个值作为 该结点的high endpoint,再在此基础上增加一个min-gap域,该域存放的值是以该结点为根的树中,所有结点的high endpoint与low endpoint值差异最大的值。 Insert,Delete,Search算法和Interval trees基本相同,时间复杂度为 。 Min-Gap算法的值可直接由根结点的min-gap域的值直接得到,时间复杂度为

19.1-1 if x is root degree(sibing[x])>degree(x) if x is not root degree(sibing[x])=degree(x)-1 19.1-3证明:1)由树的构成可知:x的第i个孩子的二进制表示为x二进制表示的最右0后第i位置反。 由这个性质我们可以得到第i层节点的二进制表示中有k-i个1。 2)包含j个1的节点个数为第i层的个数(k,i)。 3)数学归纳法证明 对i=0,1时结论成立 假设对i<k,结论都成立,当i=k时 假设x为root下的第r子树中的节点,由子树根节点的第r位被置反为0 root的度为k-r,子树根节点满足条件。将子树中前r位去掉不影响性质。考虑子树,由假设可知,子树中的节点满足条件,所以,结论成立。

19.2-2 过程略 ( union操作 ) 19.2-3 (1)decrease-key (2)extract-min 过程略 19.2-6 算法思想:找到堆中最小值min,用min-1代替-∞. [遍历堆中树的根节点]

15.1-2 由r1(j)= r2(j)=2r1(j+1), r1(n) = 1, 递推可知: r1(j)= 2 n-j 15.1-1 15.1-2 由r1(j)= r2(j)=2r1(j+1), r1(n) = 1, 递推可知: r1(j)= 2 n-j 15.1-4 fi[j]值只依赖fi[j-1]的值,从而可以从2n压缩为2个。再加上f*、l*、2个l数组(大小为n-1)。 Print-station(l, l*, j ) //i为线路,j为station i  l*; if j>1 then Print-station(l, li[j], j-1 ) print “line” I*, “station” j; 初始调用Print-station(l,l*,n)

15.2-1 略 15.2-2 注意:求矩阵乘法结果 15.2-3 略。需要注意: MATRIX-CHAIN-MULTIPLY(A, s, i, j) if j>i x= MATRIX-CHAIN-MULTIPLY(A, s, i,s(i,j) ) y= MATRIX-CHAIN-MULTIPLY(A, s, s(i,j)+1, j) return MATRIX-MULTIPLY(x, y) else return Ai 15.2-3 略。需要注意: 1 应先给出猜测解 2 c应为常数

15.3-1 枚举复杂度 ,递归复杂度 。 递归的稍微好一点。 15.3-2 mergesort没有重叠子问题 15.3-4 fi(j)计算时候使用fi(j-1),有重复子问题。

15.4-1 略 15.4-2 PRINT_LCS(c,x,y,i,j) if x[i]=y[j] PRINT_LCS(c,x,y,i-1,j-1) print x[i] else if c[i–1,j] >= c[i,j-1] /*向上*/ PRINT_LCS(c,x,y,i-1,j) else PRINT_LCS(c,x,y,i,j-1) /*向左*/

15.4-4 1. c[i,j]只和c[i-1,j-1],c[i-1,j],c[I,j-1]有关,故矩阵c可压缩成2行。 2. 本质上c[i,j]只和c[i-1,j], c[i,j-1]有关,故只用一个元素保存c[i-1,j]即可。

2Min(m,n)+O(1): LCS_LENGTH(X,Y) m<-LENGTH[X]; n<-LENGTH[Y]; if m<n exchange X<->Y exchange m<->n for i<-0 to n c[0,i]<- 0; c[1,0]<-0; for i<-1 to m for j<-1 to n if X[i]=Y[j] c[1,j]<-c[0,j-1]+1 else if c[0,j] >= c[1,j-1] c[1,j] <- c[0,j] else c[1,j]<- c[1,j-1] for k<-0 to n /*更新计算结果*/ c[0,k]<-c[1,k] return c[1,n] //最后一个必为最大 Min(m,n)+O(1):进一步压缩空间 LCS_LENGTH2(X,Y) m<-LENGTH[X]; n<-LENGTH[Y]; if m<n exchange X<->Y exchange m<->n for i<-0 to n c[i]<-0; d0<-0; //c[i,j-1] for i<-1 to m for j<-1 to n if x[i]=y[j] d1<-c[j-1]+1; //c[i-1,j-1] else if c[j]>d0 d1<-c[j]; //c[i-1,j] else d1<-d0 c[j-1]<-d0; d0<-d1; d1<-0; return c[n]

15.5-3 这个改变不影响时间复杂度,但是影响系数。 15.5-4 第九行替换为: if i=j root[i,j] <- j e[i,j] <- pi+qi-1+qj else for r<- root[i,j-1] to root[i+1,j] do 时间复杂度为

Project2 下周六、周日(12月3日、4日)晚上验收实验,地点电三楼517~519。 实验报告截止日期12月9日晚12:00之前。 实验报告按要求书写,有图有表有曲线有对比。 实验压缩包格式:姓名+学号+project2.rar 内容:实验纯源代码和实验报告(word或者pdf)。

课堂小测 关键字41,12,19,8插入一棵初始为空的红黑树,画出插入过程,从建好的树中连续删除关键字12,19 请给出一个时间 O(n^2) 的算法,使之能找出一个N个数的序列中最长的单调递增子序列.