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

教材学习内容总结

一、查找

1、线性查找:从表头开始,依次将每个值与目标元素进行比较,最后找到目标或者到达表尾发现目标不存在于组中。
2、二分查找:如果查找池中的数据项有序,从表的中间开始查找,如果中间项不是所需值,根据目标与中间元素的大小比较确定元素在哪侧,在该侧继续从中间开始查找,每次排除一半的元素,确定目标元素。(二分查找必须保证数据项有序)

二、排序

1、选择排序:分别将每个值放到排好序的最终位置,从而完成一组值的排序。
平均时间复杂度为O(n2),稳定。
2、插入排序:重复地将一个具体的值插入到表中已有的子序列中,从而完成一组值的排序。每次将每个待排序的元素插入到有序子段中合适位置,直到表中全部元素均有序为止。
平均时间复杂度为O(n2),稳定。
3、冒泡排序:重复地比较表中的相邻元素,如它们呈逆序则交换它们。
平均时间复杂度为O(n2),稳定。
4、快速排序:根据一个任意选定的划分元素来对表进行划分,然后再递归地对划分元素两边的子段进行排序,从而完成对表的排序。
平均时间复杂度为O(nlog2n),不稳定。
5、归并排序:递归地对分表,直到每个子表只含有一个元素为止,然后再将子表按序合并,从而完成对表的排序。
平均时间复杂度为O(nlogn),稳定。

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

  • 问题1:归并算法里对两个子表合并成一个更大的有序表时,两个表如果是65 90,28 100.怎么归并成一个组,如果就是把两个组归并起来,就会是65 90 28 100,并不能达到通过小的有序的数组来归并成有序的大数组的目的?
  • 问题1解决方案:上网查阅资料明白了书上所提到的marge方法里面temp数组的意义。他把两个子表里的较小的元素先复制到temp组里,并不是把两个有序的子表直接组合起来,这样通过在temp里不断读取剩余子表里较小元素来填充到temp数组里,最后用一个for循环把temp里的数组复制到原数组里面去,完成排序。
  • 问题2:书中快速划分提到需要一个合适的划分元素,推荐随机抽取三个值,从中选择中间值作为划分元素。我的问题是这样做不是增加了算法的复杂度吗(虽然复杂度阶别并没有改变),为什么要采取这种方法?
  • 问题2解决方案:经过思考,我认为虽然采取第一个成员作为划分元素会减少上述步骤,但如果选择的成员不合适,过大或者过小,都不能趋近于让划分元素左右两边成员达到接近的结果,这样到了后期会增加多元素一边的计算步骤,相比之下采取随机抽样的中位数则会减少这一方面浪费的计算步骤了。
  • 问题3:不是很理解有关快速排序这一方法
  • 问题3解决方案:书上介绍的方法是先选择表中的一个元素作为划分元素,我觉得还是以第一个元素作为划分元素更有利于理解。以第一个元素作为枢轴,将后面的元素依次与其比较,较小的放在枢轴前,较大的放在枢轴后。将所有元素都比较结束后,以枢轴为中心将表分成两个部分,每个部分再次重复这一操作。直至每个划分段只有一个元素,递归应用给每一边后,则整个数组有序,从而实现了排序的过程。归并算法中也采取了这一逻辑。

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

  • 问题1:程序13.1中重写了toString方法,不理解为何重写这一方法,对toString方法的掌握不清楚。
  • 问题1解决方案:我先在网上了解了一下toString方法,这一方法的作用是把一个逻辑值转换为字符串,并返回结果。主要是返回结果这一项,在这个重写的方法中,toString返回了姓氏,名字和手机号码,这三个变量原本就是String类型,在重写的方法中直接返回,给新的Contact对象。
  • 问题2:在编写SearchPlayerList.java时程序无法在idea里run,解决后我删掉了target的last的语句,输出结果就变成了Player not found,当时没有理解。
  • 问题2解决方案:不能run是因为打代码的时候把main打错了,没有主函数是无法运行的。在这个程序里compare是的方法是Searching类里的lineraSearch方法。反复实验后我才注意到这个方法里if判断循环是镶嵌在linearSearch里面的。当只有一个元素满足的时候index++是2仍然满足while里的index<data.length的条件,内循环不能输出,但是外循环也无法停止。只有有两个条件满足导致index++是3不满足外循环时才会执行while这个外循环的else也就是return result。

代码托管

