(软考-软件设计师.下午)动态规划算法、回溯算法、贪心算法、分治算法的应用

分治 

关键字:【递归技术】【二分查找】

分治法的设计思路:

将一个难以直接解决的大问题分解成一些规模较小的相同问题以便于逐个击破,分而治之。 

 

分治法-递归技术

 

 

int F(int n)
{
if(n == 0) return 1;
if(n == 1) return 1;
if(n > 1 ) return F(n-1) + F(n-2);
}

分治法-二分法查找

 (108条消息) 【二分查找】有这一篇足够了_快到锅里来呀的博客-CSDN博客_二分查找icon-default.png?t=M85Bhttps://blog.csdn.net/m0_58761900/article/details/124664975?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166504720116782248515187%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166504720116782248515187&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-124664975-null-null.nonecase&utm_term=%E4%BA%8C%E5%88%86&spm=1018.2226.3001.4450

由代码可以看出二分查找也属于分治法的一种,关于二分查找,这位博主总结的很详细。 

动态规划

关键字:【查表】

 

动态规划的设计思路:

与分治法类似,基本思想就是将待解决的问题分解成若干个子问题,先求解子问题,然后从子问题的解得到原问题的解。与分治法不同的是,适用于动态规划法求解的问题,经分解得到的子问题往往不是独立的。若用分治法求解类似问题,则相同的问题会被求解多次,以至于最后求解原问题需要耗费指数级时间

最常见的动态规划的题目:

 

爬上第 1 级只有一种方法:直接爬 1 级即可。 爬上第 2 级有两种方法:每次爬 1 级,爬两次;或者一次爬 2 级。 (数据量少我们可以尝试用列举法做出来)

动态规划的核心就是:拆分子问题,记住过往,减少重复计算

回溯

关键字:【优先搜索法(深度优先)】【迷宫问题(走不通就退后去)】

回溯法的设计思路:

一种既带有系统性又带有跳跃性的搜索算法。她在包含问题的所有解的解空间树中,按照深度优先的策略,从根节点出发搜索解空间树。

使用回溯法解决问题的过程,实际上是建立一棵“状态树(解空间树)”的过程。 

例如,在解决列举集合{1,2,3}所有子集的问题中,对于每个元素,都有两种状态,取还是舍,所以构建的状态树为:

 

贪心

关键字:【背包问题(得不到最优解)】【0-1背包问题】【每一步取最优,结果不见得最优】【最先适宜策略(能进则进)】【最优适宜策略(能进进最大)】

 

贪心算法的设计思路:

经常被用来解决最优化问题,但他的最优往往是从局部最优来考虑的,每一步都选最优的方案,但这种方案不一定能得到整体上最优

背包问题

背包问题是典型的算法问题,包括两种形式,【0-1背包问题】和【部分背包问题】。0-1背包问题是指每个物品或者全部放在背包中或者不放在背包中,求解在特定背包容量下装入背包物品的最大价值。部分背包问题中,每个物品可以部分地放入背包中,求解在特定背包容量下装入背包物品的最大价值。
基于单位重量价值最大优先的策略来将物品放入背包中,本质上是一种贪心的策略。在该策略下求0-1背包问题,不能确保得到最优解。而对于部分背包问题,是可以得到最优解的。

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
软设,全称为软件工程实践(软设),是计算机科学与技术专业中的一门重要课程。软设的主要内容包括需求分析、概要设计、详细设计、编码实现、测试调试、软件维护等章节。 在进行软设学习的过程中,使用思维导图可以帮助我们更好地理解和掌握课程的核心概念和流程。 首先,需求分析是软设中的第一个章节。在这一章节中,我们通过思维导图可以对需求分析的重要概念和步骤进行整理和总结。包括需求获取、需求分析、需求规格说明等。 其次,概要设计是软设的第二个章节。通过思维导图,我们可以将概要设计的主要内容和流程进行分类和归纳。包括功能模块划分、数据结构设计、算法设计等。 接下来,详细设计是软设的第三个章节。使用思维导图可以帮助我们整理和梳理详细设计的重要概念和步骤。包括数据结构设计、界面设计、算法设计等。 编码实现是软设的第四个章节。思维导图可以帮助我们将编码实现的流程和步骤进行整理和概括。包括编码规范、代码实现、模块测试等。 测试调试是软设的第五个章节。使用思维导图可以帮助我们整理和归纳测试调试的关键内容和步骤。包括测试计划、测试用例设计、错误修复等。 最后,软件维护是软设的最后一个章节。通过思维导图,我们可以对软件维护的重要概念和流程进行总结和组织。包括问记录、问分析、问解决等。 通过使用思维导图,我们能够更加清晰地理解软设各章节的关键内容和流程,帮助我们更好地学习和应用软件工程实践的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孙宇航_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值