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

课后练习题解答

其他(感悟、思考等)

感悟

参考资料

原文地址:https://www.cnblogs.com/hzy0628/p/9606767.html

时间: 2024-08-04 00:19:33

20172302 《程序设计与数据结构》第一周学习总结的相关文章

20172305 2017-2018-2 《程序设计与数据结构》第一周学习总结

20172305 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本书的第一章简单的介绍了计算机和JAVA的历史,基础内容很多,代码的讲解还没用正式进入,本周一直在做敲代码的准备,简单敲了老师给的"Hello World!"以及书后的PP1.3.PP1.4等简单的小程序. 教材学习中的问题和解决过程 问题1:三种不同类型的错误,运行错误和逻辑错误的混淆 问题1解决方案:针对EX1.20的"希望做加法时却做里乘法"进行了网上

20172314 2017-2018-2 《程序设计与数据结构》第一周学习总结

20172314 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本书第一章为计算机系统概述,前面是一些计算机相关的基础知识,让我对计算机有了一个总体的认识,不再是一片空白了,对主存储器和CPU影响深刻,主存储器用于保存程序和数据,CPU执行程序指令.在接下来的Java编程语言与程序开发部分,开始看的时候有点迷茫,不是很理解,后来先按照作业中附带的流程完成一些代码托管之后,接触了完整的简单的程序之后,再回过头来看书,看到的一些陌生的名词在脑海中就有了实际的对应,

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

20172317 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 重新温习了一遍计算机的基础 总算了解了局域网广域网因特网万维网这些东西之间的区别了 通过URL的例子知道了网址各个部分的含义 对Java编程语言和程序开发有了一个粗浅的了解 教材学习中的问题和解决过程 问题:练习题SR1.13出现了答案与题目不相符的情况 问题解决方案:题中有个选项是"网卡",答案中没有,反而有个题目没有的选项"调制解调器"(俗称"

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

20172301 <程序设计与数据结构>第一周学习总结 教材学习总结 第一章 软件的质量特征 正确性:软件能否有效处理问题 可靠性:软件发生故障的频率 健壮性:软件修复错误以及bug出现的频率 可用性:软件处理问题效率 可维护性:代码的整洁规范是否有利于维护 可重用性:使用已有的组件来减少开发工作量 可移植性:能在不同开发环境下能顺利运行 运行效率:提高软件运行效率,优化CPU时间和内存 数据结构 数据结构是计算机存储.组织数据的方式. 算法效率 算法效率是指算法执行的时间,算法执行时间需通过

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

20172322 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本周是新学期的第一周,也只有一节课,课上老师结合教材给我们讲了一堂课,主要内容如下: 高质量软件的主要特征:正确性.可靠性.健壮性.可用性.可维护性.可重用性.可移植性.运行效率.质量问题. 阶次O的计算法:忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出的. 处理器运算速度的大幅度提升和大量廉价储存器的涌现也不代表我们能忽略算法分析,而恰恰相反,处理器速度和存储器并不能弥补算法效率的差异. 在嵌套循环中的复杂

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

20172323 2018-2019-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 第一章--概述 1.1 软件质量 软件工程(Software Engineering)是一门关于高质量软件开发的技术和理论的学科. 解决的问题:控制开发过程,实现高质量的软件 软件工程的目标 高质量软件的特征 1.2 数据结构 数据结构:计算机存储.组织数据的形式. 程序 = 数据结构 + 算法 软件 = 程序 + 软件工程 栈会颠倒数据的顺序,而队列可以保持数据的顺序. 第二章--算法分析 算法

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

20172311<程序设计与数据结构>第一周学习总结 教材学习内容总结 第一章 概述 (基于软件质量问题引导出数据结构) 高质量软件的几个特征: 质量问题: 必须优先考虑质量特征,并尽最大努力实现 数据结构:计算机存储.组织数据的方式 程序=数据结构+算法 事实证明没有一种方案可以解决所有的问题! 第二章 算法分析(高效利用CPU和内存) 增长函数:表示问题大小(n)与我们希望最优化的值之间的关系,该函数表示了该算法的时间复杂度或空间复杂度 大O记法: 所有具有相同阶次的算法,从运行效率的角度

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

20172306 2018-2019 <Java程序设计与数据结构(下)>第一周学习总结 教材学习内容总结 第一章 概述 (程序=数据结构+算法 软件=程序+软件工程) 1.1 软件质量 软件工程师一门关于高质量软件开发的技术和理论的学科 软件工程的目标:1.解决正确性问题 2.按时且在预算之内给出解决方案 3.给出高质量的解决方案 4.以合情合理的方式完成上面的事情 高质量软件的特征 正确性:我认为是我们所做的都是为了解决一个正确性问题. 可靠性:降低软件的故障程度和概率 健壮性:可以很好地

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

20172321 <程序设计与数据结构>第一周学习总结 教材学习内容总结 第一章 概述 1.1 软件质量 软件工程是一门关于高质量软件开发的技术和理论的学科. 高质量软件的特征 1.2 数据结构 数据结构是计算机存储.组织数据的方式. 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率. 常用结构 第二章 2.1 算法效率分析 算法效率通常用==CPU的使用时间==表示 算法分析是从效率的角度对算法进行分类 2.2 增长函数

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

20172315 2018-2019-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 第一章 正确性:软件遵守其特定要求的程度. 可靠性:软件故障的频率和重要性. 健壮性:很好地处理错误情况的程度. 可用性:用户可以轻松地在软件中学习和执行任务. 可维护性:可以轻松地对软件进行更改. 可重用性:在开发其他软件系统时可以轻松地重用软件组件. 可移植性:软件组件可以轻松地在多个计算机环境中使用. 运行效率:软件在不浪费资源的情况下实现其目的的程度. 数据结构 程序=数据结构+算法,软件