软件设计师 - 算法思想

文章目录

  • 递归和迭代
  • 软考常见算法思想
  • 分治法
  • 回溯法
  • 贪心法
  • 动态规划法

递归和迭代

递归:函数不断的调用自己,存在终止条件,分为递推和回归两部分;
迭代:不断用变量的旧值递推新值的过程,当前保存的结果作为下一次循环计算的初始值,是代码块的循环;

//这是递归
int funcA(int n)
{if(n > 1)return n+funcA(n-1);else return 1;
}
//这是迭代
int funcB(int n)
{int i,s=0;for(i=1;i<n;i++)s+=i;return s;
}

软考常见算法思想

在这里插入图片描述

分治法

基本思想:分而治之,把一个大的、复杂的问题拆分成若干小的、规模较小的子问题;子问题和原问题具有相同的逻辑结构;子问题可递归拆分;

实现(二分查找法):

//二分查找前,数组已经从小到达排好序public static int binarySearch (int[] arr,int begin,int end ,int target){int result = -1;if(begin>end){return result;}else {result = (begin+end)/2;if(arr[result]==target){return result;}else if(arr[result]<target){return binarySearch(arr,result+1,end,target);}else {return binarySearch(arr,begin,result-1,target);}}}

快速排序:
排序算法实现

回溯法

基本思想:深度优先选优搜索法,按选优条件向前试探以达到目标,当搜索中发现无法达到目标或选择不优时,则退回一步重新试探搜索;搜索过程中动态产生问题的解空间;

实现(迷宫问题):

在这里插入代码片

贪心法

基本思想:不追求最优解,只希望得到较为满意的解。选择对于当前情况最好的抉择,而不考虑整体情况。得到的不一定是最优解

例题:

    //设有n个货物要装入若干个容量为C的集装箱,n个货物的体积分别为:{ },且每个货物的体积都小于等于C,求最少多少个集装箱可以装下n个货物//最先适宜法:首先所有集装箱都是空的,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱//最优适宜法:每次把货物装入能够容纳它且目前剩余容量最小的集装箱,使得该货物装入箱子后闲置空间最小

贪心算法实现:

 //最先适宜法:首先所有集装箱都是空的,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱public static int firstFit() {//重置箱子容量for (int i = 0; i < box.length; i++) {box[i] = 0;}int sum = 0;//总计需要的 集装箱数量int tempNum = 0;//临时集装箱编号for (int i = 0; i < n; i++) {//对于每一个货物tempNum = 0;//临时集装箱编号重置为0(从第一个集装箱试探装入)while (C - box[tempNum] < goodWeight[i]) {//当前临时编号集装箱,不足以装入货物itempNum++;//换下一个编号的集装箱}box[tempNum] = box[tempNum] + goodWeight[i];//当前货物装入 第一个能容纳它的 集装箱sum = sum > ++tempNum ? sum : tempNum;//最终结果取最大值}return sum;}//最优适宜法:每次把货物装入能够容纳它且目前剩余容量最小的集装箱,使得该货物装入箱子后闲置空间最小public static int bestFit() {//重置箱子容量for (int i = 0; i < box.length; i++) {box[i] = 0;}int sum = 0;//总计需要的 集装箱数量int tempNum = 0;//临时集装箱编号int minCapacity = C; //最小容量for (int i = 0; i < n; i++) {//对于每一个货物minCapacity = C; //最小容量tempNum = 0;//临时集装箱编号重置为0(从第一个集装箱试探装入)for (int j = 0; j < sum + 1; j++) {//允许多扩展一个空的集装箱int temp = C - box[j] - goodWeight[i];//当前集装箱 装入货物后的剩余容量if (minCapacity > temp && temp > 0) {//当前集装箱装入货物后剩余容量 小于 当前最小容量minCapacity = temp;//更新最小容量tempNum = j;//存入货物的集装箱编号}}box[tempNum] = box[tempNum] + goodWeight[i];sum = sum > ++tempNum ? sum : tempNum;//最终结果取最大值}return sum;}

