1、log n3;10log3n.解解:3n2+10n=(n2);n2/10+2n=(2n);21+1/n=(1);log n3=(log n);10log3n=(n);1-2 试论试论O(1)与与O(2)的区别的区别.答答:没有区别没有区别,因为根据定义因为根据定义 1=O(2),2=O(1)第第1章章 概论概论1-4(1)假设某算法在输入规模为假设某算法在输入规模为n时的计算时间为时的计算时间为T(n)=3 2n.在某台计算机在某台计算机上上实现并完成该算法的时间为实现并完成该算法的时间为t秒秒.现有另一台计算机现有另一台计算机,其运行速度是第一台的其运行速度是第一台的64倍倍,那么在这台新机
2、器上用同一算法在那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题秒内能解输入规模为多大的问题?(2)若上述算法的计算时间改进为若上述算法的计算时间改进为T(n)=n2,其余条件不变其余条件不变,则在新机器上用则在新机器上用t秒秒时间能解输入规模为多大的问题时间能解输入规模为多大的问题?(3)若上述算法的计算时间改进为若上述算法的计算时间改进为T(n)=8,其余条件不变其余条件不变,那么在新机器上用那么在新机器上用t秒时间能解输入规模为多大的问题秒时间能解输入规模为多大的问题?解解:设机器设机器1上上t秒能解的问题规模为秒能解的问题规模为 n1,机器机器2上上t秒能解的问题规模为秒能
3、解的问题规模为 n2.(1)由由 t=3 2n1=3 2n2/64 知知,n2=n1+6,所以规模增大所以规模增大6.(2)由由 t=n12=n22/64 知知,n2=8 n1,所以规模增大所以规模增大7倍倍.(3)若若 t 8 则则n1可以任意大可以任意大,若若t 1/8则则n2可以任意大可以任意大.第第2章章 分治分治 2-8 设设n个不同的整数排好序后存于个不同的整数排好序后存于T1:n中中.若存在一个下标若存在一个下标i,1 i n,使得使得Ti=i.设计一个有效算法找到这个下标设计一个有效算法找到这个下标.要求算要求算法在最坏情况下的计算时间法在最坏情况下的计算时间O(log n).
4、解解:不同整数意味着要么严格递增不同整数意味着要么严格递增,要么严格递减要么严格递减 若若T1:n严格递减严格递减,则则 Tii(Tji蕴含蕴含 jj)满足二分法条件满足二分法条件,可用二分搜索可用二分搜索 若若T1:n严格递增严格递增,Tii蕴含蕴含 ji(Tjj),Tii0蕴含蕴含 ji(Tjn/2时时,称称x为主元素为主元素.设计一个线性时间算法设计一个线性时间算法,确定确定T0:n-1是否有一个主元素是否有一个主元素.算法算法1:性质性质:若数列有主元素若数列有主元素,则中位数必为主元素则中位数必为主元素.先找中位数先找中位数a,即第即第(n+1)/2 大的数大的数,在计数在计数a出现
5、次数出现次数.若若a出现次数大于出现次数大于n/2,则则a即为主元素即为主元素;否则无主元素否则无主元素.找中位数时间找中位数时间O(n),计数计数a出现次数时间出现次数时间O(n).算法算法2:若数列有主元素若数列有主元素,则去掉两个不同数则去掉两个不同数,主元素不变主元素不变.1.p=T0,ct=1,i=1,/p记可能主元素记可能主元素,ct为计数器为计数器,2.当当ifs,则则fs+=fs-Xi+ci 4.输出输出fn 第第3章章 动态规划动态规划2.石子合并问题石子合并问题问题描述问题描述:在一个圆形操场的四周摆放着在一个圆形操场的四周摆放着n堆石子堆石子.现在要将石子有次序地合并现在
6、要将石子有次序地合并成一堆成一堆.规定每次只能选相邻的规定每次只能选相邻的2堆石子合并成一堆堆石子合并成一堆,并将新的一堆石子数记为该并将新的一堆石子数记为该次合并的得分次合并的得分.试设计一个算法试设计一个算法,计算出将计算出将n堆石子合并成一堆的最小得分和最大堆石子合并成一堆的最小得分和最大得分得分.算法设计算法设计:对于给定对于给定n堆石子堆石子,计算合并成一堆的最小得分和最大得分计算合并成一堆的最小得分和最大得分.数据输入数据输入:由文件由文件input.txt提供输入数据提供输入数据.文件的第文件的第1行是正整数行是正整数n,1 n 100,表表示有示有n堆石子堆石子.第第2行有行有
7、n个数个数,分别表示分别表示n堆石子的个数堆石子的个数.结果输出结果输出:将计算结果输出到文件将计算结果输出到文件output.txt,文件第文件第1行是最小得分行是最小得分,第第2行是最行是最大得分大得分.输入文件示例输入文件示例 input.txt 4 4 4 5 9 输出文件示例输出文件示例 output.txt 43 54 第第3章章 动态规划动态规划先讨论直线上石子合并问题的算法先讨论直线上石子合并问题的算法 动规动规,子结构子结构i:j,OSP,类似于矩阵连乘问题类似于矩阵连乘问题 定义定义mi,j为从第为从第i堆到第堆到第j堆的石子合并能得到的最少分数堆的石子合并能得到的最少分数
8、,那么那么 mi,j=min mi,k+mk+1,j+sumi:j|i k t,则则mi,j=t;si,j=k;输出输出m1,n,合并次序合并次序 Traceback(i,j,s)1.若若i=j,打印打印 ai 2.否则否则 打印打印“(”3.Traceback(i,si,j,s)4.打印打印“+”4.Traceback(si,j+1,j,s)5.打印打印“)”第第3章章 动态规划动态规划再讨论圆周上的石子合并问题再讨论圆周上的石子合并问题,子结构子结构i:j稍作修改稍作修改 定义定义milen为合并第为合并第i堆到第堆到第i+len-1堆石子能得到的最少分数堆石子能得到的最少分数 当当i+l
9、en-1n时时,指跨过第指跨过第n堆到第堆到第(i+len-1)%n堆堆,仅仅sum函数需要修改函数需要修改 milen=min mik+mi+klen-k+sumi:i+len-1|0 k t,则则milen=t;silen=k;输出输出 min min|1 i n 类似可以类似可以 打印合并次序打印合并次序 由加速原理加速由加速原理加速 第第3章章 动态规划动态规划3.数字三角形问题数字三角形问题问题描述问题描述:给定一个有给定一个有n行数字组成的数字三角形行数字组成的数字三角形,如下图所示如下图所示.试设计一个算法试设计一个算法,计算出从三角形的顶至底的一条路径计算出从三角形的顶至底的一
10、条路径,使该路径经过的数字和最大使该路径经过的数字和最大.算法设计算法设计:对于给定的对于给定的n行数字组成的三角形行数字组成的三角形,计算从三角形顶至底的路径经过计算从三角形顶至底的路径经过的数字和的最大值的数字和的最大值.数据输入数据输入:由文件由文件input.txt提供输入数据提供输入数据.文件的第文件的第1行数字三角形的行数行数字三角形的行数n,1 n 100.接下来接下来n行是数字三角形各行中的数字行是数字三角形各行中的数字.所有数字在所有数字在099之间之间.结果输出结果输出:将计算结果输出到文件将计算结果输出到文件output.txt,文件第文件第1行中的数是计算出的最大行中的
11、数是计算出的最大值值.输入文件示例输入文件示例 input.txt 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出文件示例输出文件示例 output.txt 30 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 数字三角形数字三角形 第第3章章 动态规划动态规划动规动规,两种方式两种方式,自顶向下自顶向下,自底向上自底向上 自顶向下自顶向下定义定义mi,j为从第为从第1行到第行到第i行第行第j列能得到的最大分数列能得到的最大分数,那么那么 mi,j=ai,j+max mi-1,j,mi-1,j-1,当当j i;=0,当当ji或或j=0.1.m2:n=0,m1=
12、a1,1,m0=0,2.对对 i=2:n3.对对j=i:14.若若mj-1mj,则则mj=mj-1 5.mj+=ai,j6.输出输出 max mj|1 j n 第第3章章 动态规划动态规划动规动规,两种方式两种方式,自顶向下自顶向下,自底向上自底向上 自底向上自底向上 定义定义mi,j为从第为从第1行到第行到第i行第行第j列能得到的最大分数列能得到的最大分数,那么那么 mi,j=ai,j+max mi+1,j,mi+1,j+1,当当j i 1.对对j=1:n,mj=an,j,2.对对 i=n-1 到到 13.对对j=1 到到 i4.若若mj+1mj,则则mj=mj+1 5.mj+=ai,j,6
13、.输出输出m1 第四章第四章 贪心贪心1.字符字符ah出现的频率恰好是前出现的频率恰好是前8个个Fibonacci数数,它们的它们的Huffman编码是什么编码是什么?将结果推广到将结果推广到 n个字符的频率恰好是前个字符的频率恰好是前n个个Fibonacci数的情形数的情形.解解:根据根据ah的频率的频率,画出画出Huffman编码树如右图编码树如右图 所以各字符编码为所以各字符编码为:h:1,g:01,f:001,e:0001,d:00001,c:000001,b:0000001,a:0000000,推广到推广到n个符号的情形个符号的情形.记第记第i个符号为个符号为i,则则fi=fi-1+
14、fi-2 由数学归纳法易证明由数学归纳法易证明 sumi=1k fi m,是在前是在前m位男运动员已配对的情况下位男运动员已配对的情况下,男运动员男运动员i配对其她女运动员的上界配对其她女运动员的上界 定义函数定义函数 Upb(m,x)=f(m+1,m,x)+f(m+2,m,x)+f(n,m,x).当前当前m位男运动员已配对的情况下位男运动员已配对的情况下,cs+Upb(m,x)是余下情况配对的上界是余下情况配对的上界,由此可以设计剪枝由此可以设计剪枝(限制限制)条件条件 cs+Upb(m,x)bests 注注1:有的同学没有设计剪枝条件有的同学没有设计剪枝条件,这不能体现回溯的优势这不能体现
15、回溯的优势.注注2:有同学使用有同学使用 cs n,返回返回 2.对对 j=i:n 3.|交换交换xi,xj,cs+=Pixi*Qxii,4.|若若 cs+Upb(m,x)bests,5.|若若csbests,则则 bests=cs,6.|backtrace(i+1)6.|cs-=Pixi*Qxii,交换交换xi,xj,主程序执行主程序执行backtrack(1)即可即可 女女1女女2女女2男120612男241520男36125第六章第六章 分支限界分支限界在解最大团问题的优先队列式分支限界法中在解最大团问题的优先队列式分支限界法中,当前扩展节点满足当前扩展节点满足cn+n-i bestn的右儿子节点被插入到优先队列中的右儿子节点被插入到优先队列中.如果将这个条件改为满足如果将这个条件改为满足cn+n-ibestn右儿右儿子节点插入优先队列仍能满足算法正确性吗子节点插入优先队列仍能满足算法正确
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1