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

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

教材学习内容总结

本周内容主要为书第一章和第二章的内容:

  • 第一章

    • 软件质量:

      • 正确性(软件达到特定需求的程度)
      • 可靠性(软件发生故障的频率和危害程度)
      • 健壮性(很好处理错误情况的情况)
      • 可用性(用户在软件中掌握和运行任务的容易程度)
      • 可维护性(软件进行修改的容易程度)
      • 可重用性(软件组件可被其他软件系统开发使用的容易程度)
      • 可移植性(软件组成可用于多种计算机环境中的容易程度)
      • 运行效率(不浪费资源的情况下软件完成其目标的程度)
    • 数据结构(计算机存储、组织数据的方式):数组 栈 队列 链表 二叉树 哈希表 堆 图
    • 程序 = 数据结构 + 算法
    • 软件 = 程序 + 软件工程
  • 第二章

    • 算法分析
    • 大O记法(实质上是算法复杂度发展趋势的反应)
    • 增长函数:表示问题(n)大小与我们希望最优化的值之间的关系
      • 时间复杂度(定量描述了该算法的运行时间)--CPU使用时间
      • 空间复杂度(运行完一个程序所需内存的大小)--内存空间
    • 渐进复杂度称为算法的阶次(忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出的)

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

  • 问题1:提高CPU的速度并不一定能提高处理速度
  • 问题1解决方案:算法的阶次为常量[即复杂度为O(1)]或是线性阶次[即复杂度为O(n)],提高CPU速度才会线性地提高处理速度。随着算法复杂度的增长,处理器的速度对复杂度的影响越来越小。不同的复杂度,在提高相同倍速的处理器,其运行效率是不同的。

  • 问题2:时间复杂度的分析
  • 问题2解决方案:
    • 循环的时间复杂度等于循环体的复杂度乘以该循环运行次数。时间复杂度O(n)
    for(int count = 0;count<n;count++)
    {
    //*复杂度为O(1)的步骤系列
    }
    • 循环出现嵌套时,循环的复杂度等于内层循环的复杂度乘以外层循环的复杂度。时间复杂度O(n^2)
    for(int count = 0;count < n;count++)
    {
       for(int count2 = 0;count2<n;count2++)
       {
           //复杂度为O(1)的步骤系列
       }
    }
    • 方法调用的复杂度,要考虑循环体的阶和调用方法的阶。时间复杂度O(n^2)
    for(int count = 0;count<n;count++)
    {
        printsum(count);
    }
    public void printsum(int count)
    {
        int sum = 0;
        for(int I = 1;I<count;I++)
            sum += I;
        System.out.println(sum);
    }
    • 总结:
  • 问题3:增长函数的比较
  • 问题3的解决方案:增长函数函数图
    • n较小时:
    • n较大时:
    • 结论:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!

  • (1)下列增长函数的阶次是多少?

  • (2)请确定下面代码段的增长函数和阶次
  • 答案:

  • (3)请确定下面代码段的增长函数和阶次
  • 答案:

结对与互评

点评(王禹涵)

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

    • 没有什么问题,很完美的博客。
  • 基于评分标准,我给本博客打分:5分。
    • 得分情况如下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 一个问题加1分
    • 代码调试中的问题和解决过程, 无问题
    • 感想,体会不假大空的加1分
    • 点评认真,能指出博客和代码中的问题的加1分

点评(方艺雯)

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

    • 图片运用恰当,很清晰的解释了问题和相关内容
  • 基于评分标准,我给本博客打分:6分。
  • 得分情况如下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 二个问题加2分
    • 代码调试中的问题和解决过程, 无个问题
    • 感想,体会不假大空的加1分
    • 点评认真,能指出博客和代码中的问题的加1分

互评对象

感悟

本学期的第一篇博客,又到当初写博客的时候了(?_?)。一口气学了两章内容,好在两章内容不是很多,随便翻了一下书,发现大部分是栈、队列以及链表之类的,开始系统的学习算法结构与分析。假期里做了几个程序没有让自己忘了太多的内容,捡起来也会容易得多。上学期在程序设计的课上取得满分,所以这学期要保持上学期的精神状态继续学习。作为新大二的学生,我更要为新大一的学弟学妹做个好头。加油!(? ??_??)?

学习进度条

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

参考资料

原文地址:https://www.cnblogs.com/sanjinge/p/9608483.html

时间: 2024-10-31 20:33:11