参数初始化:

 //货物数量private static int n;//货物(编号从0开始)体积 数组private static int[] goodWeight;//每个集装箱容量private static int C;//集装箱(编号从0开始) 数组private static int[] box ;public static void main(String[] args) {n = 10;C = 10;goodWeight = new int[]{4, 2, 7, 3, 5, 4, 2, 3, 6, 2};box = new int[n];System.out.println("最先适宜法 : " + firstFit());System.out.println("最优适宜法 : " + bestFit());}

动态规划法

基本思想:与分治法类似,将求解问题分成若干子问题,求解子问题,从子问题得到原问题的解;(01背包最大价值问题):

与分治法区别:
分治法的子问题都具有相同的逻辑结构,相同的问题被求解多次,最后解决原问题的时间是指数级别;
动态规划常用于求解最优问题(固定容量背包最大价值),这类问题可能有很多解,希望找到最优值的解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业两年升主管,自沉稳而后顾人 对话阿里云MVP陈琦

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 简介&#xff1a; 1993年出生&#xff0c;毕业2年&#xff0c;团队主管&#xff0c;这是我对陈琦产生好奇的原因。但随着他优…

极道创始人吴江:企业级数据系统,初创一样可以做出好产品

随着云、大数据炒作热度褪去&#xff0c;对数据的存储计算技术正在回归理性。在存储这条传统toB市场的赛道上&#xff0c;创业远比toC市场复杂艰难许多。近日&#xff0c;一家以分布式文件存储创业&#xff0c;集合了存储计算与数据分析的初创公司——极道&#xff0c;表示从20…

2020年阿里云年中大促【福利】【选品】全攻略

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 2020年阿里云年中大促活动于6月1日正式上线啦&#xff01;活动时间为&#xff1a;2020年6月1日至2020年6月30日主会场链接&am…

计算机硬件基础-寻址方式

立即寻址方式 指令的地址字段指出的是操作数本身&#xff1b;指令执行时间短&#xff1b;不需要访问内存&#xff1b; 直接寻址方式 指令的地址字段指出的是操作数在内存中的地址D&#xff1b;访问内存一次&#xff1b; 间接寻址方式 指令的地址字段指出的是操作数地址的指…

Redis 分布式集群搭建2022版本(linux环境)

Linux环境 安装 Redis-6.2.6 配置运行_01 https://gblfy.blog.csdn.net/article/details/105583077 文章目录一、节点分布总览二、软件配置初始化2.1. 下载2.2. 解压2.3. 编译安装2.4. 配置抽离2.5. 配置编辑2.6. 101节点操作2.7. 102 节点操作2.8. 103节点操作三、软件配置集群…

使用Istio进行多集群部署管理(2):单控制平面Gateway连接拓扑

单控制平面拓扑下&#xff0c;多个 Kubernetes 集群共同使用在其中一个集群上运行的单个 Istio 控制平面。控制平面的 Pilot 管理本地和远程集群上的服务&#xff0c;并为所有集群配置 Envoy Sidecar 代理。 集群感知的服务路由 Istio 1.1 中引入了集群感知的服务路由能力&am…

javamail “535 5.7.3 Authentication unsuccessful“ 问题排查

有一家odm的服务器用Javamail发邮件的时候报错 Authentication unsuccessful 其他的有些又是正常的网上查了一下解决方法如下JavaMailSenderImpl认证异常了,出现:javax.mail.AuthenticationFailedException: failed to connect的异常, 将JAVAMAIL的DEBUG日志打开,通过propert…

智能制造的灾备问题如何解决?

提起压力、温度校准行业会让大部分非专业人士感到陌生。但实际上&#xff0c;在我们的日常生活中&#xff0c;很多设备都是需要经过压力检测、温度检测、过程信号检测合格之后才正式投放市场使用的&#xff0c; 北京康斯特仪表科技股份有限公司&#xff08;以下简称康斯特&…

计算机硬件基础-存取方式

顺序存取 对数据的访问必须按特定的线性顺序进行&#xff1b; 直接存取 直接存储使用一个共享的读写装置对所有的数据进行访问&#xff0c;每个数据块都有唯一地址标志&#xff0c;读写装置可以直接移动到数据块所在位置访问&#xff0c;但对于数据块内的内容&#xff0c;采…

疫情下开源数据库逆势增长,新基建下国产数据库迎机遇

