算法设计与分析 期末试卷 A卷(完整含答案)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参考解答:设 n 堆石子从左到右方向编号为 1,2,…,n,每堆石子个数分别为 a[1],…,a[n]。n 堆石子的合并有许多不同 的方式,每种合并方式对应于 n 个矩阵连乘的一种完全加括弧方式。显然,这里合并是满足最优子结构性质的,用 A1…An 来代表每堆的石子,则最后一次合并在 Ak 和 Ak+1 之间,则 A1…An 的最优合并为((A1…Ak)(Ak+1…An)),可以看出最优 解左边部分(A1…Ak)和右边部分(Ak+1…An)的合并也分别是最优的。 假设 m[i,j]为合并石子 Ai…Aj, 1≤i≤j≤n,所得到的最小得分,若没有“合并”这个动作,则为 0。原问题所求 的最优值即为 m[1,n]。
TC ( n) O (n i log n ) ,其中建立堆需要 O(n) ,i 次堆顶元素删除 O (i log n) 。
2
TD ( n ) O (n i log i ) ,其中找第i大元素需要 O(n) ,对i个元素排序需要 O(i log i ) 。 TE ( n ) O (i ( n i ) log i i log i ) 或 TE ( n) O (n log i ) ,其中建立长度为i的最小堆需要 O(i ) ,
f 5 (n) log 3n ,
2
参考解答: O ( f1 ( n)) O (3
) ; O( f 2 (n)) O(2 n ) ; O( f 3 (n)) O(log n) ;
O( f 4 (n)) O(n 2 ) ; O( f 5 (n)) O(n) 。 2、用大O符号和关于n的渐进函数来表征如下算法Loop1至Loop3的运行时间。 (3分)
算法3:O(
)
参考解答:算法
1: O(n 2 ) ;算法 2: O(n 3 ) ;算法 3: O(n 4 ) 。
3、假设算法A的计算时间为 T (n) 2 n ,现在一慢一快的两台计算机上测试算法A,为解决 规模n的问题慢机运行算法A花费t秒,而另一台快机速度是慢机的256倍,则在快机上算法A 同样运行t秒能解决n1规模,则n1和n的关系为:n1= 为 T (n) n 2 ,其余条件不变,则n1=
参考解答:若字符 a~h 出现的频率恰好是前 8 个 Fibonacci 数,它们的 Haffman 编码树如下图所示。
4
0 0 0 0 0 0 0 a 1 b 1 c 1 d 1 e 1 f 1
3
m[1][3] min{m[1][1] m[2][3] p0 p1 p3 , m[1][2] m[3][3] p0 p2 p3} 7500; m[2][4] min{m[2][2] m[3][4] p1 p2 p4 , m[2][3] m[4][4] p1 p3 p4 } 5000;
华南农业大学期末考试试卷(A 卷)
2012 学年第 1 学期 考试类型: (闭卷)考试 学号 题号
装 订 线
考试科目: 考试时间: 年级专业 三(16) 四(24)
算法设计与分析 120 分钟
姓名 一(20) 二(25)
五(15)
总分
得分 评阅人
说明: (1)请勿漏填学号姓名等信息。本试卷仅一份,请将答案直接填于试卷上,莫将试卷当草稿,想好了再 写,若空白的位置不够,标注清楚后可以写反面; (2)答题时,对算法的描述可以采用文字、公式、图、伪代码、实例说明等混合形式。请注意表达应条 理清晰,思想简洁,勿长篇累述不得要领。
参考解答:因为该 0-1 背包问题比较特殊,恰好重量越轻的物品价值越高,所以优先取重量轻的物品放进背包。最终可 以把重量分别为 2,3,4,5 的三个物品放进背包,得到的价值和为 15 + 8 + 6 + 4 = 33,为最大值。
得分 三、画图题(共16分,每图4分) 1、字符a~h出现的频率恰好是前八个Fibonacci数(数列最开始两个元素都为1,之后每个元 素都等于前两个元素之和) ,请画出a~h这八个字符的Huffman编码树。 (4分)
2
n
n2
2n
提示:拿不准两个函数f(n)和g(n)时,考虑logf(n)和logg(n),或2^f(n)或2^g(n)。学生答题的排序后若有一个不在位,扣1分。
2、复数a+bi可以用数对(a, b)表示(其中 i 2 1 ) 。描述一个方法,只需构造进行三次实数 乘法(可采用有限次实数加减) ,即可计算a+bi和c+di相乘的结果数对(e, f)。请写出采用了 哪三次实数乘法?(5分)
3、对于矩阵连乘所需最少数乘次数问题,其递推关系式为: 0 i j m[i, j ] min{m[i, k ] m[k 1, j ] pi 1 pk p j } i j ik j 其中m[i,j]为计算矩阵连乘Ai…Aj所需的最少数乘次数, pi 1 为矩阵Ai的行数, pi 为矩阵 Ai的列数。现有四个矩阵,其中各矩阵维数分别为:
因此: m[1][4] 8000
4、操场上摆放一行共n堆石头,呈直线排列。n堆石子从左到右方向编号为1~n,每堆石子 个数分别为a[1],…,a[n],现在要将石子有次序的合并为一堆,规定每次只能选相邻的2堆合 并为新的一堆,并将新的一堆的石子数记为该次合并的得分,经过n-1次合并,最终合并为 一堆,总得分为n-1次合并得分之和。现要设计一个算法,计算出将一行的n堆石子合并为一 堆的最小得分。这里假设m[i,j]为合并石子Ai…Aj, 1≤i≤j≤n,所得到的最小得分。请写出 m[i,j]的递推公式。 (5分)
则 O( f 2 (n)) O(_____________) 则 O( f 3 (n)) O(_____________) 则 O( f 4 (n)) O(_____________) 则 O( f 5 (n)) O(_____________)
n
f 4 (n) 2log n ,
后续n-i个元素比较并判定是否逐个插入堆, 最坏情况为 O(( n i ) log i ) , 最后对i个堆中元素逐个输出堆顶 元素需要 O(i log i ) ,合计后略去低阶项为 O(n log i ) 。
得分 二、简答题(共5小题,每题5分,共25分) 1、请将下列函数的阶按上升顺序排列。 (5分)
n1 / 2 , log n 2 , 2 n , log 2 n , n log n , n 2 log n , 210 , 2 log n , 2 2 , 2 n
参考解答: 2
10
n 2
装 订 线
, log n , log n , n
2
2
1/ 2
,2
log n
, n log n , n log n , 2 , 2 , 2
得分 一、填空题(1~3题每空1分,第4题每空2分,共20分,结果直接填于划线处) 1、化简下面f(n)函数的渐进上界表达式。 (5分) f1 (n) n 2 / 2 3n , 则 O( f1 (n)) O(_____________) f 2 ( n ) 2 n 3 ,
f 3 (n) log n 3 ,
A1 10100 p
0
A2 1005
1
A3 550
2
A4 5010
3
Hale Waihona Puke Baidu
p
p
1
p
p
2
p
p
3
p
4
请根据递推关系,计算出矩阵连乘积A1A2A3A4所需要的最少数乘次数。 (5分)
参考解答:根据递推公式:
m[1][1] 0; m[2][2] 0; m[3][3] 0; m[4][4] 0; m[1][2] p0 p1 p2 5000; m[2][3] p1 p2 p3 25000; m[3][4] p2 p3 p4 2500;
算法 1 Loop1(n) s=0; for(i=1;i<=n;i++) for(j=1;j<=i;j++) s=s+i*j;
算法1:O(
);
算法 2 Loop2(n) s=0; for(i=1;i<=n2;i++) for(j=1;j<=n;j++) s=s+i*j;
算法2:O(
);
1
算法 3 Loop3(n) s=0; for(i=1;i<=n2;i++) for(j=1;j<=i;j++) s=s+i*j;
参考解答:算法A:
算法B: TB ( n) O (_________ ______) ; 算法D: TD ( n ) O (_________ ______) ;
TA (n) O (i n) ; TB ( n) O (n log n i ) 或 TB ( n) O ( n log n)
i j 0 j m[i, j] min{m[i, k ] m[k 1, j ]} a[t ] i j t i ik j
填充m[i,j]即可得到任意行状摆放的石子合并的最小得分。
5、有这样一类特殊0-1背包问题:可选物品重量越轻的物品价值越高。n=6,c=20,P=(4,8, 15,1,6,3),W=(5,3,2,10,4,8)。其中n为物品个数,c为背包载重量,P表示物品 的价值,W表示物品的重量。请问对于此特殊的0-1背包问题,为使放进背包的物品总价值 最大,应如何选择放进去的物品?此例能获得的最大总价值多少?(5分)
参考解答:
(a, b)(c, d ) ac (ad bc)i bd (1) ac [(a b)(d c) ac bd ]i bd
三次实数乘法分别是: ac,
(a b)(d c), bd
评分准则:此参考解答并非唯一解,只要能凑出ac, bd, (ad+bc)三部分的解皆可。
参考解答:对算法A, n1
;若算法B的计算时间 。 (2分)
n 8 ;对算法B, n1 16n 。
4、求最大的i个数问题:给定n个不同数的集合S和正整数i(i<=n) ,S中元素无序,求S中最 大的i个数且有序输出(按照升序或降序皆可) 。有下述多种算法: (10分) (1)算法A:调用i次顺序比较查找最大元素的算法findmax,每调用一次删除此最大的数。 (2)算法B:对S排序,并输出S中最大的i个数。 ( 3 )算法 C :对输入集合S 中的n 个数建立一个长度为 n 的最大堆,接着反复调用 i 次堆的 extract_Max过程。其中extract_Max过程为堆顶元素删除操作,该过程时间代价为O(logn), 而建立一个n个元素的最大堆过程需要O(n)。 (4)算法D:利用O(n)线性时间的分治算法找第i大元素x,然后调用partition过程对n个数以 x进行划分,比x大的i-1个元素被置于x的右边(即后边) ,再对这i个数进行排序。 (5)算法E:先对集合S的前i个元素建立一个长度为i的最小堆,利用extract_Min过程可得 最小堆的堆顶元素为x,让集合S的后续n-i个元素(称当前元素y)逐个去和堆顶元素x比较, 若y>x,将y插入堆中并重新整合成最小堆和形成新的堆顶元素x;否则丢弃y。当后续n-i个 元素全部比较完毕,则最小堆中的i个元素即为原序列n个数中最大的i个数,最后对这堆中 的i个数调用i次extract_Min过程即可有序输出。 请分析A、B、C、D和E这五个算法在最坏情况下的渐进时间复杂性(用n和i表示,但 需化简,即忽略系数且略去低阶项) 。 算法A: TA ( n ) O (_________ ______) ; 算法C: TC ( n) O (_________ _____) ; 算法E: TE ( n ) O (_________ _____) 。
m[1][1] m[2][4] p0 p1 p4 0 5000 10000 15000 m[1][4] min m[1][2] m[3][4] p0 p2 p4 5000 2500 500 8000 m[1][3] m[4][4] p p p 7500 0 5000 12500 0 3 4
TC ( n) O (n i log n ) ,其中建立堆需要 O(n) ,i 次堆顶元素删除 O (i log n) 。
2
TD ( n ) O (n i log i ) ,其中找第i大元素需要 O(n) ,对i个元素排序需要 O(i log i ) 。 TE ( n ) O (i ( n i ) log i i log i ) 或 TE ( n) O (n log i ) ,其中建立长度为i的最小堆需要 O(i ) ,
f 5 (n) log 3n ,
2
参考解答: O ( f1 ( n)) O (3
) ; O( f 2 (n)) O(2 n ) ; O( f 3 (n)) O(log n) ;
O( f 4 (n)) O(n 2 ) ; O( f 5 (n)) O(n) 。 2、用大O符号和关于n的渐进函数来表征如下算法Loop1至Loop3的运行时间。 (3分)
算法3:O(
)
参考解答:算法
1: O(n 2 ) ;算法 2: O(n 3 ) ;算法 3: O(n 4 ) 。
3、假设算法A的计算时间为 T (n) 2 n ,现在一慢一快的两台计算机上测试算法A,为解决 规模n的问题慢机运行算法A花费t秒,而另一台快机速度是慢机的256倍,则在快机上算法A 同样运行t秒能解决n1规模,则n1和n的关系为:n1= 为 T (n) n 2 ,其余条件不变,则n1=
参考解答:若字符 a~h 出现的频率恰好是前 8 个 Fibonacci 数,它们的 Haffman 编码树如下图所示。
4
0 0 0 0 0 0 0 a 1 b 1 c 1 d 1 e 1 f 1
3
m[1][3] min{m[1][1] m[2][3] p0 p1 p3 , m[1][2] m[3][3] p0 p2 p3} 7500; m[2][4] min{m[2][2] m[3][4] p1 p2 p4 , m[2][3] m[4][4] p1 p3 p4 } 5000;
华南农业大学期末考试试卷(A 卷)
2012 学年第 1 学期 考试类型: (闭卷)考试 学号 题号
装 订 线
考试科目: 考试时间: 年级专业 三(16) 四(24)
算法设计与分析 120 分钟
姓名 一(20) 二(25)
五(15)
总分
得分 评阅人
说明: (1)请勿漏填学号姓名等信息。本试卷仅一份,请将答案直接填于试卷上,莫将试卷当草稿,想好了再 写,若空白的位置不够,标注清楚后可以写反面; (2)答题时,对算法的描述可以采用文字、公式、图、伪代码、实例说明等混合形式。请注意表达应条 理清晰,思想简洁,勿长篇累述不得要领。
参考解答:因为该 0-1 背包问题比较特殊,恰好重量越轻的物品价值越高,所以优先取重量轻的物品放进背包。最终可 以把重量分别为 2,3,4,5 的三个物品放进背包,得到的价值和为 15 + 8 + 6 + 4 = 33,为最大值。
得分 三、画图题(共16分,每图4分) 1、字符a~h出现的频率恰好是前八个Fibonacci数(数列最开始两个元素都为1,之后每个元 素都等于前两个元素之和) ,请画出a~h这八个字符的Huffman编码树。 (4分)
2
n
n2
2n
提示:拿不准两个函数f(n)和g(n)时,考虑logf(n)和logg(n),或2^f(n)或2^g(n)。学生答题的排序后若有一个不在位,扣1分。
2、复数a+bi可以用数对(a, b)表示(其中 i 2 1 ) 。描述一个方法,只需构造进行三次实数 乘法(可采用有限次实数加减) ,即可计算a+bi和c+di相乘的结果数对(e, f)。请写出采用了 哪三次实数乘法?(5分)
3、对于矩阵连乘所需最少数乘次数问题,其递推关系式为: 0 i j m[i, j ] min{m[i, k ] m[k 1, j ] pi 1 pk p j } i j ik j 其中m[i,j]为计算矩阵连乘Ai…Aj所需的最少数乘次数, pi 1 为矩阵Ai的行数, pi 为矩阵 Ai的列数。现有四个矩阵,其中各矩阵维数分别为:
因此: m[1][4] 8000
4、操场上摆放一行共n堆石头,呈直线排列。n堆石子从左到右方向编号为1~n,每堆石子 个数分别为a[1],…,a[n],现在要将石子有次序的合并为一堆,规定每次只能选相邻的2堆合 并为新的一堆,并将新的一堆的石子数记为该次合并的得分,经过n-1次合并,最终合并为 一堆,总得分为n-1次合并得分之和。现要设计一个算法,计算出将一行的n堆石子合并为一 堆的最小得分。这里假设m[i,j]为合并石子Ai…Aj, 1≤i≤j≤n,所得到的最小得分。请写出 m[i,j]的递推公式。 (5分)
则 O( f 2 (n)) O(_____________) 则 O( f 3 (n)) O(_____________) 则 O( f 4 (n)) O(_____________) 则 O( f 5 (n)) O(_____________)
n
f 4 (n) 2log n ,
后续n-i个元素比较并判定是否逐个插入堆, 最坏情况为 O(( n i ) log i ) , 最后对i个堆中元素逐个输出堆顶 元素需要 O(i log i ) ,合计后略去低阶项为 O(n log i ) 。
得分 二、简答题(共5小题,每题5分,共25分) 1、请将下列函数的阶按上升顺序排列。 (5分)
n1 / 2 , log n 2 , 2 n , log 2 n , n log n , n 2 log n , 210 , 2 log n , 2 2 , 2 n
参考解答: 2
10
n 2
装 订 线
, log n , log n , n
2
2
1/ 2
,2
log n
, n log n , n log n , 2 , 2 , 2
得分 一、填空题(1~3题每空1分,第4题每空2分,共20分,结果直接填于划线处) 1、化简下面f(n)函数的渐进上界表达式。 (5分) f1 (n) n 2 / 2 3n , 则 O( f1 (n)) O(_____________) f 2 ( n ) 2 n 3 ,
f 3 (n) log n 3 ,
A1 10100 p
0
A2 1005
1
A3 550
2
A4 5010
3
Hale Waihona Puke Baidu
p
p
1
p
p
2
p
p
3
p
4
请根据递推关系,计算出矩阵连乘积A1A2A3A4所需要的最少数乘次数。 (5分)
参考解答:根据递推公式:
m[1][1] 0; m[2][2] 0; m[3][3] 0; m[4][4] 0; m[1][2] p0 p1 p2 5000; m[2][3] p1 p2 p3 25000; m[3][4] p2 p3 p4 2500;
算法 1 Loop1(n) s=0; for(i=1;i<=n;i++) for(j=1;j<=i;j++) s=s+i*j;
算法1:O(
);
算法 2 Loop2(n) s=0; for(i=1;i<=n2;i++) for(j=1;j<=n;j++) s=s+i*j;
算法2:O(
);
1
算法 3 Loop3(n) s=0; for(i=1;i<=n2;i++) for(j=1;j<=i;j++) s=s+i*j;
参考解答:算法A:
算法B: TB ( n) O (_________ ______) ; 算法D: TD ( n ) O (_________ ______) ;
TA (n) O (i n) ; TB ( n) O (n log n i ) 或 TB ( n) O ( n log n)
i j 0 j m[i, j] min{m[i, k ] m[k 1, j ]} a[t ] i j t i ik j
填充m[i,j]即可得到任意行状摆放的石子合并的最小得分。
5、有这样一类特殊0-1背包问题:可选物品重量越轻的物品价值越高。n=6,c=20,P=(4,8, 15,1,6,3),W=(5,3,2,10,4,8)。其中n为物品个数,c为背包载重量,P表示物品 的价值,W表示物品的重量。请问对于此特殊的0-1背包问题,为使放进背包的物品总价值 最大,应如何选择放进去的物品?此例能获得的最大总价值多少?(5分)
参考解答:
(a, b)(c, d ) ac (ad bc)i bd (1) ac [(a b)(d c) ac bd ]i bd
三次实数乘法分别是: ac,
(a b)(d c), bd
评分准则:此参考解答并非唯一解,只要能凑出ac, bd, (ad+bc)三部分的解皆可。
参考解答:对算法A, n1
;若算法B的计算时间 。 (2分)
n 8 ;对算法B, n1 16n 。
4、求最大的i个数问题:给定n个不同数的集合S和正整数i(i<=n) ,S中元素无序,求S中最 大的i个数且有序输出(按照升序或降序皆可) 。有下述多种算法: (10分) (1)算法A:调用i次顺序比较查找最大元素的算法findmax,每调用一次删除此最大的数。 (2)算法B:对S排序,并输出S中最大的i个数。 ( 3 )算法 C :对输入集合S 中的n 个数建立一个长度为 n 的最大堆,接着反复调用 i 次堆的 extract_Max过程。其中extract_Max过程为堆顶元素删除操作,该过程时间代价为O(logn), 而建立一个n个元素的最大堆过程需要O(n)。 (4)算法D:利用O(n)线性时间的分治算法找第i大元素x,然后调用partition过程对n个数以 x进行划分,比x大的i-1个元素被置于x的右边(即后边) ,再对这i个数进行排序。 (5)算法E:先对集合S的前i个元素建立一个长度为i的最小堆,利用extract_Min过程可得 最小堆的堆顶元素为x,让集合S的后续n-i个元素(称当前元素y)逐个去和堆顶元素x比较, 若y>x,将y插入堆中并重新整合成最小堆和形成新的堆顶元素x;否则丢弃y。当后续n-i个 元素全部比较完毕,则最小堆中的i个元素即为原序列n个数中最大的i个数,最后对这堆中 的i个数调用i次extract_Min过程即可有序输出。 请分析A、B、C、D和E这五个算法在最坏情况下的渐进时间复杂性(用n和i表示,但 需化简,即忽略系数且略去低阶项) 。 算法A: TA ( n ) O (_________ ______) ; 算法C: TC ( n) O (_________ _____) ; 算法E: TE ( n ) O (_________ _____) 。
m[1][1] m[2][4] p0 p1 p4 0 5000 10000 15000 m[1][4] min m[1][2] m[3][4] p0 p2 p4 5000 2500 500 8000 m[1][3] m[4][4] p p p 7500 0 5000 12500 0 3 4