1 合法拓扑序列
【拓扑排序主要思想】
有向图可以拓扑排序的条件是:图中没有环。
具体方法:
⑴ 从图中选择一个入度为0的点加入拓扑序列。
⑵ 从图中删除该结点以及它的所有出边(即与之相邻点入度减1)。
反复执行这两个步骤,直到所有结点都已经进入拓扑序列。
参考:
计算拓扑序列
http://www.cnblogs.com/taoziwel/articles/1856432.html
2 UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系)、Association(关联关系)、Aggregation(聚合关系)、Composition(组合关系)五种
聚合:聚合关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。
组合:关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。Composition(组合关系)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。
关联:表现为变量(has a )。类与类之间的联接,它使一个类知道另一个类的属性和方法。例如如果A依赖于B,则B体现为A的全局变量。关联关系有双向关联和单向关联。双向关联:两个类都知道另一个类的公共属性和操作。单向关联:只有一个类知道另外一个类的公共属性和操作。大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可服用的类。
依赖:表现为函数中的参数(use a)。是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。
泛化:表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。
参考:http://www.51testing.com/html/93/n-234293.html
3 软件开发模型
瀑布模型:将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
(1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
(2) 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
(3) 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
适用于需求明确的项目,如2011年11月软考软件设计师-上午试题)—第27题
●若全面采用新技术开发一个大学记账系统,以替换原有的系统,则宜选择采用(瀑布模型)进行开发。
v模型:瀑布模型的变种,说明测试活动是如何与分析和设计相联系的。
喷泉模型:以用户需求为动力,以对象为驱动的模型.该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。
缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
螺旋模型:将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。螺旋模型沿着螺线进行若干次迭代。
(1) 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
(2) 风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3) 实施工程:实施软件开发和验证;
(4) 客户评估:评价开发工作,提出修正建议,制定下一步计划。
螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。但是,螺旋模型也有一定的限制条件,具体如下:
(1) 螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发。
(2) 如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。
(3) 软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险
演化模型:一种全局的软件(或产品)生存周期模型。属于迭代开发方法。
该模型可以表示为:第一次迭代(需求->设计->实现->测试->集成)->反馈->第二次迭代(需求->设计->实现->测试->集成)->反馈->……
即根据用户的基本需求,通过快速分析构造出该软件的一个初始可运行版本,这个初始的软件通常称之为原型,然后根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。采用演化模型的开发过程,实际上就是从初始的原型逐步演化成最终软件产品的过程。演化模型特别适用于对软件需求缺乏准确认识的情况。
参考:http://baike.baidu.com/view/8300.htm
原型模型:允许开发人员快速地构造整个系统或系统的一部分来理解或澄清问题。可以有效地捕获系统需求。
4 UML
业务用例和参与者一起描述组织或企业所支持的业务过程。业务用例描述了一系列动作的执行及产生对待特定业务主角具有价值的结果。
业务对象模型描述业务结构及结构元素如何完成业务用例。
5 算法策略
(1)分治算法 设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
典型应用:归并排序、最大子段和问题
(2)动态规划 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
典型应用:背包问题、最长公共子序列(LCS)
(3)贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法的基本思路:
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
贪心策略适用的前提是:局部最优策略能导致产生全局最优解
典型应用:迪杰斯特拉算法(用于求解图上的单源点最短路径,该算法an路径长度增次序产生最短路径。)、活动选择问题(若干个具有竞争性的活动要求互斥使用某一公共资源时,如何选择最大的相容活动集合)、背包问题。
(4)回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。
(5)分支限界法 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
典型应用:背包问题、皇后问题。
http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html
http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html
http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741375.html
4 模块独立性(采用模块间的耦合和模块的内聚度量)
一般来说,模块之间的耦合有7种类型,根据耦合性从低到高为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
(1)数据耦合 一个模块访问另外一个模块时,彼此直接通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入输出信息。
(2)标记耦合 一组模块通过数据结构本身传递
(3)公共耦合 一组模块都访问同一个公共数据环境
(4)内容耦合 一个模块直接访问另一个模块的内部数据、一个模块不通过正常人口转到另一个模块内部、两个模块有一部分程序代码重叠或一个模块有多个入口。
相关推荐
"数据库期末复习笔记自用" 在本文中,我们将对数据库相关的知识点进行总结和解释。 首先,让我们从数据库的基本概念开始。数据库是一种存储和管理数据的系统,它由数据库管理系统(DBMS)、数据库应用程序和数据库...
本文档提供了深度学习期末复习资料,涵盖了深度学习的基本概念、机器学习流程、梯度下降法、交叉熵、学习率、过拟合和欠拟合、线性可分与线性不可分、激活函数、卷积运算等知识点。 1. 深度学习基本概念: 深度...
【人工智能期末复习资料自用】 在人工智能领域,状态空间图是一种重要的问题表示和解决方法,尤其在规划和搜索算法中。状态空间图是由状态和操作算子构成的符号体系,用于表示系统的各种状态以及状态之间的转换关系...
有关马工程宏观经济学教材的笔记整理
这份名为“大学物理课程ppt(bupt)期末复习自用”的资料集合是北京邮电大学(BUPU)大学...通过深入学习和练习,学生可以系统地复习和掌握大学物理的各个重要知识点,提高考试成绩,并为后续的科学学习打下坚实的基础。
数据库期末复习笔记是 MySQL 数据库知识点的总结,涵盖了数据库的基本概念、数据类型、 SQL 语句、数据库操作和表操作等方面的知识点。 一、数据库基本概念 * 数据库(Database):是一个存储有结构化数据的仓库,...
综上所述,软件工程的知识点包括软件团队的组织、编码规范、代码复审、版本控制、软件生命周期、软件过程模型、敏捷开发、需求工程等。掌握这些知识点对于软件工程师来说至关重要,因为它们是构建高质量软件产品和...
总结来说,这个89C52LED点阵实例涉及了单片机编程、数字电路、I/O接口设计、图像处理、定时器和中断等多个知识点。通过学习和实践这个实例,不仅可以掌握89C52单片机的基本操作,还能提升在硬件与软件集成方面的技能...
### 字符串问题蓝桥杯知识点详解 #### 一、字符统计问题 ##### 1. 问题描述 在本问题中,我们需要处理一个输入的字符串,并统计其中各个大写字母出现的频率。最终目的是找到出现次数最多的字母。由于只考虑大写...
总结起来,89C52RC串口向电脑发数据涉及了串口初始化、波特率设定、数据发送与接收、中断处理等多个环节,理解并掌握这些知识点对于进行89C52RC的嵌入式开发至关重要。通过实践和调试,可以实现高效可靠的串口通信。
使用场景及目标:适用于数据结构课程的学习、备考复习和项目实践中的技术参考。旨在帮助读者全面掌握数据结构的基础知识、深入理解和灵活运用数据结构的具体实现。 其他说明:文档不仅包含了详细的理论知识介绍,...
5. 复习:定期回顾做过的题目,确保知识点的牢固掌握。 通过反复的练习和总结,可以有效地提高高数水平,为考研数学二做好充分准备。这套资料中的1800题覆盖了广泛的高数知识点,将帮助考生全面、深入地理解和运用...
辩证唯物主义认识论是哲学中的重要组成部分,主要探讨了人如何通过实践活动获取知识,以及认识与实践之间的相互关系。...深入理解和掌握这些知识点,对于提高高考成绩和培养批判性思维能力具有重要意义。
通过分析历年高考真题,考生可以了解这些知识点在实际问题中的应用,并通过模拟练习来提高答题技巧。备考时,应关注时政热点,将理论知识与实际问题相结合,灵活运用认识论原理进行分析。 总之,辩证唯物主义认识论...
中级会计师《中级会计实务》中的第六章投资性房地产是考试中的一个重要章节,主要涉及的是企业持有以获取租金或资本增值目的的房地产。...历年试题和经典例题是很好的复习资料,可以帮助考生巩固对这些知识点的掌握。
向量的数量积(点积)定义为两个向量模长的乘积与它们夹角余弦的乘积,公式为a·b = |a|×|b|×cosθ,其中θ为两向量之间的夹角,范围在[0°, 180°]。数量积不满足结合律。 通过这些基本概念和运算,我们可以解决...
以下是对这份复习资料中涉及的一些知识点的详细说明: 1. 题型与分数分配: - 单项选择题(20分):考察基础概念和术语的理解。 - 多项选择题(15分):测试对复杂情境的判断和多角度理解。 - 简答题(10分):...
《中级财务会计一》期末复习要求的说明涵盖了多个财务会计的核心知识点,主要涉及课程的考核方式、题型以及具体的复习内容。以下是对这些知识点的详细解释: 1. 考核方式与分数比重:课程成绩由形成性考核(30%)和...
在上述的税务会计复习题中,涉及了多个关键知识点,包括增值税的计算、进项税额的抵扣、销项税额的确认以及特殊交易的税务处理。下面逐一详细解释: 1. **进项税额与销项税额**:进项税额是指企业购进货物或接受...
自已记的网工笔记,根据查漏补缺,将知识点录下,便于复习。现共享给志同道合的朋友。