面试指北:算法与数据结构(二)如何学习
共 1534字,需浏览 4分钟
·
2021-04-08 16:00
在上文 面试指北:算法与数据结构(一)开篇 中讲了为什么学习算法与数据结构和它包括哪些内容。
概括来说,掌握算法与数据结构之后,我们会更容易跟上计算机潮流、更快了解其他框架底层原理、更可能进入理想的公司。
它包括:
•时间复杂度分析;•空间复杂度分析;•十个核心算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分支算法、回溯算法、动态规划、字符串匹配算法;•十个核心数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 数。
算法简单来说就是处理数据的方法,数据结构为表示、存储数据的结构。算法和数据结构相辅相成。
其中复杂度分析是重中之重,任何代码在理论上分析其性能都离不开复杂度分析。算法的主要目标是在如何更好的节省 CPU、内存资源的情况下,处理数据解决问题。而我们又不可能每次通过在机器上跑一下的方式来衡量一个算法。这就需要用到复杂度分析。而且在学习排序、查找等算法时,也必然会常常用到复杂度分析。
对于一个数据结构或者算法,我们也要去了解其发展历史、自身有什么特点、和另外一个相比有什么异同、适合的问题场景、有什么实际的应用等等。这样才能从多个维度去了解一个知识点,更好的掌握记忆。
学习数据结构和算法只需要有高中数学和基础编程知识即可。
1. 实践:一定要动手写
碰到一个排序算法或者查找算法,一定要自己尽量在不看示例代码的情况下先写一遍。然后和示例代码对比,思考自己没有考虑到的细节和自己代码上能够优化的点。然后在自己多写几遍,同时结合 LeetCode 上的题目,做两三道相关题目。
近年来,无论是一万小时定律,还是刻意练习。都在强调练习、实践的重要性。通过练习,一方面是肌肉记忆加深印象;另一方面,只有在练习过程中,你才能触碰到知识点的细节,让你对其有所思考,进而加强相关的神经细胞。
2. 总结、分享
在学完知识之余,也要花工夫去总结和分享。在这个过程中,你会发现自己薄弱的地方。因为分享时你需要去考虑对方是否能够理解你讲的内容,曝露出自己的不了解的知识之后,你就会去补足这个缺少的知识,这样不断的慢慢的完善自己的知识体系。
分享出去之后,也能够和读者碰撞出一些思维的火花。已有的想法通过碰撞,产生新的想法,这是一件令人激动的事情。
费曼学习法中所强调的就是学习之后一定要教给别人,通过自己做老师这个过程,不断的让自己对这个知识点产生更加深入的理解、更加全面的理解,最终达到深入掌握知识的目的。
3. 慢慢来
学习不像打游戏,会不断获得反馈,这恐怕是打游戏停不下来的一个重大因素。任何知识的学习都需要一个沉淀的过程,你不可能一口吃成一个胖子。
碰到问题时一定不要气馁和怀疑自己。因为碰到问题这时每个人都会遇到,你并不孤独。有很多事情我们当时不能理解,可以先把它放下,等一段时间的消化之后再来看看可能就会恍然大悟。这个时候你需要换个角度来看问题,我们一生会碰到很多问题,很多需要死磕才能解决的问题。这个时候就需要跨过去这个坎,掌握这个知识、工具,那就可以在以后的人生里使用它,这样看来,投入的那些精力是不是相当划算。
4. 使用工具
最后,为了帮助大家更好的学习数据结果与算法,我开发了一个可视化小程序。在这个小程序上你可以可视化的看到比如快速排序算法的执行过程,把枯燥的代码形象的展示或许会更好的帮助你学习。
微信搜索 VisualLearning
或者点击下方小程序即可体验。