上周考试错题总结

  • 没有考试

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)
    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分
  4. 代码调试中的问题和解决过程, 一个问题加1分
  5. 本周有效代码超过300分行的(加2分)
    • 一周提交次数少于20次的不加分
  6. 其他加分:
    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:
    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

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

    • 排版工整
    • 对问题都深入研究
  • 代码中值得学习的或问题:
    • 代码有自己的理解
    • 代码排列不大美观
  • 基于评分标准,我给本博客打分:9分。得分情况如下:
  • 正确使用Markdown语法+1.
  • 教材学习中的问题和解决过程+2.代码调试中的问题和解决过程+2.
  • 感想,体会不假大空+1.
  • 错题学习深入+1.
  • 点评认真.课后题有验证+1.
  • 进度条有记录+1.

点评过的同学博客和代码

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

  • 这章的学习主要是一个思考的过程,只要把逻辑弄明白,学习起来相对之前不是那么的难。
  • 这章学习的东西要多应用,才能熟练掌握。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 59/200 2/2 20/20
第三周 292/331 2/4 20/40
第四周 677/969 2/6 20/60
第五周 661/1265 2/8 20/80
第六周 1299 /2554 2/10 20/100
第七周 1500/4054 2/12 20/120
第八周 2511 / 6565 2/14 20/140
  • 计划学习时间:20小时
  • 实际学习时间:20小时

参考资料

原文地址:https://www.cnblogs.com/wmh20182322/p/11793950.html

时间: 2024-10-31 00:08:00

20182322 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结的相关文章

《数据结构与面向对象程序设计》第四周学习总结

20182304 2019-2020-1 <数据结构与面向对象程序设计>第四周学习总结 教材学习内容总结 1.本章我们学习了使用并编写我们自己的类:类中有与类同名的构造方法,也可以有set,get,toSring与自己定义的方法.实例化一个对象,可通过该对象使用类里的所有方法.实例数据是每次创造一个实例后自动生成新的内存空间的变量 2.uml类图 :每个类可能包含三部分内容:类名.属性.操作(方法).UML类图有属于自己的语法,变量的类型名在变量名的后面,它们之间用冒号作为分隔符,方法的+和-

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

20182306 2019-2020-1 <数据结构与面向对象程序设计>第五学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的记一下 教材学习中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码调试中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码托管 (stat

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

教材学习内容总结 1.编写类与方法(构造方法的结构和用途) 2.实际参数与形式参数.public与private.return与void的区别与含义. 3.UML类图的含义与形式 4.静态类(Math类)静态变量.静态方法 5.类间关系(依赖关系.聚合关系.继承关系) 6.接口的使用,能够在某个类中实现接口的方法(Comparable.Iterator) 7.软件活动开发.方法设计.方法重载.测试(黑盒测试.白盒测试) 教材学习中的问题和解决过程 问题1:toString与return返回的值的

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

教材学习内容总结 1.继承的基本语法与用法. 2.利用UML类图表示继承关系. 3.在具体编写类的时候,先是数据声明再是方法声明. 4.toString方法用println或print或字符串连接会自动调用. 5.每创建一个对象.都会为类中声明的变量建立新的内存空间. 6.UML图一些基础使用方法. 7.对象应该是自管理的,既对象的实例数据应该仅由该对象来修改,这就构成了封装. 代码调试中的问题和解决过程 问题1:测试代码出现错误 问题1解决方案:junit的方法名必须是textxxx或xxxt

20182327 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182327 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名:赵天昊 学号:20182327 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证. 2. 实验过程及结果 不多说,上

20182319《数据结构与面向对象程序设计》实验二报告

20182319 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 彭淼迪 学号:20182319 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,用规定方法测试验证. 2. 实验过程及结果

# 20182331 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182331 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 高宽让 学号:20182331 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证.(https://www.cnb

20182330 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182330 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 魏冰妍 学号:20182330 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 编写简单的计算器,完成加减乘除模运算. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. 编写测试代码,测试验证. 2. 实验过程及结果 编写简单计算器,借鉴c语言语法

20182311 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182311 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 冷冲 学号:20182311 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证.(https://www.cnbl

20182333 2019-2020-1 《数据结构与面向对象程序设计》实验2报告

20182333 2019-2020-1 <数据结构与面向对象程序设计>实验2报告 课程:<程序设计与数据结构> 班级: 1823 姓名:钱佳禹 学号:20182333 实验教师:王志强 实验日期:2019年9月9日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证.(https://www.cnblo