算法设计与分析复习题

2019-03-09 16:43

算法设计与分析复习题

1、一个算法应有哪些主要特征?

有限性、确定性、输入、输出、可行性

2、分治法(Divide and Conquer)与动态规划(Dynamic Programming)有什么不同? 分治法是将一个问题划分成一系列独立的子问题,分别处理后将结果组合以得到原问题的答案。动态规划同样将一个问题划分成一系列子问题进行处理,但当子问题不是互相独立而是互有联系时,动态规划不会重复计算子问题间联系的问题,是更高效的解决办法。

3、试举例说明贪心算法对有的问题是有效的,而对一些问题是无效的。 贪心算法的思想是通过选择局部最优以求得最优解,但某些最优解问题无法由局部最优推出,如0-1 knapsack problem(背包问题,一个能装20斤的背包装入一定商品,要求价值最高) 4、编写一个递归算法求解Hanoi 塔问题。 #include void move(char x,char y) {

printf(\}

void hanoi(int n,char x,char y,char z) { if(n==1) move(x,z); else { } } int main()

hanoi(n-1,x,z,y); move(x,z); hanoi(n-1,y,x,z);

{ int n;

printf(\ scanf(\ hanoi(n,'A','B','C'); return 0; }

5、求解方程f(n)=f(n-1)+f(n-2),f(1)=f(2)=1。 X^2=X+1 解得

X1=(1+√5)/2,,X2=(1-√5)/2。 则F(n)=C1*X1^n + C2*X2^n。 ∵F⑴=F⑵=1。 ∴C1*X1 + C2*X2。 C1*X1^2 + C2*X2^2。 解得C1=√5/5,C2=-√5/5。

∴F(n)=(√5/5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}(√5表示根号5)。 6、求解方程T(n)=2T(n/2)+1,T(1)=1,设n=2k。 T(n)=2n-1;(不确定)

7、求解方程T(n)=aT(n/b)+n,T(1)=1,设n=2k。

8、编写一个Quick Sorting 算法,并分析时间复杂性。 #include

#define M 100000 using namespace std;

int partition(double a[],int p,int r); void quicksort(double a[],int p,int r); int main()

{

double a[M]; srand(time(0)); printf(\ for (int i=0;i

quicksort(a,0,M-1);

if(i==0) printf(\else

printf(\}

a[i]=rand()-5000; a[i]+=rand()/10000.0; if(i==0) printf(\else

printf(\

cout<

return 0; }

void quicksort(double a[],int p,int r)

{

int q; if(p

int partition(double a[],int p,int r) {

double x=a[r]; int i=p-1;

for (int j=p;j<=r-1;j++) { }

double temp=a[i+1]; //将作为基准的最后一个数交换到合适位置

a[i+1]=a[r]; a[r]=temp;

double temp=a[i]; //将比最后一个数大的数交换到后面去 a[i]=a[j]; a[j]=temp; }

if (a[j]<=x) {i++; { }

q=partition(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r);

return i+1; }

最坏时间复杂度为O(n^2)(每次选中的中间元素为序列的最小或最大元T(n)=T(n-1)+T(0)+O(n))

最好时间复杂度为O(nlogn)(每次选中的中间元素为序列的正中元素T(n)<=2T(n/2)+O(n))

平均时间复杂度为O(nlogn)(不会分析??)

9、利用Quick Sorting的原理,编写一个查找第k小元素的算法。 double quicksortk(double a[],int p,int r,int k) {

int q;

q=partition(a,p,r); if((q+1)==k) { }

else if ((q+1)>k)

return quicksortk(a,p,q-1,k); else

return quicksortk(a,q+1,r,k); }

10、 编写一个Heap Sorting算法,并分析时间复杂性。

int heapsize=0; int alength=M-1;

cout<<\return a[q];


算法设计与分析复习题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第1章_信息技术概述

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: