算法设计与分析(耿国华第二版)

简述题

算法设计与分析的基本任务
  1. 对给定问题设计出能有效解决问题的算法;
  2. 分析评价算法的质量,分析判定算法的准则和技术
舍伍德算法的基本思想(P165)

适合递归求解的问题有哪些特征

递归是指函数、过程、子程序在运行过程中直接或间接调用自身而产生的重入现象。

递归算法的主要表现形式:过程或函数在定义自身的同时对自身进行调用

适合用递归方法求解的问题:(1)有一个初始状态;(2)后续的情况可有前面的状态推出

简述回溯方法基本思想

基本思想:先定义问题的解空间,然后在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先的策略进行搜索。这种以深度优先的方式系统地搜索问题解的算法为回溯法,它适合与求解解空间较大的问题。(P108)

解决问题的基本步骤:

(1)针对所给问题,定义问题的解空间:子集树问题、排列树问题和其他因素;

(2)确定状态空间树的结构;

(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。其中深度优先方式可以选择递归回溯或者迭代回溯

试举例说明贪心算法对那些问题是有效的,而对哪些问题是无效的(P88

贪⼼策略适⽤的前提是:局部最优策略能导致产⽣全局最优解。 从问题的某⼀个初始解出发,逐步逼近给定的⽬标,以便更快的求出更好的解。当达到算法 中某⼀步不能再向前时,就停⽌算法,给出⼀个近似解。贪心算法的思想是通过选择局部最优以求得最优解,用于解决具有最大值或最小值的优化问题。

缺点:

(1)不能保证最后的解是最优解;

(2)不能⽤来求最⼤、最⼩解问题;

(3)只能求满⾜某些约束条件的可⾏解范围。 

可以⽤贪⼼算法解决的问题:货币选择问题,区间调度问题,活动安排问题。最小生成树、哈弗曼、单元最短路径。

不能⽤贪⼼算法解决的问题:N  皇后问题,0/1  背包问题,无向图找最短路径问题。

分治法和动态规划算法有何不同

共同点:二者都要求原问题具有最优子结构性质,都是将原问题分而治之,分解成若干个规模较小的子问题.然后将子问题的解合并,形成原问题的解.

分治法与动态规划实现方法:① 分治法通常利用递归求解.② 动态规划通常利用迭代法自底向上求解,但也能用具有记忆功能的递归法自顶向下求解.

分治法与动态规划主要区别:① 分治法将分解后的子问题看成相互独立的.② 动态规划将分解后的子问题理解为相互间有联系,有重叠部分.(分治法是将一个问题划分成一系列独立的子问题,分别处理后将结果组合以得到原问题的答案。动态规划同样将一个问题划分成一系列子问题进行处理,但当子问题不是互相独立而是互有联系时,动态规划不会重复计算子问题间联系的问题,是更高效的解决办法。)

回溯法和分支限界法的本质特点各是什么?说明他们的异同点。P109+137

回溯法:先定义问题的解空间,然后在问题的解空间树中,按深度优先策略,从根节点出发搜索解空间树。它其实就是“试探着走”,如果尝试不成功则退回一步,再换一个方法试试,反复进行这种试探性选择与返回纠错过程,直到求出问题的解为止。

分支限界法:将问题分支为子问题并对这些子问题定界的步骤称为分支限界法,它对有约束条件的最优化问题的所有可行解的空间进行搜索。它以广度优先或以最小耗费优先的方式搜索问题的解空间树。

当前计算机的速度越来越高,容量越来越大,为什么还要研究时间复杂度或空间复杂度更低的算法呢?

提高算法的效率。问题的复杂过程和规模的线性增长导致时耗的增长和空间需求的增长,对低效的算法来说是超线性的,绝非计算机的速度和容量的线性增长得来的时耗减少和存储空间的扩大所能抵消的。

时间复杂度可以帮助我们优化算法。

⽐如,做数组搜索,在最坏的情况并且 n ⾜够⼤时,有序数组的⼆分搜索(时间复杂度 O(logn)) 会远⽐挨个匹配(时间复杂度 O(n))快。所以我们知道⼀个数组是有序数组时,我们做搜索应 该选择⼆分搜索⽽不是挨个匹配。

概率算法的基本思想

给出P类、NP类问题的定义。写出证明一问题属于NPC问题的基本步骤

如何证明一个问题是NPC。已知TSP是NPC的,试证明Hamilton问题也是NPC。

定义:

P={L|L是一个能在多项式时间内被一台DTM所接受的语言}

NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言}

证明一问题属于NPC问题的基本步骤如下:

首先证明某一问题π是属于NP类问题

选择一个已知NPC问题的局部π’

证明其局部问题π’是属于问题π的,于是证明了问题π也是NPC类问题

证明⽅法:

1.证明 问题  属于 NP  问题,记为问题A

2.选择某个已知的 NPC 问题,记为问题 B

3.证明  问题A 可以在多项式时间⾥约化为 问题B。

常用三种方法:限制法,局部替换法,分量设计法。

分冶法所能解决问题一般具有的几个特征

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
国华是一本非常经典的数据结构教材,该书是用C语言来描述和实现各种数据结构的。数据结构是计算机科学中非常重要的一个领域,它研究如何组织和存储数据,以便能够高效地使用和操作。国华在书中详细介绍了各种数据结构的概念、特点以及它们之间的关系。 书中首先介绍了基本的数据结构,如数组、链表和栈等。然后,它深入讨论了高级数据结构,如队列、树、图和散列表。每种数据结构都用C语言来描述和实现,包括其基本操作,比如插入、删除和查找。通过各种实例和代码,读者可以深入理解每种数据结构的原理和应用。 除了描述和实现数据结构,国华还介绍了常见的算法和数据结构分析技术。这些技术可以帮助人们评估和比较不同数据结构的性能,以及设计高效的算法。书中通过一些经典的算法问题,如排序和搜索,阐述了这些技术的应用。 国华的优点在于其简洁明了的描述和清晰的代码实现。它适合初学者作为数据结构的入门教材,也适合有一定基础的读者进行进一步的学习和实践。无论是在学校的课程中还是在职业生涯中,国华都是一本不可缺少的参考书。它不仅为我们提供了理论基础,也给我们提供了实际应用的指导。总之,通过学习和理解《数据结构—c语言描述国华》,读者可以掌握数据结构的基本概念和C语言的实现技巧,为解决实际问题提供有效的工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值