文章目录

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

递归和迭代

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

//这是递归
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背包最大价值问题):

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

软件设计师 - 算法思想相关推荐

  1. 软件设计师c语言算法皇后,软件设计师历年试题-算法.ppt

    软件设计师历年试题-算法 1996年下午试题三 [E-R图] 1996年下午试题三 [问题] 填充下列 SQL 程序 3.1-3.4 中的 ①-⑦,使它们分别完成相应的功能:程序 3.1:统计参加比赛 ...

  2. 软考《软件设计师》第九章:数据结构与算法

    第九章:数据结构与算法 考点1:矩阵 数组 矩阵:计算时采用带点排除法,注意一维数组的起始位置 考点2:表 线性表 顺序表:顺序存储,即用一组地址连续的存储单元依次存储线性表中的数据元素 链表:链式存 ...

  3. 2015年上半年 软件设计师 上午试卷 综合知识-2

    2015年上半年 软件设计师 上午试卷 综合知识-2 与算术表达式"(a+(b-c))*d" 对应的树是(21). 答案: B 本题考查程序语言与数据结构基础知识. 对算术表达式& ...

  4. 软件设计师提纲+复习资料整理(上午题)

    文章目录 软件设计师考试大纲 上午题(选择题) 一.计算机组成原理 考点:CPU结构组成 考点:原码.反码.补码定点整数范围 考点:浮点数表示 考点:RISC和CISC计算机的区别 考点:奇校验与偶校 ...

  5. 软件设计师刷题与知识点总结 笔记

    ---------------------------------------------- 本文章中的题目为维普考试平台中的软件设计师的题目(每天都有更新) 本文太长,如需查看某一类别的题,可根据目 ...

  6. 【软考中级】软件设计师学习笔记

    软件设计师学习笔记 计算机系统知识 程序语言设计 数据结构 操作系统 软件工程基础知识 结构化开发方法 创建型设计模式 行为型设计模式 结构型设计模式: 算法设计与分析 数据库技术基础 网络与信息安全 ...

  7. 【软考-软件设计师精华知识点笔记】第八章 算法分析设计

    前言 由于笔记复制到CSDN样式失效,没有精力再重新完整的检查并设置一遍样式,有积分的可以前往下载word.pdf.有道云笔记版本. 需要说明的是,下载的内容与本篇分享内容一致,只有样式的区别[比如重 ...

  8. 2021年上半年软件设计师考试评估解析

    上午 题目:在CPU中,用(  )给出将要执行的下一条指令在内存中的地址.  选项:[{"A":"程序计数器","B":"指令寄存 ...

  9. 软件设计师中级复习小总结

    软件设计师中级复习小总结 计算机与体系结构 K = 1024 k = 1000 B 字节 b 位 1字节 = 8位 8bit(位)=1Byte(字节) 1024Byte(字节)=1KB KB,MB,G ...

最新文章

  1. python可视化多个机器学习模型在训练集(train set)上交叉验证(cross validation)的AUC值、可视化模型效能
  2. 【机器学习基础】数学推导+纯Python实现机器学习算法27:LDA线性判别分析
  3. 16 input默认样式清除
  4. PHP中的预定义常量和魔术常量
  5. jq点击按钮获取php的值删除,通过jquery怎么移除点击事件
  6. F2812 DSP程序运行在片内RAM和FLASH的区别
  7. pytorch——计算图与动态图机制
  8. android 开发 gradle 自己会容易混淆的东西
  9. RTT的IPC机制篇——IPC通信总结
  10. java零碎要点013---JAVA执行js_java执行JavaScript_java执行js引擎不能识别document浏览器内置对象解决办法
  11. tar打包命令(linux)
  12. Ubuntu 实现shell文件的开机运行(从原理到实现)
  13. RT-Thread学习笔记——事件集
  14. 高拍仪Twain接口功能
  15. 什么才是高标准要求自己?
  16. jquery触屏幻灯片
  17. mysql复制技术与生产实践pdf下载
  18. 超全的电商数据指标体系分享,年底数据分析用得上
  19. ddos攻击是利用什么进行攻击
  20. everything changes so quietly

热门文章

  1. 点击button后改变文字_27. 教你零基础搭建小程序:小程序的常见组件—button
  2. 课堂笔记——Data Mining(1)
  3. Catalan数应用
  4. 【转载保存】Lucene 实战教程第六章 Lucene 的精确、包含、集合查询 Query 的简单使用
  5. 阿里云助力浙江大学信息化建设,以实时数据驱动校园智能管理
  6. 冠赢网络:游戏盾彻底解决DDoS/CC攻击
  7. TalkingData的Spark On Kubernetes实践
  8. 网络数据隐私保护,阿里工程师怎么做?
  9. Dubbo Mesh | 阿里巴巴中间件团队在 Service Mesh 的实践和探索(附PPT)
  10. 八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线