20172333 2018-2019-1 《程序设计与数据结构》第一周学习总结

20172333 2018-2019-1 《程序设计与数据结构》第一周学习总结

教材学习内容总结

1.1 软件质量

  • 软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”
  • 软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的隐含特征的程度。
  • 影响软件质量的主要因素,这些因素是从管理角度对软件质量的度量,可划分为三组,分别反应用户在使用软件产品时的三种观点。正确性、健壮性、效率、完整性、可用性、风险(产品运行);可理解性、可维修性、灵活性、可测试性(产品修改);可移植性、可再用性、互运行性(产品转移)。图1

1.2 数据结构

  • 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
  • 数据结构:计算机储存、组织数据的形式。
  • 程序 = 数据结构+算法
  • 软件 = 程序 + 软件工程

    2.1 算法效率分析

  • 软件质量的特征之一是资源的使用效率。

    2.2 增长函数与大O记法

  • 增长函数(growth function)表示与该问题大小相对应的时间或空间的使用。表示问题(n)大小与我们希望最优化的值之间的关系。表示了该算法的时间复杂度或空间复杂度。
  • 渐进复杂度(asymptotic complexity)称为算法的阶次,随着问题大小的增加时增长函数的一般性质,这一性质取决于该表达式的主项,即n增加时表达式中增长最快的那一项。算法的阶次是忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出的。算法的阶次为增长函数提供了一个上界。

    第二个洗盘子算法具有阶次为n^2^的时间复杂度,记为O(n^2)。第一个洗盘子的事例,其增长函数为t(n)=60n,其阶次为n,记为O(n)。

  • 这种记法称为O(n)或大O记法。无论问题是大是小,运行赋值语句和if语句一次,其复杂度就为O(1)。

    增长函数的比较

  • 如果算法的运算效率低,那么从长远来说,使用更快的处理器也无济于事。

    时间复杂度分析

  • 我们把算法中基本操作的执行次数作为算法时间复杂度的度量,所以时间复杂度就是算法基本操作的总次数。图2

  • 基本操作就是以求时间复杂度为目的的前提下,重复执行次数和算法的执行时间成正比的操作。简单来说,基本操作组成了算法,当基本操作都执行完毕的时候,算法也就结束了。
  • 要处理的数组元素个数为n个,而基本操作所执行的次数就是关于问题规模 n 的一个函数f(n),我们要求的基本操作的次数,就是去求函数f(n)。
  • 计算算法的时间复杂度就是给出相应的数量级
  • 当f(n)和n没有关系的时候,时间复杂度就是T(n)=O(1)。当f(n)和n为线性关系的时候,T(n)=O(n)。当f(n)和n为二次方关系的时候,T(n)=O(n²),以此类推~
  • 循环嵌套的时间复杂度计算需要将内层和外层循环考虑进来。

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

  • 问题1:循环嵌套的时间复杂度是否有通式
  • 问题1解决方案:具体问题需要具体分析,目前已知的嵌套循环有只看内层时间复杂度,也有内外层时间复杂度相乘。

代码调试中的问题和解决过程

  • 暂无

代码托管

  • 截图暂无

上周考试错题总结

  • 暂无

结对及互评

基于评分标准,我给李楠的博客打分:7分。得分情况如下:

正确使用Markdown语法(加1分)

模板中的要素齐全(加1分)

教材学习中的问题和解决过程, (加3分)

代码调试中的问题和解决过程, 无问题

感想,体会真切的(加1分)

点评认真,能指出博客和代码中的问题的(加1分)

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172330李楠
    • 结对照片
    • 结对学习内容
      • 数据结构
      • 算法分析

        课后习题解答

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

a.10n^2+100n+1000
解答:阶次为n^2

b.10n^3-7
解答:阶次为n^3

c.2^n+100n^3
解答:阶次为n^3

d.n^2 ·log(n)
解答:阶次为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);
        }
}
  • 解答:内循环循环n/2次,外循环循环n次,故增长函数为F(n)=(n^2)/2,阶次为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);
        }
}
  • 解答:外层循环n次,内层循环log₂(n-1)次。故增长函数为F(n)=nlog₂(n-1),阶次为nlog₂(n-1)。

其他(感悟、思考等,可选)

新的学期开始了,希望可以学习不留账,能够跟进学习进度。

学习进度条

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

猜你喜欢

转载自www.cnblogs.com/yanyujun527/p/9614804.html