20172305 2018-2019-1 《Java软件结构与数据结构》第一周学习总结的相关文章

20172302 《Java软件结构与数据结构》实验二:树实验报告

课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月5日 必修/选修: 必修 实验内容 (1)参考教材p212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder:用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 (2)基于Linked

20172304 2018-2019《java软件结构与数据结构》 第一章 第二章学习总结

20172304 2018-2019<java软件结构与数据结构> 第一章 第二章学习总结 教材学习内容总结 第一章 概述 1.1软件质量: 高质量软件的几个特征: 正确性:软件在多大程度上满足其特定需求 可靠性:软件故障发生频率和危险程度 健壮性:出错情况下可以得到恰当处理的程度 可用性:用户学习和执行任务的难易程度 可维护性:对软件进行修改的难易程度 可重用性:软件组件可重用于其他软件系统开发的难易程度 可移植性:软件组件可以在多个计算机环境下使用的难易程度 运行效率:在不浪费资源的情况下

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

2018-2019-20172329 <Java软件结构与数据结构>第三周学习总结 教材学习内容总结 <Java软件结构与数据结构>第五章-队列 一.概述 1.队列是什么? 队列是种线性集合,其元素从一端加入,从另一端删除:注:队列是按照先进先出的方式处理的.从队列中删除元素的次序,与放置元素的次序是一样的. 2.队列的构成 (1)方法: 操作 描述 enqueue 向队列末端添加一个元素 dequeue 从队列前段删除一个元素 first 考察队列前端的那个元素 isempty

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

教材学习内容总结 第五章 5.1概述 队列是一种线性集合,其元素从一端加入,从另一端删除:队列的处理方式是先进先出(First in First out). 与栈的比较(LIFO) 栈是一端操作,先进后出 队列是两端操作,先进先出 栈的一些操作 操作 描述 enqueue 向队列末端添加一个元素 dequeue 从队列前端删除一个元素 first 考察队列前端的那个元素 isEmpty 判定队列是否为空 size 判定队列中的元素数目 toString 返回队列中的字符串表示 5.2javaAP

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

2018-2019-20172329 <Java软件结构与数据结构>第五周学习总结 教材学习内容总结 <Java软件结构与数据结构>第九章-排序与查找 一.查找 1.查找概念简述: (1)查找3是这样一个过程,即在某个项目组中寻找某一指定目标元素,或者确定该组中并不存在该目标元素.对其进行查找的项目组有时也称为查找组. (2)查找方式的分类:线性查找,二分查找. (3)查找所要完成的目标:尽可能高效的完成查找,从算法分析的角度而言,我们希望最小化比较操作的次数,通常,查找池里项目数

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

20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现,以及考察实现和使用树的实例. 教材学习内容总结 A summary of textbook 树(tree):树是一种非线性结构,其元素被组织成了一个层次结构.下面是树的术语,了解一下吧! 树有一个包含结点(node)和边(edge)的集构成,其中的元素被储存在这些结点中,边则将一个结点和另一个结点连接起来.

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

20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和各种二叉查找树实现,考察为二叉查找树添加和删除元素的算法以及维护平衡二叉查找树的算法 教材学习内容总结 A summary of textbook 二叉查找树(binary search tree):二叉树定义的扩展,一种带有附加属性的二叉树.附加属性是什么?树中的每个节点,其左孩子都要小于其父节点,而父节点

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

2018-2019-20172329 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十一章-二叉查找树 一.概述 1.什么是二叉查找树:二叉查找树是一种带有附加属性的二叉树,即对树中的每个结点,其左孩子都要小于其父结点,而父结点又小于或等于其右孩子. 2.二叉查找树的定义是二叉树定义的扩展. 3.操作: 操作 描述 addElement 往树中添加一个元素 removeElement 从书中删除一个元素素 removeAllOccu

2018-2019-20172321 《Java软件结构与数据结构》第七周学习总结

2018-2019-20172321 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 第11章 二叉查找树 一.概述 二叉查找树是一种含有附加属性的二叉树,该属性即其左孩子小于父节点,而父节点又小于等于其右孩子.如下图所示.根结点的左子树每个元素都小于80,右子树每个元素都大于80. 查找方法,要判定一个具体的目标是否存在于树中,需要沿着从根开始的路径,根据查找目标是小于还是大于当前结点的值,相应地转到当前结点的左子结点或右结点.最终或是找到目标元素,或是遇到路径的末端,后者意