学习数据结构有什么用?

1.学习数据结构有什么用? 2.学习算法有必要吗?
关注者
2,810
被浏览
809,254
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

想从“由顶向下”的角度说说自己浅显的理解:

我们知道计算机是人类在思考“能不能偷懒”的原始欲望下创造出来——找一个自动、快速、不知疲惫地替人类进行各种工作的机器。在有了诸如“图灵机”等计算模型理论的支撑下,人们找到了通用的底层方式来实现自己想要功能的方法。但这些方法需要让计算机理解——或者可以被处理后理解,就需要我们以某种形式,将我们的问题一步步抽象、一步步化简,直到形成某种计算机可以理解的“程式化”的语言或组织形式,最后对计算机说一句:剩下的就交给你了!

举个不甚恰当的例子:

比如我们计划去旅游,我们手里有地图,想知道计划中的几个城市直接是否都有高速公路可以走,从而不会有某个城市因道路不通而无法驱车前往。虽然我们可以自己去查,但是我们有计算机啊!于是我们想借助它来完成这个任务,于是进行了第一步抽象——将城市表示为一个个点,道路表示为边,结合起来形成了叫数据结构。我们想知道的便是——这张图是否是一个连通图?比如我们用1、2、3、4分别表示“北上广深”(仅作意会),线段表示道路,于是有了这张图:

画出来以后,我们自己心里明白它表示什么,但计算机不懂。于是我们进行第二步抽象——将图编码,转化为计算机可以编译的语言。于是得到下面表示方式:

<G> = (1,2,3,4) ((1,2),(2,3),(3,1),(1,4))

前面括号中我们用数字表示各个节点(对应“城市”)的编号,后面则用“(节点,节点)”成对的形式表示一条边(对应 “道路”)。

那么计算机如何处理呢?这时就需要设计一种算法,告诉它怎么理解和处理人类跟你说的话。比如可以按这样的方式:

1,选择第一个节点并进行标记。

2,重复第3步直到没有新的节点可以被标记。

3, 对于G中的每个节点Ni,如果有一条边与其相连,且边的另一头是一个已经被标记的节点Nj(i不等于j),那么将Ni进行标记。(这一步要借助上面写出的“边的集合”((1,2),(2,3),(3,1),(1,4))

4,扫描一遍点的集合(这里是(1,2,3,4)),如果都被标记了,那么就是连通图(对应“每个城市都有道路经过”);否则不是。

当计算机运行之后,我们开心的发现,得出了想要的结果。更开心的是它不仅可以对这几个城市查询道路,还可以对更多的城市做同样的查询!我们因此省去了自己人工查询的繁琐。

具体如何实现这个算法还要涉及更底层的方面,不过我想到这里数据结构与算法已经体现出来了——正是有了这兄弟俩,我们才能让借助计算机来得到想要的东西,从而大大方便我们的生活,以及创造出如此众多神奇的科技。

愈往深处和广处学习,愈觉得人类智慧的伟大。

数据结构与算法,正是前人在计算机领域智慧结晶的集中领域之一,我想有时甚至不需要知道学好它有什么用,因为体悟智慧本身不就是一种享受吗?