数据结构的重要性:
数据结构与算法是计算机学科中基础中的基础。说他基础,并不是说他简单,而是因为他在计算机学科中举足轻重的地位。大学很多初学这门课程的同学,以及刚入职的工作族觉得这门课程与操作系统,计算机网络,计算机体系结构一样,是脱离实际工作的一些知识,可能除开一些面试,很少能用到。面试的时候背一背就好了。
的确,校招的时候很多公司都会面试算法数据结构,而且占的比重非常高。参加面试的学生通常没有实际的项目经验,公司只能考察他们对基础知识的掌握程度。社招也是一样,越牛的公司,越是注重考查数据结构与算法这类的基础知识。相比短期能力,更看重长期的潜力,可见其的重要程度。
如果把编程语言比作学会的招式,那么数据结构与算法就是内功。只有内功越扎实,你的招式才能发挥最大威力
笔者本科毕业的时候,也曾经工作过一年,在那一年中,确实没怎么用过数据结构(当然,数组和线性表还是会用的),算法就更不用多说了,排序就一个Arrays.sort()就搞定,整天与数据库打交道,写增删改查。作为一个入门级码农,慢慢的在过程中熟练的使用了JAVA API,觉得自己牛逼哄哄的,突然有一天,部门解散,大家纷纷转岗,我才发现自己Too young Too naive。在那一年慢慢的成为了一个CRUD Boy。一个只懂业务的业务开发师。换了部门之后,自己对业务的理解也是useless。
可见,只有更计算机科学最底层的数据结构,算法,才是我们跳槽转岗所需要的核心技能!
什么是数据结构:
顾名思义,数据结构就是数据在计算机内存储的结构。
一个比较官方的回答是: 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
名词的定义为:
但是,这些定义都很抽象,对理解这两个概念没有实质性的帮助。
下面通过一个例子来理解数据结构,以及数据结构与算法的联系:
大多数人都去过图书馆借书,图书馆是怎么储藏书籍的?为了方便查找,管理员一般会将书籍分类别进行排放,(也就是存储),按照一定的规律排放,就是这些书籍“数据”上的存储结构。
你作为一个阅读者,如果只知道书名,怎么进图书馆找到这本书呢?
当然,你可以从进门的第一个书柜找起,找到最后一个书柜。但是,假设图书馆按照分类来排放书籍(事实上也是如此),情况就不同了。这种情况下会存在一种有效的方式,
你可以先设法知道书籍的类别(比如,问图书管理员)
->知道该类别的书在哪个书柜
->去那个书柜进行寻找。
这些查找的方式就是算法。
所以你知道为什么算法与数据结构通常是联系在一起了吗?数据按照某种方式进行存放后,是为了更方便的进行“查找”,“更新”,“新增”,“删除”操作。而这些操作,就是算法。以某种方式存放就是数据结构。
设想一下,如果管理员不按任何规则排放书,你是不是真的只能从第一个找到最后一个了呢?
如何学习数据结构与算法:
基础知识就简单吗?其实不然,我们现在可能会认为小学学的四则运算简单。但是,不妨回忆一下,当初小学我们学四则运算,背99乘法表是多么的煎熬,一把鼻涕一把泪的。可见,知识储备是一个痛苦的过程。你坚持下来才能开启新知识的大门,学习更多的新知识。没有四则运算基础,我们又如何学习数论中的因数分解,几何中的面积求解呢?我们学习新的知识,是不断累积的,认知不断提高的,如果你想跟穿越过来的秦始皇讲“计算机”这个新名词,想必他也是很难理解吧。
作为大学才开设的课程,数据结构与算法比起小学学的东西自然不可同日而语。这门学科难吗?
当然难!
几乎我们课本上所学的每一种数据结构,每一个算法,都是来自一篇或者多篇高质量的论文。前人日以继夜的研究,才将这些知识呈现在我们面前,大多数高质量的论文都是博士阶段才会产出。所以很多知识并不简单。
举个例子,我们小学就“记过” Π=3.1415926535.....你现在看着他觉得眼熟吧?但是你知道他怎么来的么?(我猜绝大多数人不知道)。还有一个无限不循环小数,自然对数e ,他怎么来的?
我们学这些知识,很多情况下都在死记硬背,并不清楚它是怎么来的,为什么它会存在。
同理,在学数据结构的时候,很多同学并不理解设计背后的理念,在什么场景下更合适使用它,为什么它会存在?因此,很多人都学不好它。
正所谓:“有需求就有市场”,每一种数据结构都有它存在的合理性,都有更适合它的场景。
所以,应尽量从“实用性”的角度出发,举例说明一些具体数据结构使用场景。比如,在什么时候使用线性表而不是链表,链表具体使用在哪些场景中?
另外,!非常墙裂!建议大家尽量能动手写一写,巩固自己所学到的知识。
好了,啰嗦了这么多,导读也该到此结束了,从下期原创文章开始,大家一起来学习数据结构与算法吧。