关于数据结构与算法的一些导读

数据结构的重要性

数据结构与算法是计算机学科中基础中的基础。说他基础,并不是说他简单,而是因为他在计算机学科中举足轻重的地位。大学很多初学这门课程的同学,以及刚入职的工作族觉得这门课程与操作系统,计算机网络,计算机体系结构一样,是脱离实际工作的一些知识,可能除开一些面试,很少能用到。面试的时候背一背就好了。

的确,校招的时候很多公司都会面试算法数据结构,而且占的比重非常高。参加面试的学生通常没有实际的项目经验,公司只能考察他们对基础知识的掌握程度。社招也是一样,越牛的公司,越是注重考查数据结构与算法这类的基础知识。相比短期能力,更看重长期的潜力,可见其的重要程度。

如果把编程语言比作学会的招式,那么数据结构与算法就是内功。只有内功越扎实,你的招式才能发挥最大威力

笔者本科毕业的时候,也曾经工作过一年,在那一年中,确实没怎么用过数据结构(当然,数组和线性表还是会用的),算法就更不用多说了,排序就一个Arrays.sort()就搞定,整天与数据库打交道,写增删改查。作为一个入门级码农,慢慢的在过程中熟练的使用了JAVA API,觉得自己牛逼哄哄的,突然有一天,部门解散,大家纷纷转岗,我才发现自己Too young Too naive。在那一年慢慢的成为了一个CRUD Boy。一个只懂业务的业务开发师。换了部门之后,自己对业务的理解也是useless。

可见,只有更计算机科学最底层的数据结构,算法,才是我们跳槽转岗所需要的核心技能!

什么是数据结构:

顾名思义,数据结构就是数据在计算机内存储的结构。

一个比较官方的回答是: 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

名词的定义为:

但是,这些定义都很抽象,对理解这两个概念没有实质性的帮助。

下面通过一个例子来理解数据结构,以及数据结构与算法的联系:

大多数人都去过图书馆借书,图书馆是怎么储藏书籍的?为了方便查找,管理员一般会将书籍分类别进行排放,(也就是存储),按照一定的规律排放,就是这些书籍“数据”上的存储结构。

你作为一个阅读者,如果只知道书名,怎么进图书馆找到这本书呢?

当然,你可以从进门的第一个书柜找起,找到最后一个书柜。但是,假设图书馆按照分类来排放书籍(事实上也是如此),情况就不同了。这种情况下会存在一种有效的方式,

你可以先设法知道书籍的类别(比如,问图书管理员)

->知道该类别的书在哪个书柜

->去那个书柜进行寻找。

这些查找的方式就是算法。

所以你知道为什么算法与数据结构通常是联系在一起了吗?数据按照某种方式进行存放后,是为了更方便的进行“查找”,“更新”,“新增”,“删除”操作。而这些操作,就是算法。以某种方式存放就是数据结构。

设想一下,如果管理员不按任何规则排放书,你是不是真的只能从第一个找到最后一个了呢?

如何学习数据结构与算法:

基础知识就简单吗?其实不然,我们现在可能会认为小学学的四则运算简单。但是,不妨回忆一下,当初小学我们学四则运算,背99乘法表是多么的煎熬,一把鼻涕一把泪的。可见,知识储备是一个痛苦的过程。你坚持下来才能开启新知识的大门,学习更多的新知识。没有四则运算基础,我们又如何学习数论中的因数分解,几何中的面积求解呢?我们学习新的知识,是不断累积的,认知不断提高的,如果你想跟穿越过来的秦始皇讲“计算机”这个新名词,想必他也是很难理解吧。

作为大学才开设的课程,数据结构与算法比起小学学的东西自然不可同日而语。这门学科难吗?

当然难!

几乎我们课本上所学的每一种数据结构,每一个算法,都是来自一篇或者多篇高质量的论文。前人日以继夜的研究,才将这些知识呈现在我们面前,大多数高质量的论文都是博士阶段才会产出。所以很多知识并不简单。

举个例子,我们小学就“记过” Π=3.1415926535.....你现在看着他觉得眼熟吧?但是你知道他怎么来的么?(我猜绝大多数人不知道)。还有一个无限不循环小数,自然对数e ,他怎么来的?

我们学这些知识,很多情况下都在死记硬背,并不清楚它是怎么来的,为什么它会存在。

同理,在学数据结构的时候,很多同学并不理解设计背后的理念,在什么场景下更合适使用它,为什么它会存在?因此,很多人都学不好它。

正所谓:“有需求就有市场”,每一种数据结构都有它存在的合理性,都有更适合它的场景。

所以,应尽量从“实用性”的角度出发,举例说明一些具体数据结构使用场景。比如,在什么时候使用线性表而不是链表,链表具体使用在哪些场景中?

另外,!非常墙裂!建议大家尽量能动手写一写,巩固自己所学到的知识。

好了,啰嗦了这么多,导读也该到此结束了,从下期原创文章开始,大家一起来学习数据结构与算法吧。

你可能感兴趣的:(关于数据结构与算法的一些导读)