前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习数据结构和算法的感悟

学习数据结构和算法的感悟

作者头像
roseduan
发布2021-07-28 17:49:22
7190
发布2021-07-28 17:49:22
举报
文章被收录于专栏:roseduan写字的地方

在知乎的一个回答。

如何掌握数据结构与算法呢,可以看懂就是不会应用到具体的问题中好痛苦一个月了编程水平还停留在初级阶段?

看到这个问题其实挺感慨的,简单的说一下自己的看法吧。

我大三刚开始学习编程的时候,还没有接触过数据结构和算法的内容,那个时候就是写一点简单的 CRUD,对于算法我总是望而生畏,想学习却又害怕智商不够学不会。心想,对于一个文科生来说,这可能是我永远都迈不过去的坎。

后来工作了,我鼓起勇气去尝试学习一下算法,然后在网上买专栏,自己也买了一本《算法》这本书。后来发现对于一些基础的数据结构和算法,比如数组、链表、栈、队列、排序、二分查找、二叉树,其实并不算难,自己对着书上的代码,就能够慢慢的写出来了。对于一些比较稍微困难的算法,比如跳表、BM、KMP、红黑树,虽说手写代码有点困难,但是也能够基本理解它的原理,应用场景等等。

由于在目前的工作当中,我还是写业务代码,有时候会感觉得到,如果只是单纯的写业务,那么就算不掌握数据结构和算法,其实也没有什么大碍,因为在大多数场景下用不到。

但是,这么多人崇尚学习数据结构和算法,大学也将这门课程作为必修课,学习它的意义在哪呢?

我认为有两点:

第一是在大数据量下,数据结构的选择对性能的影响非常关键。我们都知道,算法的时间复杂度有:

  • 常数阶O(1)
  • 对数阶O(logN)
  • 线性阶O(n)
  • 线性对数阶O(nlogN)
  • 平方阶O(n²)
  • 立方阶O(n³)
  • K次方阶O(n^k)

在数据量较小的情况下,各种复杂度的量级差距就会小。如果你的业务中,数据量就那么几十几百条,那么你选择 ArrayList 还是 LinkedList 其实看不出来有什么影响。但是在数据量庞大的时候,不同的数据结构就会表现得千差万别,这也是为什么,一些用户流量较大的大厂在面试的时候,将数据结构和算法做为重点来考察。

第二,如果从业务代码往下走,涉及到中间件、操作系统、网络、数据库等,你其实就会发现,数据结构和算法几乎无处不在。比如 Redis 使用到了链表、哈希表、跳表,Mysql 使用 B+ 树作为索引模型,HBase 使用到了 LSM 树,操作系统中的 I/O 多路复用的 epoll 使用到了红黑树。

如果你不甘于写业务代码,想要深入到底层开发的话,那么数据结构和算法一定是逃不过的。所以学习算法,能够拔高你职业发展的天花板。

最后,再说说学习算法的一些感悟吧。其实刚开始的时候,我始终认为,把一个对应的算法,或者数据结构的代码手写出来了,我就算掌握了。但是没过多久肯定就又忘记了,然后在手写的时候,就会不熟悉甚至就写不出来了。

后来我学习的时间越长,其实就发现,对于一个数据结构或者算法,并一定一定要把它手写出来才算是掌握了,了解它的由来、解决了什么问题、时间空间复杂度、应用场景、优点及缺陷等,其实才是更加重要的。这就是所谓的算法思维,学习的目的是解决实际的问题,在遇到问题的时候,我们可以借助这种思维来解决对应的问题,这才是学习算法和数据结构的真正意义。

当然了,在初学的时候,手写对应的代码还是很有必要的,这算是一种编码训练,也是一种思维训练,写得多了,想得多了,很多事情就慢慢清晰了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 roseduan写字的地方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档