2_数据结构与算法

O

Master basic algorithoms and datastruce.

KR

1. 基本认知

1. 为什么要学习数据结构和算法呢?

数据结构并不是完全没有用的面试题, 而是一门最重要的内功。 很多很有天赋的年轻人因为数据结构的掌握不够,写不出来好的代码。只能沦为cudrboy,这些框架的设计实际上融合了很多数据结构里面的东西,但是没有好好掌握数据结构的程序员很难定位到一些高级的架构错误或者写出可以放到github上的开源项目。掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样,很多优化和架构问题都能通过数据结构的角度去思考。我觉得,高手之间的竞争其实就在细节。这些细节包括:你用的算法是不是够优化,数据存取的效率是不是够高,内存是不是够节省等等。这些累积起来,决定了一个框架是不是优秀。 许多大龄候选人,简历能写十几页,经历的项目有几十个,但是细看下来,每个项目都是重复地堆砌业务逻辑而已,完全没有难度递进,看不出有能力提升。久而久之,十年的积累可能跟一年的积累没有任何区别。(这个我现在就很有感触,自己就积累了一堆cudr的项目。)小公司可能会看中这些, 但是大公司性能几乎是时时刻刻都要考虑性能的问题,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中你的长期潜力。

2. 如何抓住数据结构与算法的学习重点?

数据结构与算法总的来说, 数据结构是考察各种数据结构的优劣分析, 基本的显示增加删除反转和一些有实际应用场景的自定义操作。 算法是应用递归查找排序动态分治贪心到合适的场景中。

作为初学者,或者一个非算法工程师来说,你并不需要掌握数据结构与算法里面的所有知识点。结合我自己的学习心得,还有这些年的面试、开发经验,我总结了 20 个最常用的、最基础数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这 20 个知识点就足够了。这里面有 10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

2. 基础数据结构

不同的数据结构有不同的优点,视情况来看。

1 数据的复杂度分析

总结:

  • 从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n2 )。几乎所有的数据结构和算法的复杂度都跑不出这几个。需要注意时间复杂度的大 O 标记法中,可以省略掉系数、低阶、常量
  • 分析复杂度时候,往往是没有固定答案的,因为对于一些比较复杂的算法处理数据大小不同,可能复杂度就不同。 掌握了最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst case time complexity)、平均情况时间复杂度(average case time complexity)、均摊时间复杂度(amortized time complexity)之后才能够全面分析算法的复杂度。需要注意大部分情况下,我们并不需要区分最好、最坏、平均三种复杂度。平均复杂度只在某些特殊情况下才会用到,而均摊时间复杂度应用的场景比它更加特殊、更加有限。
  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值