当前位置: 首页 > news >正文

软件设计师备考-(十六)数据结构及算法应用(重要)

16.1 前言

16.2 分治法

16.3 分治法(递归技术)

16.4 分治法(二分查找法)

  • 二分法:二分查找算法是一种在有序数组中查找某一特定元素的搜索算法,其思想就是不断地将有序查找表“一分为二”,逐渐缩小搜索区域,进而找到目标元素。
    • 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;
    • 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
      • 小于中间元素m:high = m-1
      • 大于中间元素m:low = m+1
    • 如果在某一步骤数组 为空,则代表找不到。
    • 这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)
    • 注:使用二分查找的前提条件是,数组已经是有序的

伪代码举例:

  • L:可以理解为数组
  • m:就是中间元素的下标
  • a:开始下标(左、low)
  • b:结束下标(右,hign)
  • x:查找的值

16.5 回溯法

16.6 贪心法

  • 贪心法最经典的示例:解决背包问题
    • 下图中,假设背包的贪心算法的规定是:每10体积的价值最优
    • 那么物品1每10体积价值:70
    • 物品2每10体积价值:60
    • 物品3每10体积价值:50
    • 贪心算法就会将物品以,物品1—》物品2—》物品3的顺序放入
    • 当开始放物品3的时候发现背包容量不足,就停止放入
  • 关于背包问题,需要注意的事项:
    • 物体唯不唯一(一个物体只有一个,只能放一个到背包中【零一背包问题】)
    • 物体如果可以重复放的话,那最优解结果又不一样了

  • 判断是否使用了贪心算法:每一步结果使用最优,但是最终结果不一定是最优解

16.7 动态规划法

动态规划法的特点是会创建一个表,进行填表

