软件设计师教程(第三版)(修订版)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

相关文章

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

python库fire使用教程

《python库fire使用教程》本文主要介绍了python库fire使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1.简介2. fire安装3. fire使用示例1.简介目前python命令行解析库用过的有:ar

LinuxMint怎么安装? Linux Mint22下载安装图文教程

《LinuxMint怎么安装?LinuxMint22下载安装图文教程》LinuxMint22发布以后,有很多新功能,很多朋友想要下载并安装,该怎么操作呢?下面我们就来看看详细安装指南... linux Mint 是一款基于 Ubuntu 的流行发行版,凭借其现代、精致、易于使用的特性,深受小伙伴们所喜爱。对

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min