2020年5月DB-Engines 数据库流行度排行大家都看了吗&#xff1f; 虽然 Top 10 与上月没有任何变化&#xff0c;但仔细观察本月的排行榜&#xff0c;Oracle 较上月几乎持平&#xff0c;仅微涨 0.02 分&#xff1b;相较而言&#xff0c;MySQL 增长明显&#xff0c;达到 14.29 分…

寻找长沙“科技之星”,CSDN星城大巡礼

2020年&#xff0c;长沙市委主要领导发出“软件产业再出发”的号召&#xff0c;并颁布了软件三年行动计划。今年5月&#xff0c;CSDN作为专业的IT社区&#xff0c;与长沙高新区签约&#xff0c;将全国总部落户长沙&#xff0c;这一战略决策&#xff0c;让CSDN与长沙的联结进一步…

分布式任务调度平台一站式讲解

文章目录一、传统的定时任务1. 传统的定时任务存在那些缺点2. 分布式任务调度3. 定时任务集群幂等性问题二、传统定时任务的实现方案2.1. 多线程2.2. TimeTask2.3. 线程池2.4. SpringBoot注解形式2.5. 基于Quartz三、常⻅分布式定时任务3.1. Quartz3.2. TBSchedule3.3. Elastic…

数据库系统 - 范式

第一范式 关系模式R中&#xff0c;当且仅当所有域只包含原子值&#xff0c;即每个分量都是不可分割的数据项&#xff1b; 第二范式 当且仅当R满足第一范式&#xff0c;且主键为多个属性值组成&#xff0c;且每个非主属性都完全依赖主键&#xff1b; 第三范式 当且仅当R满足…

全球CT影像20秒诊断,阿里云为新冠AI辅助诊断系统加速

新冠病毒全球爆发 2020年注定是不平凡的一年&#xff0c;新型冠状病毒肆虐全球&#xff0c;对于每个人来说都是一场灾难。 根据丁香园统计的数据&#xff0c;截止到2020年5月29日&#xff0c;全球新冠&#xff08;COVID-19&#xff09;累计确诊病例5,593,631人&#xff0c;累计…

麒麟信安操作系统:挖掘场景,与云俱进 ——携手openEuler赋能关键行业应用

12月24日&#xff0c;由中国电子技术标准化研究院、中国软件行业协会、绿色计算产业联盟主办&#xff0c;华为、飞腾、麒麟信安等操作系统厂商协办的操作系统产业峰会在北京成功举行。湖南麒麟信安科技股份有限公司作为华为重点邀请的四家openEuler商业发行版企业代表&#xff…

template might not exist or might not be accessible by any of the configured

我在后台返回json串&#xff0c;但是在前台进行接收的时候&#xff0c;出现thymeleaf无法解析&#xff0c;前台接收不到后台传来的信息。所以前台报500。 问题解决&#xff1a;将Controller更改为RestController即可解决

软考 - 可靠性和可用性

可靠性 系统在给定时间间隔内和给定条件下无失效运行的效率&#xff1b; 可用性 软件特定使用环境下为特定用户提供特定功能时具有的有效性&#xff1b;

IDEA中导入VUE后,JS文件爆红解决办法

原因&#xff1a;可能是js版本不兼容的问题&#xff0c;修改如下图: 点击File–>settings&#xff0c;搜索&#xff1a;JavaScript&#xff0c;如图修改

软考 - 图

文章目录1.图的分类1.1.强连通图1.2.完全图2.存储结构2.1.邻接矩阵表示法&#xff1a;2.2.邻接链表表示法&#xff1a;3.图的遍历3.1.深度优先遍历3.2.广度优先遍历4.最小生成树4.1.普里姆算法&#xff1a;4.2.克鲁斯卡尔算法&#xff1a;5.AVO网络、AOE网络1.图的分类 1.1.强…

带你一文看懂 Blockchain + NoSQL数据库

来源 | Tyler Mitchell译者 | 火火酱&#xff0c;责编 | Carol图源 | CSDN下载自视觉中国NoSQL数据库和现代区块链分类账都受益于一套共同的原则。由于其二者平台可以相互补充&#xff0c;因此当它们服务于同一应用程序时&#xff0c;能够配合完成多种工作。在本文中&#xff0…