用递归进行二叉树的三种遍历
用递归进行二叉树的遍历比较简单,三种遍历分别为前序遍历、中序遍历和后序遍历。在写遍历代码时,被卡在怎么样自动建立一个二叉树这一块。想建成每层按顺序时生成的二叉树,还真有点困难。没想出什么好的办法,就在main中用了比较恶心的办法,手动调用,汗。
生活的天平本不平衡,只有通过努力改变其偏向。
用递归进行二叉树的遍历比较简单,三种遍历分别为前序遍历、中序遍历和后序遍历。在写遍历代码时,被卡在怎么样自动建立一个二叉树这一块。想建成每层按顺序时生成的二叉树,还真有点困难。没想出什么好的办法,就在main中用了比较恶心的办法,手动调用,汗。
演唱:李亮
来自安徽麦势力团体的说唱高手。平时内向安静的他,听到节奏时并会让你判若两人,似乎安静的时候总在构思歌词跟节奏。尤其是用家乡话唱的时候,独具一格的演唱形式更会让你过耳不忘,堪称一绝。签约百…
标签: 生活
数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库。甚至设计出错误的数据库。而想要理解并掌握范式却并不是那 么容易。教科书中一般以关系代数的方法来解释数据库范式。这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆。
本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述。但对于初学者应该是个不错的入门。我写下这些的目的主要是为了加强 记忆,其实我也比较菜,我希望当我对一些概念生疏的时候,回过头来看看自己写的笔记,可以快速地进入状态。如果你发现其中用错误,请指正。
1. 并 符号表示 R∪S, 将关系R和S中的组元进合并,去掉重复的组元。
2. 差 符号表示 R-S, 将关系R中和关系S相同的组元去掉,组成新的关系。
3. 积 符号表示 R×S, 将关系R与S中每一个组元相组一次。如果R和S的基数分别是2和3,那个积过之后生成的新的关系的基数是6。
4. 投影 符号表示 πA(R) 取关系R中的A列的所有元数和组元,组成新的关系.其中A也可以是一个逻辑表达式或列表,比如(c,d)、 (e
6. 交 符号表示R∩S 取关系R和S中共同的元数和组元,组成新的关系。
7. 联接 符号表示R |×| S 取关系R和S中满足一定条件的元数和组元。
8. 除 符号表示R ÷ S 先取得关系S的象集,再去关系R中取不包S的元数的组元,得到一组象集。取该象集中包含S的象集,R中的取象集的那组组元就是除的值。(实再难以描述)
DBMS(Database Management System)功能:对共享的数据进行有效的组织、管理与存取。有以下几个方面:
1. 数据定义,主要是采用数据库定义语言(DDL)对数据库的结构进行描述;数据库的完整性描述;完全保密定义;这些定义保存在数据字典中,是DBMS运行的基本依据。
2. 数据库操作,主要是采用数据库操作语言(DML)进行操作。如执行检索、插入、修改和删除。
3. 数据库运行管理,
4. 数据组织、存储与管理
5. 数据库的建立、与维护
6. 其他功能
作者:http://moitah.net/
运行环境:需要.Net Framework 2.0支持
开发语言:C#
编译器:VS2005
使用方法很简单将FLV文件拖上去即呀,特点速度快。由于C#不熟悉,大细看了一下Source,MP3和AVI部分用好像用了第三方的类库,如果想了解FLV的格式的,要以参考一下。
系统分析的目标和任务:对现行系统进一步详细调查,将调查的结果进行文档化整理,调查侧重于从业务过程的角度分析。 最终确立系统分析报告,即系统方案说明书。
系统分析的主要步骤:
1.认识当前的现实环境,分析出当前的“物理模型”
2.从当前的“物理模型”,抽象出当前的“逻辑模型”
3.从对当前的”逻辑模型“,进行修改、增加以及优化,生产目标系统的”逻辑模型“
4.从目标系统的”逻辑模型“,建立目标系统的”物理模型“。
六年前,我刚热恋”面向对象”(Object-Oriented)时,一口气记住了近十个定义。六年后,我从几十万行程序中滚爬出来准备写点心得体会时,却无法解释什么是”面向对象”,就象说不清楚什么是数学那样。软件工程中的时髦术语”面向对象分析”和”面向对象设计”,通常是针对”需求分析”和”系统设计”环节的。”面向对象”有几大学派,就象如来佛、上帝和真主用各自的方式定义了这个世界,并留下一堆经书来解释这个世界。
1. 成本估算。由于软件的可视性差、定量化难的点,导致软件的成本估算比较困难,一般借助于以往的开发类似项目的经验进行估算。
A. 成本估算方法
1).自顶向下估算方法。借助于以往的开发类似项目经验,从整体上进很估算,然后按阶段、步骤和工作单元进行估算。其特点对系统工作的重视,工作量小、速度快。
2).自底向上估算方法。将待开发的软件进行细分,分别估算出每个细节所需的工作量,然后将他们加起来,得到软件的总量。特点是估算比较准备,往往缺少对软件的整体系统级工作量估算不足,故一般这种估算方法都会偏低。
3).差别估算法。根据类似项目的成本估算,列出不同之处,并估算出不同之处的成本,然后导出软件的总成本。
4).专家估算法。利用一个或多个专家对项目进行估算,其精度成于专家对项目了解的精度。
5).类推估算法。
6).算式估算法。
B. 成本估算模型。主要分为Putnam模型和COCOMO模型。
1).Putnam模型。是一种动态多变量模型。
2).COCOMO模型。结构性成本模型,他是最精确、最易于使用的成本估算型之一。
2. 风险分析
A.风险识别。系统化地确定对项目计划(估算、进度、资源分配)的威胁。一个主要方法就是建立风险条目检查表。
B.风险预测。分为两个方面,一个是风险产生的概率,第二个是如果风险产生的后果。
C.风险评估
D.风险控制
3. 进度管理。进度的合理安排是如期完成软件项目的重要保证,也是合理分配资源的重要依据。
进度的安排方式:系统最终交付日期已确定和系统最终交付的大体上已确定,具体日期有开发部分确定。
进度的安排常用图形描述方法:Gantt图(某特图)和计划评审技术PERT图。
Gantt图:以横坐标为时间,纵坐标为任务的方式,展现出每个任务之间的进度,什么时间开始什么时间结束。但反应不出来任务间的依赖关系。
PERT图:PERT图是以一个有向图,图中的箭头表示任务,箭头上方标识任务的持续时间和松弛时间。
4. 人员管理。合理的人员管理有得于发挥每个人的作用,有得于项目的成功开发,可以对人员进行分组管理。
1. 需求分析任务。确定待开发软件的功能、性能、数据、界面等要求。
* 系统的综合要求。
界面要求:描述系统的外部特殊,即系统从外部输入哪些数据,输出哪些数据
系统功能:列出软件系统必需要完成的功能
系统性能:如系统的响应时间、吞吐量、处理时间、对主存等设备的要求。
安全性、保密性方面和可靠性方面的要求。
系统的运行要求:列出系统运行什么样的软硬件要求。
异常处理要求:列出如果出现异常,应采用的措施。
将来的扩展要求:预留将来进行扩展和修改。
* 分析系统的数据要求。主要包括系统中的主要数据元素、数据元素之间的关系、数据量、峰值等。
* 导出系统的逻辑模型。结构化程序可能流量图来描述,面向对象的设计可用类对像模型描述。
* 修正项目开发计划。当了解到用户真正意图以后,对项目开发计划进行修改。
* 可开发一个原型系统。当用户需求是很明确的情况下,需要开发一个演示模型,来验证用户需求。
需要分析主要明确的是“做什么”的问题,而不是“怎么做”的问题,“怎么做”是设计阶段要完成的工作。
2. 需求分类。软件需求是系统必须完成的事,以及必须具备的品质。主要包括功能需求、非功能需求和设计约束。
功能需求:系统所必须具备的功能。
非功能需求:系统所具备的一些属性,如性能、可靠性、响应时间、容错性等。
设计约束:通常是对解决方案的一些约束说明。
3. 需求分析方法
4. 需求工程
Security Development Lifecycle (SDL) Banned Function Calls
url:http://msdn.microsoft.com/en-us/library/bb288454.aspx
软件生存周期:
* 可行分析与项目开发计划 -> 需求分析 -> 概要设计 -> 详细设计 -> 编码 -> 测试 -> 维护。可行分析与项目开发计划:要解决什么问题?用什么方法解决?是否可行?费用大概多少?时间大概多长?
主要参与人员:用户、项目负责人和系统分析师。
产生文档:可行性分析报告和项目开发计划。
* 需求分析:确定系统必需要做什么,并不是具体解决问题,确定软件的功能、性能、数据、界面等,确定系统的逻辑模型。
主要参与人员:用户、项目负责人和系统分析师。
产生文档:需求说明书
* 概要设计:将软件的各个功能需求转化为需要的体系结构。确定系统由哪些模块组成,模块间调用关系以及确定系统的数据结构。
主要参与人员:软件设计师和系统分析师
产生文档:概要设计说明书。
* 详细设计:确定各个模块的详细功能及实现方法。
主要参与人员:软件设计师和程序员
产生文档:详细设计文档
* 编码:将上面的设计转化成具体的代码。
主要参与人员:软件设计师和程序员
产生文档:软件开发方档
* 测试:为了保证系统的稳定性,需要进行严格的测试。确保系统的功能完整性和稳定性。
主要参与人员:另一个部门的软件设计师或系统分析师以及测试人员
产生文档:软件测试计划和测试报告。
* 维护:这个阶段是软件生命期中最长一部分,是指系统交付使用后到软件报废这段时间,期间需要对所发现的Bug进行修复。