zoukankan      html  css  js  c++  java
  • 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

    点评过的同学博客和代码

    • 本周结对学习情况

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

    • 上周博客互评情况

  • 相关阅读:
    网页加载进度条
    BFC
    Java — 基础语法
    Python — 多进程
    Python — 进程和线程
    Python — 面向对象进阶2
    Python — 面向对象编程基础
    Linnux 05
    Linnux 04
    Linnux 03
  • 原文地址:https://www.cnblogs.com/algerlu/p/11779944.html
Copyright © 2011-2022 走看看