- 20
- 0
- 约4.08千字
- 约 6页
- 2017-12-27 发布于河南
- 举报
算法设计与分析试题2
算法设计与分析试题2
1、(1) 证明:O(f)+O(g)=O(f+g) (7分)
(2) 求下列函数的渐近表达式:(6分)
3n2+10n; 21+1/n;
⑴ 证明:令F(N)=O(f),则存在自然数N1、C1,使得对任意的自然数N ,有: F(N) ……………………………..(2分)
同理可令G(N)=O(g), 则存在自然数N2、C2,使得对任意的自然数N ,有: G(N) ……………………………..(3分)
令 C3=max{C1,C2},N3=max{N1,N2},则对所有的N ,有:
F(N)
G(N) ……………………………..(5分)
故有:
O(f)+O(g)=F(N)+G(N)
因此有:
O(f)+O(g)=O(f+g) ……………………………..(7分)
⑵ 解:① 因为: 由渐近表达式的定义易知:
的渐近表达式。……………………………..(3分)
② 因为: 由渐近表达式的定义易知:
21是21+1/n的渐近表达式。……………………………..(6分)
3、试用分治法对数组A[n]实现快速排序。(13分)
、解:用分治法求解的算法代码如下:
int partition(float A[],int p,int r)
{
int i=p,j=r+1;
float x=a[p];
while (1) {
while(a[++i]x);
while(a[--j]x);
if(i=j) break;
a[i] ……………………………..(4分)
};
a[p]=a[j];
a[j]=x;
return j; ……………………………..(7分)
}
void Quicksort( float a[], int p, int r )
{
if( pr) {
int q=partition(a,p,r); ……………………………..(10分)
Quicksort(a,p,q-1);
Quicksort(a,q+1,r);
}
};
Quicksort(a,0,n-1); ……………………………..(13分)
4、试用动态规划算法实现最长公共子序列问题。(15分)
、解:用动态规划算法求解的算法代码如下:
int lcs_len(char *a,char *b,int c[][N])
{
int m=strlen(a),n=strlen(b),i,j;
for(i=0;i=m;i++) c[i][0]=0;
for(j=1;j=n;j++) c[0][j]=0; ……………………………..(4分)
for(i=1;i=m;i++)
for(j=1;j=n;j++)
if(a[i-1]= =b[j-1]) c[i][j]=c[i-1][j-1]+1;
else if(c[i-1][j]=c[i][j-1])
c[i][j]=c[i-1][j];
else c[i][j]=c[i][j-1]; ……………………………..(7分)
return c[m][n]; ……………………………..(8分)
};
cha
原创力文档

文档评论(0)