加载《《算法设计与分析》习题答案》成功,点击此处阅读
首页 →文档下载

《算法设计与分析》习题答案

以下为《《算法设计与分析》习题答案》的无排版文字预览,完整内容请下载

第1章 习题答案

使用计算机求解问题的基本步骤包括哪些?

答案:

1.问题分析

2.数学模型建立

3.算法设计与选择

4.算法表示

5.算法分析

6.算法实现

7.程序测试及调试

8.结果整理文档编制

什么是事前分析估算法?

答案:

一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,算法的时间效率是问题规模的函数。假如,随着问题规模n的增长,算法执行,时间的增长率和函数f(n)的增长率相同,则可记作:

T(n)=O(f(n))

称T(n)为算法的渐近时间复杂度(asymptotic time complexity),简称时间复杂度。o是数量级的符号。这就是事前分析估算法。

请思考:提高算法质量的一些原则性建议有哪些?

答案:

1)保证正确性、可靠性、稳健性、可读性

(1)当心那些在视觉上不易分辨的操作符发生书写错误。

(2)为了保证算法实现的正确性,算法中的变淿(指针、数组)在被引用前。一定要有确切的含义,或者是被赋过值,或者是作为形式参数经模块接口得到传递的信息。

(3)要注意算法中的表达式,它们有可能在计算时发生上溢或下溢,或作为数组的下标值出现越界的情况……不要留到算法实现时再考虑相关的问题。

(4)写算法时就要考虑,各种可能出错的情况,并设计处理错误的相关算法(这一点在许多数据结构课本中做得非常好!大家要学习借鉴)。

(5)编写算法时区别问题的循环条件和停止条件,不要误用。

(6)注意算法中循环体或条件体的位置,不要误把循环体内的操作写在循环体外或者出现相反的错误。有的初学者在使用“缩进格式”表示了操作的嵌套关系后,忽略了语句块的符号“{}”,这将为算法实现留下隐患。

2)提高效率

(1)以提高算法的全局效率为主,提高局部效率为辅。

(2)在优化算法的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。

(3)多数情况下,时间效率和空间效率可能是对立的,此时应当分析哪个更重要,做出适当的折中。例如可以多花费一些内存来提高算法的时间性能。

(4)可以考虑先选取合适的数据结构,再优化算法。

(5)递归算法结构清晰简洁,它能使一个蕴含递归关系且结构复杂的算法简洁精练,增加可读性。但递归过程的实现决定了递归算法的效率往往很低,费时和费内存空间。在解决问题时,如果能使用递推法解决的,应考虑用递推法,其效率更高些。

(6)注意多用数学知识,可以大大提高算法效率。

(7)另外,还有一些细节上的问题也想引起大家注意,如乘、除运算的效率比加、减法运算低。

请举例说明一些现代常用算法。

答案:

压缩算法、加密算法、并行算法、数值算法、统计分析算法、网络搜索引擎算法等等。

第2章 习题答案

什么是递推法?

答案:

递推( recursion)算法是迭代算法的最基本的表现形式。一般来讲,一种简单的递推方式,是从小规模的问题推解出大规模问题的一种方法,也称其为“正推”。

什么是倒推法?

答案:

所谓倒推法(inverted recursion)是对某些特殊问题所采用的违反通常习惯的,从后向前推解问题的方法。

应用枚举解决问题,需要找出哪两个基本条件?

答案:

(1) 找出枚举范围:分析问题所涉及的各种情况。

(2) 找出约束条件:分析问题的解需要满足的条件,并用逻辑表达式表示。

查找最大值。

给定N个整数,查找这N个数中的最大值。

输入:

输入数据有多组,每组2行,第一行为M(1≤M≤1 OOO),第二行有M个整数.

输出:

输出每组数据第二行这M个数的最大值

输入样例

3

100 80 90

10

1 2 3 4 5 6 7 8 9 10

输出样例

100

10

答案:

分析:直接枚举这M个数,从中找出最大的数,然后输出即可。

#include

#define N 10010

#define oo ***00

int f[N];

int main()

{

int m;

while(scanf(“%d”,&m)!=EOF)

{

int max=-00;

for(int i=0;imax)

max=f[i];

}

printf(“%d\n”,max);

}

}

第3章 习题答案

分治算法设计的基本思想是什么?

答案:

(1) 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同

的子问题;

(2) 解决:若子问题规模较小而容易被解决则直接解,否则再继续分解为更

小的子问题,直到容易解决;

(3) 合并:将已求解的各个子问题的解,逐步合并为原问题的解。

分治算法的基本框架是什么?

答案:

分治法的一般的算法设计模式如下:

Divide-and-Conquer(int n) /n为问题规模/

{ if (n≤n0) /n0 为可解子问题的规模/

{ 解子问题;

return(子问题的解);}

for (i=1 ;ix)

{

if (t>=m-1) return false;

t++;

s=cost[i];

}

else

s+=cost[i];

}

return true;

}

int binary(int max,int sum) //二分部分

{

int mid,left=max,right=sum;

while (left=0;

}

int Bsearch(int a,int b){

if(!N) return b;

int mid=(a+b)/2;

int ans=0;

while(aans) ans=mid;

a=mid+1;

mid=(a+b)/2;

}

else {

b=mid-1;

mid=(a+b)/2;

}

}

return ans;

}

int main() {

scanf("%d%d%d",&L,&N,&M);

for(int i=0;i

以上为《《算法设计与分析》习题答案》的无排版文字预览,完整内容请下载

《算法设计与分析》习题答案由用户“DBXBBSBS”分享发布,转载请注明出处
XXXXX猜你喜欢
回顶部 | 首页 | 电脑版 | 举报反馈 更新时间2021-07-10 02:16:10
if(location.host!='wap.kao110.com'){location.href='http://wap.kao110.com/html/0f/fd/77461.html'}ipt>if(location.host!='wap.kao110.com'){location.href='http://wap.kao110.com/html/0f/fd/77461.html'}ipt>