专栏首页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 使用到了红黑树。

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

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

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

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

本文分享自微信公众号 - roseduan写字的地方(rose_duan),作者:roseduan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构和算法学习指南

    这是好久之前的一篇文章 学习数据结构的框架思维 的修订版。之前那篇文章收到广泛好评,没看过也没关系,这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,谈谈如...

    labuladong
  • 数据结构和算法学习指南

    这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,谈谈如何使用框架思维,并且给对于算法无从下手的朋友给一点具体可执行的刷题建议。

    五分钟学算法
  • 【算法】499- 数据结构和算法学习指南

    这是好久之前的一篇文章 学习数据结构的框架思维 的修订版。之前那篇文章收到广泛好评,没看过也没关系,这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,谈谈如...

    pingan8787
  • 数据结构和算法术语学习笔记

    数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅包括整型、实型等数值类型,还包括字符及声音、图像、...

    tandaxia
  • 数据结构学习☞入门(一)算法数据结构

    编程如果只是一个为了解决生活温饱的工具,那你可以完全忽略数据结构,算法,你的目标很容易实现;但如果你是热爱编程,把它当做对生活的追求,想在这一行走的更远,更久,...

    sunseekers
  • 数据结构学习,数据结构算法是什么(一)

    在计算机科学中,数据结构(Data Structure)是计算机中存储、组织数据的方式。为什么数据结构和算法经常放在一起讨论?算法用来设计一种使用计算机来解决问...

    用户1289394
  • 数据结构学习笔记——算法

    算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表达一个或者多个步骤。

    蜻蜓队长
  • 数据结构和算法

    10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

    分母为零
  • 数据结构和算法

    数据结构和算法是计算机科学中最重要的概念之一。如果您不熟悉计算机科学或编程,本文将为您提供有关数据结构和算法的概述。这也是Landscape系列的第二集。

    iOSDevLog
  • 数据结构和算法

    著名计算机科学家N.Wirth教授提出一个公式: 算法+数据结构=程序 算法有五个重要特性 1.有穷性 2.确定性 3.可行性 4.输入 5.输出...

    用户8247415
  • 如何学习数据结构与算法

    什么是数据结构?什么是算法? 从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 从狭义上讲,也就是我们专栏要讲的,是指某些著名的数...

    Jingbin
  • 01数据结构与算法总览_pythoner学习数据结构与算法系列

    可以简单理解为: 当一个一维的链表的分叉有两个的时候, 它就变成了一个二维的数据结构,相当于树结构

    诡途
  • 【学点数据结构和算法】01-数组

    先来解释下博主为什么会在这个时候开设一个专栏来学习【数据结构和算法】。

    大数据梦想家
  • 如何学好数据结构和算法

    数据结构和算法是计算机科学中最重要的课程,作为一名Google的软件工程师,我经常看到一些求职者或刚毕业的学生,他们对于数据结构和算法的学习是远远不够的。这不是...

    wangxl
  • 【学点数据结构和算法】05-树

    通过【学点数据结构和算法】系列的1-4,我们已经学习了数据结构中常用的线性结构。从物理存储方面来说,它们又分为顺序存储和链式存储结构。他们各自有...

    大数据梦想家
  • 数据结构学习,详解数据结构与算法分析(一)

    数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

    用户1289394
  • 数据结构学习,详解数据结构与算法分析(二)

    前面三点 正确性,可读性和健壮性相信都好理解。对于第四点算法的执行效率和存储量,我们知道比较算法的时候,可能会说“A算法比B算法快两倍”之类的话,但实际上这种说...

    用户1289394
  • 数据结构学习,详解数据结构与算法分析(三)

    栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底...

    用户1289394
  • 数据结构学习,详解数据结构与算法知识(一)

    什么是数据结构?数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或者多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的...

    用户1289394

扫码关注云+社区

领取腾讯云代金券