2018下半年学习总结博客总目录:[第一周](https://www.cnblogs.com/hzy0628/p/9606767.html)


教材学习内容总结

第一章 概述

1.软件质量

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

软件质量从以下八个方面进行考虑:

  • 正确性 按照需求规范所规定的那样处理问题,在很大程度上满足其特定需求

    • 一、程序语法错误。
    • 二、程序对于几组输入数据能够得出满足需要的结果。
    • 三、程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据能够得出满足要求的结果。
    • 四、程序对于一切合法的输入数据都能得到满足要求的结果。
  • 可靠性 应尽可能减少发生故障的频率,同时降低发生故障时所造成的损失
  • 健壮性 在异常的状态能够对异常进行处理,而非发生异常就造成终止 。当输入的数据非法时,算法应当恰当的做出反应或进行相应处理,而不是产生莫名其妙的输出结果。并且,处理出错的方法不应是中断程序执行,而是应当返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。
  • 可用性 软件的使用过程中的难易程度
  • 可维护性 对软件部分代码进行修改的难易程度
  • 可重用性 软件组件可重用于其他软件系统开发的难易程度
  • 可移植性 软件组件在不同计算机环境下使用的难易程度
  • 运行效率 在不浪费资源的情况下软件完成其目标的程度

2.数据结构

数据结构:把多个数据按照一定的存储方式,存储起来,称存储方式之为数据结构.

数据的存储方式有很多,数组,队列,链表,栈,哈希表等等. 不同的数据结构,性能是不一样的,比如有的插入比较快,查询比较快,但是删除比较慢. 有的删除比较快,插入比较快,但是查询比较慢. 根据实际操作,合理选择即可.

不同数据结构之间比较

第二章 算法分析

算法分析(analysis of algorithm)是计算机科学的基础,它是从效率角度对算法进行分类。

算法效率通常用CPU的使用时间来表示。

增长函数与大O记法

  • 增长函数是表示问题(n)大小与我们希望最优化的值之间的关系,该函数表示了该算法的时间复杂度或空间复杂度。

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

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

增长函数的比较

  • 在给定时间内系统所能处理的最大问题,我们将处理器的速度提高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)

  • 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) )
    1. 乘法规则

      T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))
    1. 一个特例(问题规模为常量的时间复杂度)

      在大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.2n+100n3 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

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

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

其他(感悟、思考等)

感悟

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

参考资料

20172302 《Java软件结构与数据结构》第一周学习总结的更多相关文章

  1. 《JAVA程序设计》_第一周学习总结

    20175217吴一凡 <java程序设计> 第一周学习总结 虽然已经做好了心理准备,但第一周的学习任务着实让我忙了整整三天,还是挺充实的吧.寒假已经在自己的电脑上安装好了虚拟机,我就在我 ...

  2. 201521145048《Java程序设计管理》第一周学习总结

    1. 本周学习总结 学习并了解Java的发展与历史 在网上视频中学习Java 了解并区分JVM JRE JDK 将java与已学语言做比较,发现相同处 2. 书面作业 Q1.为什么java程序可以跨平 ...

  3. 20172329 2018-2019《Java软件结构与数据结构》第一周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第一周学习总结 在这学期就已经大二了,也已经步入了学习专业课的核心时间,在这个阶段,我们应该了解自己的学习情况,针对自己 ...

  4. 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...

  5. 《JAVA软件结构与数据结构》第一周学习总结

    学号 20172326 <JAVA软件结构与数据结构>第一周学习总结 教材学习内容总结 软件质量的几大特性 增长函数与大O记法 大O记法用来表示表示增长函数,从而来表示算法的复杂度 算法的 ...

  6. 20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第一周学习总结 教材学习内容总结 本周内容主要为书第一章和第二章的内容: 第一章 软件质量: 正确性(软件达到特定需 ...

  7. 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...

  8. 20172328 2018-2019《Java软件结构与数据结构》第三周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第三周学习总结 概述 Generalization 本周学习了第五章:队列.主要内容包含队列的处理过程.如何用对例如求解问 ...

  9. 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...

  10. 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现 ...

随机推荐

  1. 解决报错SAXNotRecognizedException: Feature 'http://javax.xml.XMLConstants/feature/secure-processing' not recognized

    今天调试appium脚本,发现运行脚本就报错 SAXNotRecognizedException: Feature 'http://javax.xml.XMLConstants/feature/sec ...

  2. SQL代码整理

    --SQL代码整理: create database mingzi--创建数据库go--连接符(可省略)create table biao--创建表( lieming1 int not null,-- ...

  3. gulp-px2rem-plugin 插件的一个小bug

    最近在使用这个插件的过程中发现一个bug: 不支持 含有小数的形式. 查看源码后,修改了下其中的正则,使其支持小数形式(66.66px..6px ). 作者的源码最近一次更新都在两年前,所以就简单的记 ...

  4. java selenium操作safari

    SafariDriver是一个Safari浏览器的扩展.和Firefox类似,在selenium-safari-driver-xxx.jar包中org.openqa.selenium.safari路径 ...

  5. python接口自动化测试二十七:加密与解密MD5、base64

    # MD5加密 # 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作 import hashlib def MD5(str): # 创建md5对象 hl ...

  6. python 全栈开发,Day110(django ModelForm,客户管理之 编辑权限(一))

    昨日内容回顾 1. 简述权限管理的实现原理. 粒度控制到按钮级别的权限控制 - 用户登陆成功之后,将权限和菜单信息放入session - 每次请求时,在中间件中做权限校验 - inclusion_ta ...

  7. python 全栈开发,Day5(字典,增删改查,其他操作方法)

    一.字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.存储大量的数据,是关系型数据,查询数据快. 列表是从头遍历到尾字典使用二分查找 二分查找也称折半查找(Bi ...

  8. centos7 下安装配置python3.6

    一.首先,官网下载python3的所需版本. wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 二.然后,解压缩文件> ...

  9. JS高级 - 面向对象5(继承,引用)

    <script type="text/javascript"> //------------------Person类 //(Person)的构造函数 function ...

  10. git的入门摸索和入门研究

    git官网:https://git-scm.com/ git教程---菜鸟教程:http://www.runoob.com/git/git-tutorial.html git教程---廖雪峰:http ...