20172302 《程序设计与数据结构》第一周学习总结

Posted hzy0628

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172302 《程序设计与数据结构》第一周学习总结相关的知识,希望对你有一定的参考价值。


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


教材学习内容总结

第一章 概述

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 < n2< n3 < 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(n2)

  • 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(n2)

时间复杂度的计算规则

  • 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)。

课后练习题解答

其他(感悟、思考等)

感悟

参考资料

以上是关于20172302 《程序设计与数据结构》第一周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

20172302 《程序设计与数据结构》第三周学习总结

20172302《程序设计与数据结构》实验三 敏捷开发与XP实践报告

20172322 《程序设计与数据结构》第一周学习总结