本文主要是介绍软件设计师教程(第三版)(修订版)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章笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!