20172302 《Java软件结构与数据结构》第一周学习总结


2018下半年学习总结博客总目录:第一周
html


教材学习内容总结

第一章 概述

1.软件质量

软件工程(Software Engineering)是一门关于高质量软件开发的技术和理论的学科。算法

软件质量从如下八个方面进行考虑:数组

  • 正确性 按照需求规范所规定的那样处理问题,在很大程度上知足其特定需求
    • 1、程序语法错误。
    • 2、程序对于几组输入数据可以得出知足须要的结果。
    • 3、程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据可以得出知足要求的结果。
    • 4、程序对于一切合法的输入数据都能获得知足要求的结果。
  • 可靠性 应尽量减小发生故障的频率,同时下降发生故障时所形成的损失
  • 健壮性 在异常的状态可以对异常进行处理,而非发生异常就形成终止 。当输入的数据非法时,算法应当恰当的作出反应或进行相应处理,而不是产生莫名其妙的输出结果。而且,处理出错的方法不该是中断程序执行,而是应当返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。
  • 可用性 软件的使用过程当中的难易程度
  • 可维护性 对软件部分代码进行修改的难易程度
  • 可重用性 软件组件可重用于其余软件系统开发的难易程度
  • 可移植性 软件组件在不一样计算机环境下使用的难易程度
  • 运行效率 在不浪费资源的状况下软件完成其目标的程度

2.数据结构

数据结构:把多个数据按照必定的存储方式,存储起来,称存储方式之为数据结构.
数据的存储方式有不少,数组,队列,链表,栈,哈希表等等. 不一样的数据结构,性能是不同的,好比有的插入比较快,查询比较快,可是删除比较慢. 有的删除比较快,插入比较快,可是查询比较慢. 根据实际操做,合理选择便可.
数据结构

不一样数据结构之间比较
函数

第二章 算法分析

算法分析(analysis of algorithm)是计算机科学的基础,它是从效率角度对算法进行分类。
算法效率一般用CPU的使用时间来表示。性能

增加函数与大O记法

  • 增加函数是表示问题(n)大小与咱们但愿最优化的值之间的关系,该函数表示了该算法的时间复杂度或空间复杂度。学习

  • 渐进复杂度(asymptotic complexity)称为算法的阶次,随着问题大小的增长时增加函数的通常性质,这一性质取决于该表达式的主项,即n增长时表达式中增加最快的那一项。优化

  • 大O记法:咱们将算法具备阶次为n的时间复杂度,记为O(n)。
    3d

增加函数的比较

  • 在给定时间内系统所能处理的最大问题,咱们将处理器的速度提升10倍,这时再有系统所能处理的最大问题,见下表

  • 各类增加函数之间的比较
    • n 较小时
    • n 较大时
  • 结论:c(常量)<㏒₂n < n < n㏒₂n < n²< n³ < 2ⁿ < 3ⁿ< n!

时间复杂度分析

  • 1.循环运行的复杂度分析
    首先肯定循环体的阶n,而后乘以循环执行的次数
for (int count = 0; count < n; count++)
{
  // 复杂度为O(1)的步骤系列
}

n * O(1) →O(n)code

  • 2.嵌套循环的复杂度分析
    循环出现嵌套时,循环的复杂度等于内层循环的复杂度乘之外层循环的复杂度
for (int count = 0; count < n; count++)
    for (int count2 = 0; count2 < n; count2++)
    {
        //复杂度为O(1)步骤系列
    }

内外层循环的复杂度均为O(n),总体的复杂度为O(n²)

  • 3.方法调用的复杂度分析

循环体可能包含方法的调用,要肯定循环体的阶,须要考虑调用方法的阶

for (int count=0 ;  count<n; count++)
{
Printsum(count);
}

如下是Printsum方法

Public void printsum(int count)
{
Int sum =0;
for(int i=0; i<count; i++)
sum += i;
System.out.println(sum);
}

因而总体的复杂度为O(n²)

时间复杂度的计算规则

  • 1) 加法规则
    T(n,m) = T1(n) + T2(n) = O (max ( f(n), g(m) )

  • 2) 乘法规则
    T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))

  • 3) 一个特例(问题规模为常量的时间复杂度)
    在大O表示法里面有一个特例,若是T1(n) = O(c), c是一个与n无关的任意常数,T2(n) = O ( f(n) ) 则有T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) )。也就是说,在大O表示法中,任何非0正常数都属于同一数量级,记为O(1)。

教材学习中的问题和解决过程

  • 可靠性与健壮性之间的关系是什么?

  • 可靠性关注的是软件发生故障的频率以及在什么环境下发生故障,而健壮性关注的是软件系统出现故障会发生什么?

系统的健壮性(robustness)也称为系统的坚固性或坚实性,这是衡量一个系统可否从各类出错条件下恢复能力的一种测度。引发出错的条件能够是来自系统内部,也能够是系统外部的。好比:一个健壮的系统能够允许数据输入的错误,也能够容许内部组成部件的故障。虽然在健壮性与可靠性之间有着必定的联系,可是二者是不一样的测度。

课后练习题解答

  • EX2.1 下列增加函数的阶次是多少?
    a.10n^2+100n+1000 n^2
    b.10n^3-7 n^3
    c.2^n+100n^3 2^n
    d.n^2 ·log(n) n^2 ·log(n)

  • EX2.4 请肯定下面代码段的增加函数和阶次
for(int count = 0 ; count < n ; count++)  
    for(int count2 = 0 ; count2 < n ; count2 = count2 + 2)
        {
            System.out.println(count,count2);
        }
}

如题,内层循环是n/2,外层循环是n,故增加函数f(n) = n^2 /2,则阶次是O(n^2)。

  • EX 2.5 请肯定下面代码段的增加函数和阶次
for(int count = 0 ; count < n ; count++)
    for(int count2 = 1 ; count2 < n ; count2 = count2 * 2)
        {
            System.out.println(count,count2);
        }
}

如题,内层循环次数为log(2)n,外层循环次数n,因此增加函数是nlog(2)n,而阶次只与增加函数的最高阶项有关,忽略次项与常数项,故阶次是O(nlog2n)。

结对及互评

  • 本周结对学习状况
    • 20172308
    • 博客中值得学习的或问题: 课后练习题完成很认真,解析也比较详细,教材内容总结可增长些内容,侧重对知识的理解部分。

    • 结对学习内容:学习第一章及第二章。

其余(感悟、思考等)

感悟

  • 第一周的学习任务比较轻松,学习内容也比较简单。又到了一个新的起点,但愿可以保持最开始的状态去学完这一学年,完成好这门课程。

参考资料

相关文章
相关标签/搜索