数据结构和算法学习中的疑惑

2019-04-26 16:31:53 +08:00
 Nerv

如题吧。目前大一,感觉学习遇到了瓶颈。

起因:渣学校的数据结构教学太水,因此从图书馆借了相关书籍开始自学( 《数据结构与算法分析—— c++描述》)。

当前进度,刚看完了 AVL 树,学习伸展树 ing。

问题 1:学习过程好枯燥啊(目前是啃书加实现),时间长了学习效率非常底下,而且会忘😂,有什么好的学习方法吗?刷题怎么样?

问题 2:现在这个阶段把很多精力放在数据结构上合适吗?大家在这个阶段都是怎么安排学习时间的?

1770 次点击
所在节点    问与答
5 条回复
Stoulla
2019-04-26 17:23:55 +08:00
事实上刷题你根本用不上这些数据结构, 如红黑树一类. 刚开始学习肯定是会很枯燥的,这必然是需要经历的一个过程.

但如果你想更有趣一些, 不妨试着找一找具体的应用场景, 以及数据结构的相关性.
比如, 以 AVL 树举例.
1. 为什么提出了 AVL 树, AVL 树有什么缺点. 对 AVL 树的缺点和优点, 我们有什么相关的扩展呢? --> 找到红黑树, Trie 树, Van Emde Boas 树. B 树等. 下面以红黑树举例.
2. 红黑树多用于什么场景呢? 举例 ,比如 STL 中的 set 和 map 就大量运用了红黑树, 而不是 AVL 树.为什么它们要采用红黑树呢?
3. 参照相关实现, 尝试去自己实现一下 STL 中的 map. 可以参考源码, 但我觉得可能对于大一的你来说难度可能太大. 因此推荐阅读, 而不是自己实现.

建议:
数据结构的学习,枯燥的原因是因为你现在了解的太少, 等于刚入门, 无法将具体的应用需求和所学的联系起来.但这是老师和网络上的任何教程都无法解决的问题, 这需要你自己去摸索.
因此我建议你啊, 当看故事一样, 先了解一下各个算法提出的背景, 以及它们所解决的问题. 然后再在实际解决问题中去进行深入的理解.

数据结构属于超基础的东西, 但是也是超重要的. 所以必须啃精. 我因为本科没学好现在都还在还债呢.

刷题的话, 个人建议不要把刷题当成是学数据结构的动力. 这东西, 更多的锻炼的是一种思维方式,对于高深的,代码量较大的数据结构是不会有涉及的.

如果觉得老师讲得不好, 可以参考一下 MIT 的课程, 6.006 和 6.046.

吐槽:
大一就这么勤奋了, 蛮羡慕的. 我大一的时候可真是峡谷一霸,打的那叫一个醉生梦死- -. 祝你好运~~
Nerv
2019-04-26 17:43:01 +08:00
@Stoulla #1 感谢回复,学了挺长时间没有 "实际收益" 还是有点失落的😫,我尽量适应吧。
Nerv
2019-04-26 17:47:01 +08:00
@Stoulla #1 总觉得眼前需要学的东西太多,,快一年了还只会玩控制台着实蛋疼。
lhx2008
2019-04-26 17:47:56 +08:00
非科班,我倒没有啃,因为基本所有语言的 container 都已经实现了,就当看过一遍了解一下
Stoulla
2019-04-26 18:04:56 +08:00
#3 GUI 的实现那是另一个课题. 如果不想从事这方面的一直不学都没关系. 另外, 编程的话最快的实际收益还是自己找一些小项目进行实现, 但是你现在属于刚入门, 所以... 个人看法是, 之恶能枯燥的学.


#4 说的是有道理的. 你所有的这些数据结构都是有人做好了轮子了. 如果你只是要打出能用的代码来说的话, 网上几乎都能找到现成的.
但是你现在才大一,时间超级充分, 所以是更建议你知其所以然. 以后无论是考研还是工作, 这个都是必然要用到的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/558989

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX