(完整版)算法设计与分析期末考试卷及答案a
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
_
_
end if
_
__
end for
A[i] A[1]
w =i
return w, A end SPLIT
二.计算题和简答题(每小题
1.用O、、 表示函数f与g之间阶的关系,并分别指出下列函数中阶最低和最高 的函数:
(1)f (n)=100g(n)=100n
(2)f(n)=6n+nlog ng(n)=3n
(3)f(n)= n/logn-1g(n)=2 n
(4)f(n)=2nn2g(n)=3n
(5)f(n)=log3ng(n)=log2n
2.下面是一个递归算法,其中,过程pro1和pro2的运算时间分别是1和log2n。给 出该算法的时间复杂性T(n)满足的递归方程,并求解该递归方程,估计T(n)的阶(用表示)。
i=find ( (1) )
if i>0 then output i
else output“no solution”
end SEARCH
过程find (low, high)
//求A[low..high]中使得A[i]=i的一个下标并返回,若不存在,
//则返回0。
if (2) then return 0
信
__
13.下面算法的基本运算是运算,
该算法的时间复杂性阶
_
_
_
为()。
业
算法SPLIT
专
_
订
输入:正整数n,数组A[1..n]。
生
__
输出:⋯。
_
_
i=1
考
_系_
_
装
x=A[1]
_
_
_
for j=2 to n
__
if A[j]<=x then
_院
i=i+1
学
_
_
if i j then A[i] A[j]
算法EX1
输入:正整数n,n=2k。输出:⋯
ex1(n)
end EX1过程ex1(n) if n=1 then pro1(n)
else
栏
名姓
级年
_
_系
_院学
pro2(n)
ex1(n/2) end if
return
end ex1
3.用Floyd算法求下图每一对顶点之间的最短路径长度, 计算矩阵D0,D1,D2和D3,其中Dk[i, j]表示从顶点i到顶点j的不经过编号大于
else
mid=(low high ) / 2
if (3) then return mid
else
if A[mid]<mid then
return find((4) )
else
return (5)
end if
end if
end if
end find
2.(10分)下面是求解矩阵链乘问题的动态规划算法。
3.w=SPLIT(A, low, high)
栏
_
//算法SPLIT以A[low]为主元将
A[low..high]划分成两部
_
_
//分,返回主元的新位置。
名
姓
百度文库4. quicksort (A, low, w-1)
息
5.quicksort (A, w+1, high)
级 年_
6.end if
线
end quicksort
__
_
_
C[i, j]=∞
号 学
for k=i+1 to j
_
栏__
_
x= (3)
__
if x<C[i, j] then
_
(4) =x
_
名
名
姓
end if
息姓
end for
end for
级
年
线
end for
_信_
_
return (5)
_
_
end MATCHAIN
业
3.(14分)下面是用回溯法求解马的周游问题的算法。
生专
_
订
马的周游问题:给出一个nxn棋盘,已知一个中国象棋马在
_
_
棋盘上的某个起点位置(x0, y0),求一条访问每个棋盘格点恰好
_
_
一次,最后回到起点的周游路线。 (设马走日字。)
算法MATCHAIN
输入:矩阵链长度n, n个矩阵的阶r[1..n+1],其中r[1..n]为n个矩阵的行数,r[n+1]为第n个矩阵的列数。
输出:n个矩阵链乘所需的数量乘法的最少次数。
for i=1 to n C[i, i]=(1)
for d=1 to n-1
for i=1 to n-d
_
j= (2)
10.选择排序、插入排序和归并排序算法中,算法是分治算法。
11.随机算法的一个基本特征是对于同一组输入, 不同的运行可能得到 的 结果。
12.对 于 下 面的 确 定 性 快 速 排 序 算 法 , 只 要 在 步 骤3前 加 入 随 机 化 步 骤 ,就可得到一个随机化快速排序算法,该随机化 步骤的功能是 。
f (n) d , n n0
f(n) af(n/c) g(n) , n n0
其中,g(n)表示。
5.分治算法的基本步骤包括。6.回溯算法的基本思想是。
7.动态规划和分治法在分解子问题方面的不同点是。
8.贪心算法中每次做出的贪心选择都是最优选择。
9.PQ式的分支限界法中,对于活结点表中的结点,其下界函数值越小,优先级
算法QUICKSORT
输入:n个元素的数组A[1..n]。
输出:按非降序排列的数组A中的元素
1. quicksort(1, n)
end QUICKSORT
_
_
过程quicksort(A, low, high)
_
_
_
//对A[low..high]中的元素按非降序排序。
_号学
2. if low<high then
矩阵链乘问题:给出n个矩阵M1, M2,⋯, Mn, Mi为riri+1阶矩阵,i=1, 2,⋯n,求计算M1M2⋯Mn所需的最少数量乘法次数。
记Mi, j=MiMi+1⋯Mj, i<=j。设C[i, j], 1<=i<=j<=n,表示计算Mi, j的所需的最少数量乘法次数,则
0 ,i j
C[i, j]mi kinj{C[i,k-1] C[k, j] rirkrj1},i jikj
一.填空题(每空
1.算法的时间复杂性指算法中的执行次数。
2.在忽略常数因子的情况下,O、和 三个符号中, 提供了算法运行时间 的一个上界。
3.设Dn表示大小为n的输入集合,t(I)表示输入为I时算法的运算时间, p(I)表示输入
I出现的概率,则算法的平均情况下时间复杂性A(n)=。
4.分治算法的时间复杂性常常满足如下形式的递归方程:
k的顶点的最短路径长度。
三.算法填空题(共
1.(10分)设n个不同的整数按升序存于数组A[1..n]中,求使得A[i]=i的下标i。下面是求解该问题的分治算法。
算法SEARCH
输入:正整数n,存储n个按升序排列的不同整数的数组A[1..n]。输出:A[1..n]中使得A[i]=i的一个下标i,若不存在,则输出no solution。
_
end if
_
__
end for
A[i] A[1]
w =i
return w, A end SPLIT
二.计算题和简答题(每小题
1.用O、、 表示函数f与g之间阶的关系,并分别指出下列函数中阶最低和最高 的函数:
(1)f (n)=100g(n)=100n
(2)f(n)=6n+nlog ng(n)=3n
(3)f(n)= n/logn-1g(n)=2 n
(4)f(n)=2nn2g(n)=3n
(5)f(n)=log3ng(n)=log2n
2.下面是一个递归算法,其中,过程pro1和pro2的运算时间分别是1和log2n。给 出该算法的时间复杂性T(n)满足的递归方程,并求解该递归方程,估计T(n)的阶(用表示)。
i=find ( (1) )
if i>0 then output i
else output“no solution”
end SEARCH
过程find (low, high)
//求A[low..high]中使得A[i]=i的一个下标并返回,若不存在,
//则返回0。
if (2) then return 0
信
__
13.下面算法的基本运算是运算,
该算法的时间复杂性阶
_
_
_
为()。
业
算法SPLIT
专
_
订
输入:正整数n,数组A[1..n]。
生
__
输出:⋯。
_
_
i=1
考
_系_
_
装
x=A[1]
_
_
_
for j=2 to n
__
if A[j]<=x then
_院
i=i+1
学
_
_
if i j then A[i] A[j]
算法EX1
输入:正整数n,n=2k。输出:⋯
ex1(n)
end EX1过程ex1(n) if n=1 then pro1(n)
else
栏
名姓
级年
_
_系
_院学
pro2(n)
ex1(n/2) end if
return
end ex1
3.用Floyd算法求下图每一对顶点之间的最短路径长度, 计算矩阵D0,D1,D2和D3,其中Dk[i, j]表示从顶点i到顶点j的不经过编号大于
else
mid=(low high ) / 2
if (3) then return mid
else
if A[mid]<mid then
return find((4) )
else
return (5)
end if
end if
end if
end find
2.(10分)下面是求解矩阵链乘问题的动态规划算法。
3.w=SPLIT(A, low, high)
栏
_
//算法SPLIT以A[low]为主元将
A[low..high]划分成两部
_
_
//分,返回主元的新位置。
名
姓
百度文库4. quicksort (A, low, w-1)
息
5.quicksort (A, w+1, high)
级 年_
6.end if
线
end quicksort
__
_
_
C[i, j]=∞
号 学
for k=i+1 to j
_
栏__
_
x= (3)
__
if x<C[i, j] then
_
(4) =x
_
名
名
姓
end if
息姓
end for
end for
级
年
线
end for
_信_
_
return (5)
_
_
end MATCHAIN
业
3.(14分)下面是用回溯法求解马的周游问题的算法。
生专
_
订
马的周游问题:给出一个nxn棋盘,已知一个中国象棋马在
_
_
棋盘上的某个起点位置(x0, y0),求一条访问每个棋盘格点恰好
_
_
一次,最后回到起点的周游路线。 (设马走日字。)
算法MATCHAIN
输入:矩阵链长度n, n个矩阵的阶r[1..n+1],其中r[1..n]为n个矩阵的行数,r[n+1]为第n个矩阵的列数。
输出:n个矩阵链乘所需的数量乘法的最少次数。
for i=1 to n C[i, i]=(1)
for d=1 to n-1
for i=1 to n-d
_
j= (2)
10.选择排序、插入排序和归并排序算法中,算法是分治算法。
11.随机算法的一个基本特征是对于同一组输入, 不同的运行可能得到 的 结果。
12.对 于 下 面的 确 定 性 快 速 排 序 算 法 , 只 要 在 步 骤3前 加 入 随 机 化 步 骤 ,就可得到一个随机化快速排序算法,该随机化 步骤的功能是 。
f (n) d , n n0
f(n) af(n/c) g(n) , n n0
其中,g(n)表示。
5.分治算法的基本步骤包括。6.回溯算法的基本思想是。
7.动态规划和分治法在分解子问题方面的不同点是。
8.贪心算法中每次做出的贪心选择都是最优选择。
9.PQ式的分支限界法中,对于活结点表中的结点,其下界函数值越小,优先级
算法QUICKSORT
输入:n个元素的数组A[1..n]。
输出:按非降序排列的数组A中的元素
1. quicksort(1, n)
end QUICKSORT
_
_
过程quicksort(A, low, high)
_
_
_
//对A[low..high]中的元素按非降序排序。
_号学
2. if low<high then
矩阵链乘问题:给出n个矩阵M1, M2,⋯, Mn, Mi为riri+1阶矩阵,i=1, 2,⋯n,求计算M1M2⋯Mn所需的最少数量乘法次数。
记Mi, j=MiMi+1⋯Mj, i<=j。设C[i, j], 1<=i<=j<=n,表示计算Mi, j的所需的最少数量乘法次数,则
0 ,i j
C[i, j]mi kinj{C[i,k-1] C[k, j] rirkrj1},i jikj
一.填空题(每空
1.算法的时间复杂性指算法中的执行次数。
2.在忽略常数因子的情况下,O、和 三个符号中, 提供了算法运行时间 的一个上界。
3.设Dn表示大小为n的输入集合,t(I)表示输入为I时算法的运算时间, p(I)表示输入
I出现的概率,则算法的平均情况下时间复杂性A(n)=。
4.分治算法的时间复杂性常常满足如下形式的递归方程:
k的顶点的最短路径长度。
三.算法填空题(共
1.(10分)设n个不同的整数按升序存于数组A[1..n]中,求使得A[i]=i的下标i。下面是求解该问题的分治算法。
算法SEARCH
输入:正整数n,存储n个按升序排列的不同整数的数组A[1..n]。输出:A[1..n]中使得A[i]=i的一个下标i,若不存在,则输出no solution。