20162309《程序设计与设计结构》第二周学习总结

学号 20162309《程序设计与数据结构》第2周学习总结

教材学习内容总结

   教材内容要分为两个部分,首先是教材第13章的内容,查找和排序,教材通过列举几种排序和查找的方法,并进行了比较,分析了几种查找方法的优劣,以及在不同的情况下需要使用到的方法,这种比较方法在处理较多的文件个数时会提高很大的效率,同时也能有效减少错误的出现。教材介绍了几种常见的查找方法,同时提出高效查找会减少查找所需的次数,以及比较是进行查找的先决条件之一,这需要调用Comparable类的对象数组,同时也需要实现Comparable接口。这里在网上查找了几个常见的查找方法:线性表、树表、哈希表。首先介绍线性表,分为顺序查找、折半查找、分块查找三种,其中折半查找,只适用于有序表,且仅限于顺序存储结构,对线性链表无法进行有效的折半查找(折半查找low会指向一个元素而high会指向相邻的下一个元素,然后low和high指向同一个元素,再然后low>high,循环结束,所以循环结束的条件为low<=high)。注意不要忘记最会返回-1。

而分块查找又称为索引顺序查找,索引表采用(折半查找),块内(顺序查找)处理线性表既希望有较快的查找速度又需要动态的变化,则可以采用分块查找的方法。第二个是树表,分为二叉排序树(二叉查找树)、平衡二叉树 。关于哈希表,哈希表的构造方法:直接定址法、数字分析法、平方取中法、折叠法、除留取余法、随机数法。 
解决冲突的方法: 开放定址法、再哈希法、链地址法。由此,几种查找的方式和实现的模式就很明晰了。引用书上的例子,Contact类实现了Comparable接口,也就实现了compareTo方法。这里教材也提到了泛型的概念。其强调的是一些编译过程种的可变部分和方法,各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。要具体的介绍什么是泛型,泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。在网上进行了泛型实例的查找:

   同时,本周开始了小组学习,我们开始学习邹欣老师的《构建之法》,作为小组成员,我学习的内容为1-3章,属于本书的绪论部分,介绍了作为一个程序员和软件工程师所需要的一些基本要求,包括软件设计在实际上与我们日常所认知的软件设计有什么区别。其中印象较深的是第一章所提到的关于四则运算的问题,我们上学期也有此项作业,作为比较学习,包括对程序要求的不断提高,导致所需要的时间和所需要考虑的部分越来越多,使得这个原本只是进行小学一二年级加减运算的程序变得复杂。在实际的软件开发过程中,程序越复杂,所需要的考虑范畴和事后的工作也就越大。软件的开发需要经历很多个过程,而在以个人为单位的学习和进步上,前三章介绍了单个单位开发软件和程序的流程和需求,强调了测试、分析、计划、PSP表格的制定等一系列过程,对正在学习的我们有很大帮助。  

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

  • 问题1:线性查找与二分查找之间的优劣比较。
  • 问题1解决方案:以数组为对象的两种查找方法对比。
    线性查找可以针对任何数组,将数组中的每项依次遍历出来之后,与所要查找项对比。
    消耗时间也是不规律的,可能查找项处于数组的第一位,也可能处于数组的最后一位。还有可能数组中完全不存在需要查找的项目。

二分查找法,只针对有序数组使用。
因为数组已经有序排列,可以通过将数组从中间分割,将中间项与所需查找项对比;然后再根据对比结果,再次向上或者向下,寻找中间项对比,直至完成查找,这种方法十分类似数学中对方程求根所使用的二分法,在方法原理上有很多相同之处。而且,对于查找最开始,可以通过与第一项和最末项的对比,确定查找项是否处于此数组中。
这里查找了一个相关的代码案例:

这是一个关于线性查找的代码案例。

代码托管

结对及互评

 本周20162313苑洪铭同学和我共同学习了教材内容和《构建之法》,开始对程序设计的逻辑思维和软件开发的设计思路进行学习。

 ### 本周结对学习情况 
- [结对同学]:http://www.cnblogs.com/yuanhongming/
- 结对照片
- 结对学习内容
    - 教材第13章内容
    -《构建之法》

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

  本周开始结对学习《构建之法》,这是第一次以多人小组为单位进行学习,需要在教材学习之余,掌握更多关于程序员和软件开发者的基本素养,这本书所讲的不只是知识,更多的是方法,关于遇到问题、拟定思路、扩大需求,思维建模方法,以及事后的测试和解决方法,通过对这些方法的了解可以更好地帮助我们事半功倍的学习软件开发,而不是仅仅是对着教材和网上的代码照葫芦画瓢。思考和实际行动都是不可或缺的。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 65/200 1/1 15/20
第二周 75/500 1/1 18/38
posted @ 2017-09-17 17:24  邢天岳  阅读(269)  评论(0编辑  收藏  举报