计算机二级考试部分笔记

相信开源的精神 我为人人,人人为我!

Question 1

二叉树

100946_Mqmt_1580640.png 

满二叉树最底层全部都有数据。

 

101008_RXUK_1580640.png 

 

完全二叉树,每个节点都优先有左边的分支(前驱结构)。

101021_sVkm_1580640.jpg         

 


101101_dBiv_1580640.jpg


一颗满二叉树,也是完全二叉树。(满二叉树是完全二叉树中的特例)

 

“如果一颗具有n个结点的深度为K的二叉树(A),它的每一个结点都与深度为K的满二叉树(B)中编号为1~n的节点一一对应”

 

意思就是 深度为K的二叉树(图A中的110结点 与深度为K的满二叉树(B)110结点 一一对应。

 

===================================================================================

Question 2

二叉树的度

结点:指二叉树中一个个的点,就是下图中的0123456

度:指父结点下面有几个孩子结点,举两个例子你就明白了。针对结点1,他下面有两个孩子34,所以说结点1的度为2;针对结点4,他下面一个孩子都没有,所以说结点4的度为0

101516_AXcB_1580640.jpg 

 

对任何一颗二叉树,度为0的节点(即叶子节点)总是比度为2的结点多一个。

101527_fZWZ_1580640.png 

  在任意-棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则no=n2+1

 

证明:因为二叉树中所有结点的度数均不大于2,所以结点总数(记为n)应等于0度结点数、1度结点(记为n1)2度结点数之和:

                      n=no+n1+n2 (式子1)

另一方面,1度结点有一个孩子,2度结点有两个孩子,故二叉树中孩子结点总数是:

                      n1=2n2

树中只有根结点不是任何结点的孩子,故二叉树中的结点总数又可表示为:

                      n=n1+2n2+1 (式子2)

由式子1和式子2得到:

             no+n1+n2=n1+2n2+1

                      no=n2+1

=========================================================

Question 3

O(n2)是什么意思

数据结构中的问题,时间复杂度的表示,这里是n的平方。

// O(n):  一维循环
for(i=0;i<100;i++)

// O(n^2): 二维循环
for(i=0;i<100;i++)
   for(j=0;j<100;j++)

101733_tVax_1580640.jpg

感觉写错了,应该是 O(n2)。意思是快速排序需要进行2次排序运算才能完成。

【参考】算法时间复杂度Θ(n2)与 O(n2)  http://my.oschina.net/caomenglong/blog/382858


=================================================================

Question 4

数据流程图中的 源和潭

113826_S8EF_1580640.jpg

数据源(终点)。代表系统之外的实体,可以是人、物或其他软件系统。

113838_vMN4_1580640.png

113838_0AxT_1580640.png

=================================================================

Question 5

抽象,高内聚,低耦合

113928_FlOO_1580640.jpg

抽象是软件面相对象开发过程中的必要过程。

比如 人,龙,猪,这些实体,我们可以找到共性,并提取出来。

动物就是这三个实体的抽象。

面向对象中我们程序员喜欢把,实体先抽象成一个公用的类(模型)。然后再定义其他的模型(类)继承它。这个过程叫抽象。

 

一个完整的系统,模块与模块之间,尽可能的使其独立存在。

也就是说,让每个模块,尽可能的独立完成某个特定的子功能。

模块与模块之间的接口,尽量的少而简单。

如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。

这样有利于修改和组合。

 

高耦合低内聚,好像写错了吧。我们实际开发中,不可能高耦合的,那样代码就像一坨泥一样全部混在一起了,修改都很麻烦的。所以应该是 低耦合。我们工作中还刻意要注意这个问题呢,时刻要注意代码的能解耦。达到高性能。


114007_uzKP_1580640.jpg

好的软件设计要达到:高内聚低耦合

什么是高内聚、低耦合?

    起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准――耦合性和内聚性。

    耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

    内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。  

    耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。

    有个例子很容易明白:一个程序有50个函数,这个程序执行得非常好;然而一旦你修改其中一个函数,其他49个函数都需要做修改,这就是高耦合的后果。

一旦你理解了它,你编写概要设计的时候设计类或者模块自然会考虑到“高内聚,低耦合”。


转载于:https://my.oschina.net/caomenglong/blog/382872

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值