算法设计与分析-简答题

1. 请描述算法的定义及算法的三要素。

算法的定义:算法是指在解决问题时,按照某种机械的步骤一定可以得到问题的结果的处理过程。算法就是解决这个问题的方法和步骤的描述。

算法的三要素:操作、控制结构、数据结构

2. 试描述算法时间效率的衡量方法。

衡量一个算法的时间效率的方法如下:

一.时间频度。

二.时间复杂度。

三.算法的时间性能分析:

1. 算法耗费的时间和语句频度;

2. 问题规模和算法的时间复杂度;

3. 渐进时间复杂度评价算法时间性能;

4. 算法的时间复杂度不仅仅依赖于问题的规模,还与输入实例的初始状态有关。

3. 请简述算法和程序的区别。

①形式不同:算法在描述上一般使用半形式化的语言,程序是用形式化的计算机语言描述的。

②性质不同:算法是解决问题的步骤,程序是算法的代码实现。

③特点不同:算法要依靠程序来完成功能,程序需要算法作为灵魂。

4. 试比较链式存储和连续存储的优缺点。

①链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小(<1),存储空间利用率低。

②连续存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。优点:存储密度大(=1),存储空间利用率高。缺点:插入或删除元素时不方便。

5. 试描述结构化设计方法与面向对象设计方法的区别。

结构化设计方法与面向对象设计方法主要的区别在于设计思维上不同,结构化程序设计的基本思想是采用模块化结构,自顶向下、逐步细化;面向对象设计的基本思想是以对象为中心、对象之间相互独立而又互相调用。由于设计思维的不同,在封装性和复用性方面,结构化编程比较难于封装,面向对象编程复用性更强。

6. 简述结构化程序设计的思想,并举一例说明。

结构化程序设计的思想是采用模块化结构,自上而下,逐步求精和单入口单出口的控制结构。

7. 试描述二分搜索的思想。

二分查找又称折半查找,二分查找的思想是对有序的数组进行查找操作,每一次查找的时候,跟中间元素进行比较,如果该元素比中间元素小,则继续左半部分递归查找,否则继续右半部分递归查找。

8. 简述适用动态规划算法解决问题的特征。

①最优子结构

母问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构。即也就是说,子问题最优时,母问题通过优化一定能求得最优解

②子问题重叠

子问题本质上是和母问题一样的,只是问题的输入参数不一样,就可以称之为子问题重叠,这是动态规划解决问题的高效的本质所在,我们可以利用很多子问题具有相同的输入参数这一个性质,来减少计算量。

③问题存在边界

子问题在一定情况下就不存在子问题了, 我们称这种情况为问题存在边界,对于自顶向上和自底向下的方法,边界分别是问题的出口和入口。

④子问题相互独立

个子问题在求解最优解时事相互独立的,即本自问题的求解和其他平行子问题是不相干的。当平行子问题解决后,选择权交给母问题时,它才会考虑各子问题之间的关系,是求最大值还是最小值,还是要做相关的运算得到母问题的最优解。

9. 简述贪婪算法的思想,并描述其在部分背包问题中的应用。

贪心算法的思想: 算法在每一步都采用最优的解,每一步的选择都是当前的最优解。贪心算法追求局部最优,在部分背包问题中,我们要追求最大收益就要先装价值最高的商品,再装剩下商品中价值最高的,直至装满或没有能装的商品。

10. 请描述霍夫曼编码的方法。

(1)将信源符号按概率递减顺序排列;

(2)把两个最小的概率加起来,作为新符号的概率;

(3)重复步骤1)、(2),直到概率和达到1为止;

(4)在每次合并消息时,将被合并的消息赋以1和0或0和1;

(5)寻找从每个信源符号到概率为1处的路径,记录下路径上的1和0;

(6)对每个符号写出"1"、"O"序列(从码数的根到终节点)。

11. 利用分治策略求最大字段和,则数组a[1:n]的最大子段和有哪三种情形?

最大子段和问题的分治策略是:将整一个序列分为长度相同的两段子序列,然后分成三种情况,第一种情况是max=max_left;第二种情况是max=max_right;前两种情况可以递归求解,第三种情况是左右各有元素,需要分别计算两边,然后合并,即max=s1+s2

12. 请问贪婪算法适用于0-1背包问题还是部分背包问题?请举例说明。

贪婪算法适用于部分背包问题,但不适用于0-1背包问题,因为背包有可能留下空隙,使得最后的整体单位重量价值减小,假如最后没留下空隙也不行,有可能选了贪心选择之后剩下的空间只能让你选一个非常不好的解,最终导致解不是最优的。

13. 请分别描述结构化方法和面向对象方法的特点。

结构化方法的特点是:①相对独立、功能单一的模块结构;②“块内联系大、块间联系少”的模块性能标准;③采用模块结构图的描述方式。

面向对象方法的特点:抽象、封装、继承、多态。

14. 试描述动态规划的基本思想。

动态规划的‎实质是分治‎思想和解决‎冗余,因此它与分‎治法类似,都是将待求解问题分解成若干个子问题,用子问题的解得到原问题的解。但与分治法不同的是,动态规划求解的问题,子问题往往不是相互独立的,若用分治法解这类问题,分解得到的子问题太多,有些子问题,重复计算很多次。

15. 请简述分治算法的思想,并举例说明哪些问题可以适用分治策略解决。

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同,而后将子问题的的解综合得到原问题的解。可以使用分治策略的问题有二分搜索、棋盘覆盖、归并排序、快速排序和汉诺塔等。

  • 3
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bombinate_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值