算法部分考试内容

最近点对算法,快速排序,最长公共子序列-动态规划,计数排序,贪心算法阐述,算法时间复杂度分析。

考的不好,有点沮丧。

一 .选择题

计数排序输入序列元素必须是有界非负整数;

递归方法的主要问题是运行效率较低;

可对任何输入序列进行排序的的基于比较的排序的排序方法的最优性能是O(nlogn);

用动态规划方法不一定能实现多项式复杂度,指数复杂度。

二、 改进汉诺塔时间复杂度计算,假设以下算法rf中cf(n,A,B)时间复杂度为O(1);分析rf的时间复杂度:

void rf(int n, int A, int B,int C)

{

  int D;

  if(n>0)

  {

  rf(n-1,A,C,B);

  cf(n,A,B);//时间复杂度为O(1);

  n--;

  D=A;

  A=C;

  C=D;

  }

}

T(n)=T(n-1)+O(1)常数;

多项式时间复杂度O(n);

 

描述贪心算法的基本思想,如果贪心算法不能保证获得最优解,为什么还常用来求解优化问题,应用贪心算法求解任何问题都不能得到最优解吗?

解优化问题的三剑客:贪心法,动态规划方法,线性规划方法。

三.  算法分析题

1. 用何种排序方法对关键字序列排序{25,84,21,47,15,27,68,35,20}进行排序时,序列的变化情况为:{20,15,21,25,47,27,68,35,84},{15,20,21,25,35,27,47,68,84}, {15, 20, 21, 25, 27, 35, 47, 68, 84}(可从选择排序,归并排序,快速排序,插入排序等常用算法中选择)?举例说明在什么情况下该排序算法会达到最坏时间复杂度,并指出原因和给出改进的方法。

快速排序,改进方法:1.产生随机数,不走极端,

          2.取0,n-1,中间值 三者中中间的值为枢轴。

2,最近点对问题:给定平面上n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对的距离最小,以下是试图采用分治法解该问题的一个算法:

 

时间复杂度T(n)=2(n/2)+O(n),故为O(nlogn);

 

3. 最长公共子序列问题:

给出两个序列X[1...n]和Y[1...n],用动态规划方法

试用描述如何应用动态规划方法确定最长公共子序列长度问题,不需要找出最长公共子序列,也不需要写出具体的代码。

提示:求解序列x和序列y的最长公共子序列长度c[m,n]=|LCS(x,y)|

定义 c[i,j] = |LCS(x[1...i],y[1...j])| , 找出 c[i,j] 与 c[i-1,j-1], c[i,j-1], c[i-1,j]的关系。

 

 

posted @ 2016-11-23 15:26  冯兴伟  阅读(346)  评论(0编辑  收藏  举报