第三章学习小结

一、学习内容

(一)递归问题。汉诺塔和上楼梯问题其实想明白很容易,但是运用递归方法进行编程却需要一步一步地细致分析。

上楼梯问题还分为从下向上和从上向下两种分析方式,从下向上的方式可以用数组地方式进行运行,可以大大降低时间复杂度和空间复杂度,而从上向下的方式则更容易清晰明了。

这也是递归算法的优缺点,优点清晰明了,缺点:空间和时间的消耗比较大,有大量重复计算。

(二)编号、用户、积分的配对及提取问题。一开始我们试用链表进行很基础的运算,虽然可以顺利通过,但是运行时间都是擦着过。

1.后来我们思考过链表和数组的选择,但后来通过查阅资料得知,运用数组进行查询时还需要对首地址进行加减,消耗的时间大于直接运用链表。

2.我们也考虑过陈静的方法:重新建一个链表来存储查询过的数组,查询过的数组放在第二个链表中,这样下次查询先在第一个链表里运行,查不到再去第二个链表查询,这样可以降低第一次查询的时间。但是我们控制不了重复查询的概率,所以这个想法也pass了。

3.后来看其他同学的代码发现,很多人都运用了C++的类,可以减少空间和时间的复杂度。下次也可以尝试一下因为发现java的类声明和C++的差不了太多,大家都可以写。

当然我们还发现,如果在循环中重复调用函数的话,最好把循环体放在函数之内,这样可以节约空间,降低运行时间。

 

二、心得体会

(一)有些事情真的不能想当然。我一开始以为数组调用的时间会少于链表,因为直接跳转到下一个就行了,但是忽略了数组的调用还和首地址以及该数据在数组中第几位有关。

(二)课程并不是相互独立的,就比如我们可以在数据结构的课程里运用面向对象课程里的类。

(三)还是要多看代码,多和同学交流,这样更能打开我们的思路。

   

三、目标完成情况

(一)能清楚分辨出队列和栈的区别。

(二)掌握了栈和队列顺序表和链表的表示方法及相关操作。

(三)能独立分析问题并提出自己的想法。

 

四、学习目标

(一)能熟练掌握并运用字符串

(二)进一步了解二维数组

 

五、分享

用iPad学习的同学一定要下MarginNote 3!虽然贵了点,但是它的摘取功能能帮你生成思维导图并且每一部分的大小、颜色可以自己调节,很适合后期快速浏览复习,而且里面还有复习功能,可以生成一个个小卡片快速的复习。

posted @ 2020-04-25 17:16  繁华声  阅读(126)  评论(0编辑  收藏  举报