软件设计师教程(第三版)(修订版)8至11章笔记

2024-01-06 20:08

本文主要是介绍软件设计师教程(第三版)(修订版)8至11章笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据结构 《== 线性、非线性(树、图)
线性表 《== 顺序存储(随机存取方便,插入/删除需要移动元素)、链式存储

 

静态查找表对顺序、链式存储都适用
顺序查找-平均查找长度 ASL=(n+1)/2    监视哨
折半查找-(对已排序,过程可以用一颗二叉树描述-折半查找判定树) p444
         n个结点的判定树深度为 (log2n)+1 ,即最多查找这么多次
         平均查找长度 ASL=( ((n+1)/n) * (log2(n+1)) ) -1 ,n较大时ASL约等于(log2(n+1))-1
分块查找-又称索引顺序查找,效率介于顺序和折半查找之间
         平均查找长度 ASL=(b+1)/2 + (s+1)/2 = 1/2 * (s/n +s) +1  (均分为b块,每块s个记录)
                      当s取sqrt(n)时,ASL取最小值sqrt(n)+1,此时效率比顺序要好得多,但远不及折半

动态查找表(表结构本身是查找过程中动态生成)
二叉排序树-又称二叉查找树 p447 p449
平衡二叉树(AVL树)
B-树

哈希表查找 - 构造哈希表(直接定址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法)
             解决冲突(开放定址法(线性探测法)p456、链地址法(拉链法)、再哈希法、建立一个公共溢出区)
             填装因子alpha=表中装入记录数/哈希表长度
             alpha标志着哈希表的装满程度,越小则冲突可能性越小,越多则填入的数据越多,冲突可能性越大,查找时比较的关键字个数也越多

排序-稳定、不稳定,内部排序、外部排序
简单排序 - 直接插入-稳定,时间复杂度O(n^2),空间复杂度O(1),仅需要一个辅助空间用于元素交换
           冒泡-稳定,时间复杂度O(n^2),空间复杂度O(1)
           简单选择-不稳定,时间复杂度O(n^2),空间复杂度O(1)
希尔排序 - 缩小增量排序,对直接插入排序的改进 p461  不稳定,时间复杂度约为O(n^1.3),空间复杂度O(1)
快速排序 - p462  不稳定,时间复杂度O(n * logn),空间复杂度O(logn)
           若初始记录序列有序或基本有序时,则退化为冒泡排序,时间复杂度为O(n^2)
堆排序 - p464  不稳定,对大量记录很有效时间复杂度O(n * logn),空间为记录大小
归并排序 - 两路归并 p466 时间复杂度为O(n * logn),空间为记录大小
基数排序 - 稳定 总运算时间O(d*(n+r))


( 1 )若待排序的记录数目n 较小时, 可采用插入排序和简单选择排序。由于直接插入排序
.所需的记录移动操作较简单选择排序多,因而当记录本身信息量较大时,用简单选择排序方法
较好。
(2) 若待排序记录按关键字基本有序,则宜采用直接插入排序或冒泡排序。
(3)当n 很大且关键字的位数较少时,采用链式基数排序较好。
(4) 若n 较大,则应采用时间复杂度为O(nlogn)的排序方法,例如快速排序、堆排序或归
并排序。快速排序目前被认为是内部排序方法中最好的方法,当待排序的关键字为随机分布时,
快速排序的平均运行时间最短:但堆排序只需l 个辅助存储空间, 并且不会出现在快速排序中
可能出现的最坏情况。这两种排序方法都是不稳定的排序方法。若要求排序稳定,可选择归并
排序。通常可将归并排序和直接插入排序结合起来使用。先利用直接插入排序求得较长的有序
子序列,然后再两两归井。因为直接插入排序是稳定的,所以改进的归并排序是稳定的。
前面讨论的内部排序算法〈除基数排序外〕都是在~维数组上实现的。当记录本身信息量
较大时,为避免括费大量的时间移动记录,可以采用链表作为存储结构, 在这种情况下, 希尔
排序、快速排序和推排序就不适用了。


外部排序一般用归并(多路平衡归并) p471


算法 《== 有穷性、确定性、可行性、输入、输出
算法设计 《== 动态规划法、贪心法、回溯法、分支限界法、概率算法、近似算法
算法分析 《== 时间复杂性(最佳/最坏/平均情况)、渐进符号p476、递归式(展开法、代换法、递归树法、主方法)p477
算法表示 《== 自然语言、流程图、程序设计语言、伪代码

分治法 -- 递归 - 边界条件(终止条件(递归出口)),递归模式(大问题转小(递归体))
          在每层递归上都有分解、求解、合并三个步骤
          应用:归并排序p480、最大子段p481
动态规划 -- 最优子结构、重叠字问题特征,可以使用求解
            应用:背包问题p484、最长公共子序列p486
贪心法 -- 最优子结构、贪心选择性质,可以使用求解
          应用:活动选择p489、背包问题p491
回溯法 -- 深度优先系统搜索,问题解空间(空间树),可以使用非递归或递归p494
          应用:背包问题p495、n皇后问题p498
分支限界法 -- 队列
概率算法 -- 数值概率算法、蒙特卡罗算法、拉斯维加斯算法和合伍德 算法
近似算法 -- 多项式时间算法,放弃求最优解,而用近似最优解代替最忧解
            衡量标准:算法的时间复杂,解的近似程度


面向对象=对象+分类+继承+通过消息的通信
面向对象分析 -- 认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息
面向对象设计 -- 由概念模型生成的分析模型被装入到相应的执行环境中时,还需要修改
面向对象软件的测试 -- 算法层、类层、模板层、系统层
OOA 模型 (is-a,has-a) -- 层次: 主题层、对象类层、结构层、属性层、服务层
                      -- 活动: 标识对象类、标识结构、定义主题、定义属性、定义服务
Booch认为软件开发OOD是一个螺旋上升的过程
OMT模型 -- 对象模型(对象、类、继承、链和关联、泛化、聚集、模块)、
           动态模型、
           功能模型
OMT方法步骤 -- 分析、系统设计、对象设计和实现
UML -- 结构事物、行为事物、分组事物、注释事物
创建型设计模式 《== Singleton p535
结构型设计模式(不是对接口和实现进行组合,而是描述了如何对一些对象进行组合) 《== Adapter模式、Composite模式、Flyweight模式、Decorator模式
行为设计模式 《== TemplateMethod、ChainofResponsibility、Observer模式p538

 

标准化对象 《== 具体对象、总体对象
标准化过程 《== 标准制定(总结/积累经验)、实施(推广/普及经验)、更新
标准范围分类 《== 国际标准(ISO、IEC)、国家标准(GB、ANSI、BS、JIS)、区域标准(PASC、CEN、ASAC、ARSO)、
                  行业标准(IEEE、GJB、DOD-STD)、企业(机构)标准、项目(课题)标准(CIMS)
    性质分类 《== 技术标准、管理标准、工作标准
    对象和作用分类 《== 基础标准、产品标准、方法标准、安全标准、卫生标准、环境保护标准和服务标准等
    法律约束性分类 《== 强制性标准、推荐性标准

知识产权 《== 工业产权(创造性成果权利和识别性标记权利)、著作权(版权)
知识产权特点 《== 无形性、双重性、确认性、独占性、地域性、时间性

 

这篇关于软件设计师教程(第三版)(修订版)8至11章笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577464

相关文章

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言