20182307 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结

20182307 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结

教材学习内容总结

  • 第12章 算法分析 从算法效率角度分析了软件开发的目标,介绍了算法分析的概念,引进了增长函数与时间复杂度的概念。通过比较不同的算法的增长函数与时间复杂度来分析算法的效率。
  • 第14章 引进了栈这个“先进后出”的线性集合的概念,介绍了栈相关的push,pop,peek等操作。与继承、多态的知识相关联引出了泛型的概念,并以计算后缀表达式为例演示了栈的应用。
  • 第15章 队列 引进了队列这个“先进先出”的线性集合的概念,介绍了队列的enqueue,dequeue等操作。介绍了循环数组解决队空队满情况的方法。

学习笔记:

  • 计算机系统中最重要的资源之一是CPU时间。完成具体任务的算法效率是决定程序执行速度的一个主要因素。
  • 增长函数显示了与问题大小相关的时间或空间利用率。
  • 算法的阶由算法增长函数的主项决定。
  • 处理器速度和内存不能弥补算法增长函数的上界。
  • 集合是收集并组织其他对象的对象。主要分为两类:线性和非线性的。
  • 栈是一个线性集合,处理方式是后进先出
  • 泛型的使用:可以定义一个类,它保存、操作并管理直到实例化时才确定类型的对象。
  • 可用对象引用变量来创建链式结构。
  • 链表由对象组成,其中每个对象指向表中的下一个对象
  • 队列是一个线性集合,处理方式是先进先出
  • 采用数组实现队列时,把数组看成是一个环,可以避免移动元素。

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

  • 问题1:什么是时间复杂度和空间复杂度?

    • 书本内容:增长函数表明问题大小(n)与希望优化的值之间的关系。
    • 个人理解:书上并没有详细介绍时间复杂度与空间复杂度的概念,所以我去查阅了相关资料。时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。通俗讲,时间复杂度考虑的就是算法运行的时间,而这是与算法的效率与设计息息相关的。举例来说,如果有一个多重循环且必须执行到底的算法,那它的时间复杂度一定很高。空间复杂度则顾名思义,考虑的是算法需要占用的空间、需要占用计算机资源的多少。
  • 问题2:什么是泛型?

    • 书本内容:泛型可用于定义一个类,它保存、操作并管理直到实例化时才确定类型的对象
    • 个人理解:泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。
    • 1
  • 问题3:怎么理解循环数组实现的队列?

    • 书本内容:采用数组实现队列时,把数组看成是一个环,可以避免移动元素。
    • 个人理解:如果数组的长度在初始化时是固定了的,那么在元素填充到最后一个空间时就无法再继续添加了,因为那会导致数组越界的情况。而如果用自动扩容来处理这样的情况,又会导致前面的空间被大大的浪费了。为了更好地解决这个问题,可以想象一个数组是一个环,头尾相连,如果元素填充到原先的“尾部”了的话,下一个填放位置就又回到了头部,即第一个位置,这样就避免了数组越界的问题,也解决了浪费空间的问题。
  • 2

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

  • 问题1:无法将字符串分隔开,取出想要取出的字符串并存入数组

    • 原因分析:之前取出字符时使用的charAt()代码只能用于一个个的取出字符,如果想要取出多个字符即字符串就无法做到了,这就需要使用String类中的split方法了,它能够做到将字符串分割开来。代码为字符串变量.split("作为分割的标志","想要将字符串分割成的数量"),后一个限定项可以省略
    • 解决方案:用split方法分割字符串
      3
  • 问题2:递归实现二分法查找时,递归无法结束

    • 原因分析:任何递归定义必须有一个非递归部分,它决定了递归结束的时机。而我的程序中,mid这个反复传入递归中的变量的值始终没有改动,它导致了我的程序在每一次递归时都不会出现任何变化,自然形成了“无穷递归”问题。
    • 解决方案:修改代码,让mid的值在递归前发生变化。
      4
  • 问题3:打印语句时,顺序与预期不同

    • 5

    • 原因分析:在打印时,先调用了括号中优先级更高的size2方法,该方法中包含了一句输出语句与一句返回语句,所以主方法中打印时会先打印出size2方法中的打印语句,再打印主方法中的输出语句
      6

代码托管

7

上周考试错题总结

上周无考试

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 209/209 2/2 9/9
第二、三周 290/499 2/4 18/28
第四周 516/1015 2/6 22/50
第五周 2981/3996 2/8 32/82
第六周 1498/5494 2/10 20/102
第七周 1519/7013 2/12 51/153

点评过的同学博客和代码

  • 本周结对学习情况

  • 结对学习内容
    - 时间复杂度的计算方法
    - 栈的概念与相关操作
    - 队列的概念与相关操作
    - 数组实现栈
    - 栈计算后缀表达式
    - 数组实现队列,判断队空队满情形

  • 上周博客互评情况

posted @ 2019-11-01 22:24  陆彦杰  阅读(165)  评论(2编辑  收藏  举报