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

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

教材学习内容总结

  • 第一章 概述
    • 软件工程是一门关于高质量软件开发的技术和理论的学科。
    • 软件开发解决的问题为控制开发过程,实现高质量的软件。
      • 软件必须有效使用诸如CPU时间和内存之类的资源。
      • 质量特征必须优先考虑,并可能最大化。

  • 数据结构:是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
    • 栈可用于颠倒数据集的顺序。
    • 队列可用于保持其数据的顺序。

  程序=数据结构+算法
  软件=程序+软件工程

  • 第二章 算法分析

    • 算法效率通常用CPU使用时间来表示,算法分析是从效率的角度对算法进行分析,是计算机科学的基础。
    • 增长函数表示与该问题大小相对应的时间或空间的使用。增长函数表示问题大小与我们希望最优化的值之间的关系。该函数表示了该算法的时间复杂度或空间复杂度。如果算法的运行效率低。那么从长远来说,使用更快的处理器也无济于事。
    • 要分析算法的复杂度,通常需要分析循环的运行。循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。额分析嵌套循环的复杂度时,必须将内层循环和外层循环都考虑进来。
    • 大O计法:忽略该算法的增长函数中的常量和其他次要项,只保留主项而得出的。
    • 一些增长函数及其渐进复杂度

  • 增长函数的比较

  • 当n增加时,各类增长函数差距也会拉大。

  • 规律及总结

教材中的问题及解决过程

  • 问题一:可移植性是软件的质量特征之一,那么Java程序设计语言是如何解决该质量特征的?
  • 解决:Java程序设计语言是这样来结局这个问题的:把Java的源代码编译成了字节码,这是一种低级语言,它不是任何特定CPU的机器语言。字节码运行在Java虚拟机上。Java虚拟机是一种解释并执行字节码的软件。因此,至少从理论上讲,任何具有Java虚拟机的系统都能运行Java程序。
  • 问题二:在看书的时候,不是很理解对相关的工作量,为什么说提高CPU的速度并不一定能提高处理速度。
  • 解决:当算法的阶次为常量(即O(1))或线性阶次(即O(n))时,提高CPU速度才会线性提高处理速度。随着算法复杂度的增长,处理器速度的提高对复杂度的影响越来越小。

练习题

  • EX 2.1
    • 下列增长函数的阶次是多少?
    • 10n^2+100n+1000
    • O(n^2)
    • 10n^3-7
    • O(n^3)
    • 2n+100n3
    • 2^n
    • n^2logn
    • O(n^2logn)
  • EX 2.4
    • 请确定下面代码段的增长函数和阶次

for(int count = 0; count < n; count ++)
for(int count2 = 0; count2 < n; count2 = count2 + 2)
{
System.out.println(count , count2)

  • 内层循环是n/2,外层循环是n,所以为O(n^2)。
  • EX 2.5
    • 请确定下面代码段的增长函数和阶次

for(int count = 0 ; count < n ; count++)
for(int count2 = 1 ; count2 < n ; count2 = count2 * 2)
{
System.out.println(count,count2);
}
}

  • 内层循环是log2n,外层循环是n,所以为O(nlog2n)。

结对及互评

  • 博客中值得学习的或问题:
    • 排版精美,对于问题研究得很细致,解答也很周全。
  • 代码中值得学习的或问题:
    • 代码写的很规范,思路很清晰,继续加油!

点评过的同学博客和代码

  • 本周结对学习情况

其他(感悟、思考等,可选)

  在家瘫了一个多月后,终于又回到学校了(笑)。在上个学期有收获,有感慨,有付出,也有回报。暑假里没有了在学校学习的氛围,自然也是懈怠了不少,能力感觉到确实有所下降。虽说在暑期内做了一个小app,但练习量是远远不够的,代码还是必须要多敲才能熟练运用并掌握。至于博客,显然在暑假内是没有写过的,现在开学,这个习惯仍然要捡起来,坚持下去。在这个学期里要继续努力,更好的提升自己!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第一周 200/200 1/2 5/20
  • 计划学习时间:10小时

  • 实际学习时间:5小时

参考资料

posted @ 2018-09-09 19:57  银海、  阅读(219)  评论(2编辑  收藏  举报