16.8 数据结构及算法应用案例分析1


  • 问题一:

    • (1)j = 0

      • 由代码中可知,没有给j初始化赋值,所以这里的代码应该是j=0,初始化j的下标

    • (2)b[j] = b[j]+s[i]

      • s:表示货物的体积

      • b:表示集装箱当前已经装入货物的体积

      • 由题可知,最先适宜策略,是每次将一个货物装入第一个能够容纳它的集装箱中。

      • b(当前下标集装箱已经装入货物的体积) = s(当前下标货物的体积) + b(当前下标集装箱已经装入货物的体积)

    • (3)min = temp

      • 由题可知,最优适宜策略,总是把货物装到能容纳它,且目前剩余容量最小的集装箱【其实可以理解为,合理利用每一点资源,最佳利用资源】

      • temp = C - b[j] - s[i],表示集装箱容量-当前下标位置的货物的体积-当前下标已经装入货物的体积 = 剩余的体积

      • min = temp,题中说min表示当前所用集装箱装入货物后的最小剩余容量,起始就是上述计算出来的temp

    • (4)b[m] = b[m]+s[i]

      • 根据题可知,我们在计算出,temp的时候,下面给m = j ,赋了一个值,这个值就表示,当前容量最小且能容下物品的集装箱的下标位置。

      • 下面就要将物品添加到集装箱中,b[m] = b[m]+s[i],b当前集装箱的装入货物的体积 = b当前集装箱的装入货物的体积 + s所要添加货物的体积

    • 问题二:
      • (5)、(6)贪心法
      • (7)、(8)都是 o(n*n)——o(n²),双层for循环

    • 问题三:
      • 由题可知,n=10表示有10个货物
      • C=10,表示集装箱的容量为10
      • 最优:先从剩余量最小的箱子匹配
      • 最先:第一个可以容纳货物容量的
      • (9)5、(10)4
      • (11)否,因为无论是最先适宜策略,还是最优适宜策略,都是贪心算法,它只保证每一步是最优解,但并不保证整体能够达到最优解。

    16.9 数据结构及算法应用案例分析2

    • (5)分治
      • 由题可知,采用归并排序,将元素分成n/2个子元素,然后用归并排序对俩个子数组进行递归排序,最后再进行合并2个子数组【符合分治算法的理念,分解——解决——合并
    • (6)T(n) = 2T(n/2)+O(n)
      • 假设时间为T(n)的话,那么分治,解决俩个子问题(mergeSort),一个就为T(n/2),俩个就为2T(n/2)
      • 下面还有一个归并,merge(arr,begin,,mid,end),通过代码发现,归并,最多都是单程循环,所以时间复杂度为O(n)
      • T(n) = 2T(n/2)+O(n)
    • (7)O(n log n)
    • (8)O(n)
      • 空间复杂度:我们需要的空间有多少个,就有多少的交换空间
    • (9)n1+n2
      • 分治后n1与n2已经排好序了,然后进行归并,其实就是n1的每个数据与n2的每个数据一一比较,最终是n1+n2

    文档说明:希赛教育王勇老师软件设计师教学课程,这里学习整理后进行分享


    文章转载自:

    http://uJXgT4Hq.hLfsn.cn
    http://vDvLBovQ.hLfsn.cn
    http://JUwh23cF.hLfsn.cn
    http://XOwvyzUF.hLfsn.cn
    http://xg9yyXa1.hLfsn.cn
    http://lnmK8uMT.hLfsn.cn
    http://aIkx8bs9.hLfsn.cn
    http://Ja1HfGxD.hLfsn.cn
    http://VS3lwKFJ.hLfsn.cn
    http://VIm8HNWT.hLfsn.cn
    http://bjwVIuN8.hLfsn.cn
    http://AzvGCecI.hLfsn.cn
    http://1OmASU0k.hLfsn.cn
    http://EOSx0oG7.hLfsn.cn
    http://K2AfGc6p.hLfsn.cn
    http://ApLcetdN.hLfsn.cn
    http://VDPIdDem.hLfsn.cn
    http://h8iyxzFa.hLfsn.cn
    http://EPDxx786.hLfsn.cn
    http://kzG6tSIf.hLfsn.cn
    http://1HkNoSQk.hLfsn.cn
    http://E80tLz7w.hLfsn.cn
    http://eJAyNguR.hLfsn.cn
    http://THlrMUzC.hLfsn.cn
    http://VetgNqYh.hLfsn.cn
    http://sDqGrj5K.hLfsn.cn
    http://KOvKKShm.hLfsn.cn
    http://r4YalP9w.hLfsn.cn
    http://u3eoE7CZ.hLfsn.cn
    http://yUrfPXq4.hLfsn.cn
    http://www.dtcms.com/a/373230.html

    相关文章:

  • flutter日期选择国际化支持
  • 最短路算法和最小生成树算法详解
  • 2005–2021年中国城市级终端能源消费(含可再生能源)综合数据集
  • Redis入门(部署、持久化、缓存问题)
  • 聊一聊 .NET 中的 CompositeChangeToken
  • 视觉语言模型应用开发——Qwen 2.5 VL模型视频理解与定位能力深度解析及实践指南
  • 深入理解 MDC(Mapped Diagnostic Context):日志记录的利器
  • 工业相机如何通过光度立体成像技术实现高效精准的2.5D缺陷检测
  • qt+halcon开发相机拍照软件步骤
  • cs61A lab01
  • 大数据毕业设计选题推荐-基于大数据的国家医用消耗选品采集数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • Oracle APEX 利用卡片实现翻转
  • Spring Security AuthenticationManager 接口详解与实战
  • 人机协同的智慧共生平台:跨学科知识中心暨融智中心,从认知到实践的闭环自动转化
  • AG32 ( MCU+FPGA二合一 )是如何卷入了三相电能计量市场的
  • 2025年- H119-Lc88. 合并两个有序数组(数组)--Java版
  • 树莓派 Ubuntu 24.04 开机换源总结
  • 简单的 k8s 部署分布式Go微服务集群实例
  • 旅行社旅游管理系统的设计与实现(代码+数据库+LW)
  • Three.js shader内置矩阵注入
  • 在公用同一公网IP和端口的K8S环境中,不同域名实现不同访问需求的解决方案
  • 【MFC视图和窗口基础:文档/视图的“双胞胎”魔法 + 单文档程序】
  • Cocos creator3.x 处理 16KB 问题
  • 【MFC文档与视图结构:数据“仓库”与“橱窗”的梦幻联动 + 初始化“黑箱”大揭秘!】
  • 【MFC】对话框属性:Use System Font(使用系统字体)
  • springboot3.3.5 集成elasticsearch8.12.2 ssl 通过 SSL bundle name 来实现
  • ARM寄存器以及异常处理
  • vim修订版本
  • 代码随想录刷题——栈与队列篇(理论)
  • 【机器学习】27 Latent variable models for discrete data