教材学习内容总结

第 1 章 概述

  1. 软件质量的特征:正确性、可靠性、健壮性、可用性、可维护性、可重用性(别人写的组件自己可以拿过来用)、可移植性、运行效率
  2. 数据结构:计算机存储、组织数据的方式

    程序 = 数据结构 + 算法

第 2 章 算法分析

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

b. 大O记法:

  • 渐进复杂度称为算法的阶次;
  • 渐进复杂度这一特性基于该表达式的主项(即表示问题大小n的表达式中增长最快的那一项),随着n的增长,常量与次项很快可以忽略不计
  • 大O记法的类别有多种,但相同两个类别的算法具有相同的算法,但是其增长函数不一定相同

c. 算法效率:通常用CPU的使用时间表示

d. 更快的CPU并不能影响主项,只会给增长函数增加常量(由此可见,需要重视算法分析)

e. 时间复杂度分析

  • 循环运行的复杂度分析:等于循环体的复杂度乘以该循环运行的次数
  • 嵌套循环的复杂度分析:需要考虑内层和外层循环
  • 方法调用的复杂度分析:(注:只有可运行的语句才会增加时间复杂度)

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

问题1:软件质量特征中的可靠性与健壮性的区别?
问题1解析:书本上定义:可靠性 “ 软件故障发生的频率和危险程度 ” ;健壮性 “ 出错情况下可以得到恰当处理的程度 ”。虽然说得清楚,一个是表示故障发生前的预测故障发生的频率,一个是故障发生后的机器处理的程度。但还是觉得理解不够清晰:健壮性是指程序在运行过程中出现一般性的错误,程序会自动进行错误处理函数(出错了也能继续运行的能力);可靠性(程序出错的概率的高低)是指程序在运行过程中出现错误的概率,一般会做一些可靠性试验来测试

【参考资料】百度知道

课后练习题

EX 2.1 下列增长函数的阶次是多少?

a. 10n^2+100n+1000 (找主项,忽略次项与常量:O(n^2))

b. 10n^3-7 (同上,O(n^3))

c. 2n+100n3 (随着n的增大,指数爆炸,O (2^n) )

d. n^2 ·log(n) (O(n^2 ·log(n)))

EX 2.4 确定下面代码段的增长函数和阶次:

for(int count = 0 ; count < n ; count++)
for(int count2 = 0 ; count2 < n ; count2 = count2 + 2)
{
System.out.println(count,count2);
}
}

这是一个嵌套循环的复杂度分析。内层循环每次都增加2,故循环了n/2次,外层循环了次,根据乘法准则,增长函数为 (n/2)*n = n2/2,则阶次为O(n2)

EX 2.5 确定下面代码段的增长函数和阶次:


for(int count = 0 ; count < n ; count++)
for(int count2 = 1 ; count2 < n ; count2 = count2 * 2)
{
System.out.println(count,count2);
}
}

这是一个嵌套循环的复杂度分析。内层循环每次变为前一次的2倍,则有2^x = n,即内层循环的次数x = (以2为底n的对数 - 1)次;外层循环了n次,根据乘法准则,增长函数为n(log(2)n-1),忽略掉次项,则阶次为O(O(nlog2n))(2是对数的底)

结对及互评

  • 博客中值得学习的或问题:

    • 侯泽洋同学的博客排版工整,界面很美观
    • 问题总结做得很全面
    • 对于书上的疑惑总会想办法解决它,这种探索的精神值得我去学习
  • 本周结对学习情况

    • 20172302
    • 结对学习内容
      • 第一、二章内容

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 4/4

20172308《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. mybatis入门基础----高级映射(一对一,一对多,多对多)

    阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...

  2. [转] Android 性能分析案例

    Android 系统的一个工程师(Romain Guy)针对Falcon Pro  应用,撰写了一个Android性能分析的文章.该文章介绍了如何分析一个应用哪里出现了性能瓶颈,导致该应用使用起来不流 ...

  3. php-url地址加密

    下面是可以将我们的url地址加密.确保我们提交的数据安全 以下是代码片段: <?php function keyED($txt,$encrypt_key) //定义一个keyED { $encr ...

  4. 20155236 2016-2017-2 《Java程序设计》第八周学习总结

    20155236 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 通用API 日志 1.日志API简介:java.util.logging包中提供了日志功能相 ...

  5. Oracle错误及解决方案

    1.ORA-00257:归档程序错误.在释放之前仅限于内部链接 问题原因:归档日志占满了空间 解决方法: .增加归档日志空间 alter system set db_recovery_file_des ...

  6. arm GIC介绍之四【转】

    转自:https://blog.csdn.net/sunsissy/article/details/73882718 GIC是ARM体系中重要的组件,在认识到GIC的组成和功能之后,了解到IRQ的大致 ...

  7. vistual studio 去除 git 源代码 绑定

    第一次碰到这个问题,想将源代码签入TFS管理.添加到源码管理后,默认添加到Git源码管理. 研究过后,发现: 1)删除框内文件 2)Vs->工具->选项->源代码管理->插件管 ...

  8. css初始化minireset.css

    一个很小的现代CSS重置,涵盖了基本内容: 重置字体大小:这样使用语义标记不会影响样式 重置块边距:所以只有在需要时才应用间距 重置表格:这样表格数据只占用它所需的空间 保留了行内间距:因此,按钮和输 ...

  9. 常用Javascript集锦【不定期更新】

    怎样用javascript删除某个HEML标签 document.getElementById(id).parentNode.removeChild(document.getElementById(i ...

  10. Selenium WebDriver如何模拟复制和粘贴

    以最简单的例子来说明,我们需要在bing搜索引擎中,输入并查询“Selenium自动化测试”几个字.可以很快就写出如下代码: String queryString = "Selenium自动 ...