算法设计与分析试题2.docVIP

  • 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)

1亿VIP精品文档

相关文档