数据结构与算法 #001_开篇词,心态与意识

❤️阅文后请用一句话总结您的心得和建议!❤️

1、引例:网站用户系统

想象一下,开发一个网站的用户系统。这个用户系统的功能之一是,对某个尝试登录用户的ID去核实是否合法,这就需要去存储着海量数据的数据库中查找这个ID。假设这个尝试登录用户的ID是Jack,一个可行的办法是,对数据库中的每个记录去匹配是否与Jack一致。然而,效率更高的方法是,预先对数据库中所有的数据按照字母顺序进行排序,接着就可以从有序数据的中间开始查找,去通过二分查找不断缩小查找范围。如果这个系统的注册用户只有不足16个,两种查找方式所花费时间的差异也许并不明显,无非就是16次匹配与log₂16 = 4次匹配的区别。但如果注册用户的数量达到了1000万,两种查找算法的效率可能就是1000万次和24次的区别了(log₂10000000 = 23.25)。

2、成为一名优秀的工程师

优秀的软件工程师必须具备过硬的代码开发能力,而这就体现在你对数据结构、算法思维、代码效率优化等知识的储备上,并直接反应在你工作中解决实际问题的好坏上。

比如,你要去开发某个复杂系统,如何才能围绕系统的复杂性去选择最合适的解决方案呢?一方面是对所用算法的选型,另一方面是对所用数据结构的选型,这都要求你对数据结构与算法有充分的理解和掌握。

但是 996、007 的互联网快节奏下,开发者普遍专注当下工作本身,并不追求极致的性能,一直在追语言,学框架,而忽视了数据结构与算法的学习和落地训练,基础知识储备不足,很难顺利做出最优的技术选择,从而导致开发的系统性能、稳定性都存在很多缺陷。

此外,面试中都要重点考察数据结构与算法知识,这是不争的事实。 一是因为代码能力不容易评估,而数据结构和算法的掌握情况相对可衡量;二是可以衡量工程师的基本功,以及逻辑思考能力。

曾经有个海外名校毕业的应届生,他的计算机领域基础知识,尤其是数据结构和算法、机器学习、深度学习等基本功特别扎实,在面对陌生问题时往往能更快速地锁定问题,并根据已有知识去寻找解决方法。短短几个月后,他就从刚入职的小白转变为某些项目的负责人。所以说,基本功扎实的人潜力会非常大,取得业绩结果只不过是时间问题。

为了快速掌握数据结构与算法知识,或者提高代码能力,绝大多数的学生或候选人一定会通过公开的题库去刷题,却常常被那些千变万化的代码题搞得晕头转向、不明所以,浪费了大量时间和精力,得不偿失。

这并不是说刷题本身有错,而是应该掌握正确的方式方法。而且刷题只是形式,更重要的是掌握算法思维和原理,并用以解决实际的编码问题。

真题实际上是刨除了特定场景和业务问题后,对于我们实际解决问题的方法的提炼。考核真题和刷题不是目标,还是要最终回归到能力培养上来。

3、学习思路

  1. 学习方法论:方法论,也就是把“烂”代码优化为高效率代码的方法和路径,是关于代码开发与优化方法框架的总纲。代码的目标,除了完成任务,还要求把某项任务高效率地完成。
  2. 学习数据结构基础:在方法论的指引下,补充必备的数据结构基础知识。复杂度的降低,要求对数据有更好的组织方式,这正是数据结构需要解决的问题。为了合理选择数据结构,需要全面分析任务对数据处理和计算的基本操作,再根据不同数据结构在这些基本操作中的优劣特点去灵活选用合适的数据结构。
  3. 学习算法思维:在方法论的指引下,带你掌握必备的算法思维,也就是用算法思考问题的逻辑和程序设计的重要思想。在一些实际问题的解决中,需要运用一些巧妙的方法,它们不会改变数据的组织方式,但可以通过巧妙的计算方式降低代码复杂度。常见的方法,如递归、二分法、排序算法、动态规划等。
  4. 问题练习:前三部分的知识合在一起,就是解决实际问题的工具包。面试题并非单纯考核人才的工具,更是实际业务问题高度提炼后的缩影,能反映一个开发者的知识储备和问题解决能力。对于每一道真题思考和总结解题方法和思路。
  5. 提升表述能力:很多工程师有个共性问题,那就是明明有能力,却说不出来,表现得就像是个初学者一样。练习手写代码、问题分析、提高软素质,对于学业和职业发展有很大的促进作用。

文字参考课程《重学数据结构与算法》

❤️阅文后请用一句话总结您的心得和建议!❤️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值