数据结构与算法对一个程序员来说的重要性?

论坛 期权论坛 期权     
穿过海的声音   2018-9-24 01:03   53810   8

数据结构与算法、设计原理、计算机底层等一些基础知识对程序员来说有多重要?还是说这些知识的重要性远没有对一门编程语言的熟练度重要?个人感觉程序员如果想达到一个高层次,底子是最重要的。希望广大知乎的朋友来解答。

分享到 :
0 人收藏

8 个回复

正序浏览
8#
wkGCaSS  3级会员 | 2018-9-24 01:04:08 发帖IP地址来自

很简单:智商不够,算法(书)来凑

7#
flyingfish  3级会员 | 2018-9-24 01:04:07 发帖IP地址来自

算法很重要,数据结构是算法实现的基础。


无处不在的压缩算法,视频会议的核心是图像和音频数据的压缩算法。大数据存储中的列存储方式。

物流中心的选择,外卖的智能分单,导航的最短路径,游戏的特技。算法无处不在。


算法不被重视的原因是,大部分程序员是站在巨人肩膀上的搬运工。

6#
羊牮  3级会员 | 2018-9-24 01:04:06 发帖IP地址来自

很多年以后,我去补了很多热门推荐的数据结构和算法的书,很沮丧,很多算法都是我当年想破头之后写过的。

数据结构和算法很重要,总是会在工作中不期遇到。这样说,如果不曾为自己一个巧妙的结构、优雅的算法而自恋过,那么这个程序员其实是不怎么热爱这份工作的吧?或者说,一份不涉及数据结构和算法的编程工作,它不应该算是份程序员工作。


题主要拿编程语言的熟练度来比?别开玩笑,熟悉编程语言只是最基本的要求吧?等于问一个姑娘,「嫁给一个男人,到底是有套学区房重要,还是每天有饭吃重要」


对于怎么学习数据结构和算法。我觉得,学习算法跟实际工作相关才是最高效率的。如一开始我所说的,可能我错过了,浪费了很多时间精力去自我思索,也许很早以前我就需要那些书去辅助。


但是同样,对于一个没有工作经验的人来说,凭空去看这些算法,可能有点枯燥,可能根本不知道会用在什么场景。


另外,现在,很多书上列举的算法已经不需要自己去写了,只需要你理解原理,适当使用就可以。你要写的是跟书上不一样的算法。所以,千万不要去背代码,学会设计。

5#
Shisoft  3级会员 | 2018-9-24 01:04:05 发帖IP地址来自

完全取决于你做什么。像微软这种企业至少在 Azure team 随便找个猴子就能把工作做好,根本不需要什么数据结构或者算法。但是如果跑去做数据库引擎之类的,基本整天要和各种数据结构打交道。而不是随便拖一个 List 出来不管是 ArrayList 还是 LinkedList 都一样用这种情况。

4#
慕鸢  1级新秀 | 2018-9-24 01:04:02 发帖IP地址来自
程序猿 = 程序 + 猴子
程序 =数据结构 + 算法

都挺重要的。
3#
Chen Moore  4级常客 | 2018-9-24 01:04:01 发帖IP地址来自

数据结构和算法可以让你知道实现需求的方向是什么,而不是没头没脑的一顿乱闯

2#
不辣的皮皮  3级会员 | 2018-9-24 01:04:00 发帖IP地址来自

一门编程语言的熟练度,指的可不是语法,恰恰就是在这门语言上如何实现想要的数据结构,网络通信库,数据库以及其他组件。

1#
北南  5级知名 | 2018-9-24 01:03:59 发帖IP地址来自

谢谢邀请!

程序员想拔高一个层次,数据结构和算法只是很小一部分,但却是很重要的一部分。

有时候,我们需要一个标准去判断一段程序的好坏,基于什么呢?其实很多方面,比如说可读性,可扩展性等等,但还有一个可以量化的标准,就是空间和时间复杂度的分析。这是算法的内容。

有些朋友可能觉得自己日常不太去写算法,数据结构和算法就用不上了。其实不写不代表不用。

我觉得会分析比会写更重要,也更常用,有些算法不是让你去写的,比如说AVL,比如说B+树,可能你除了学校里的作业,一辈子也不会实现一个出来.但你学会了分析和比较类似算法的能力, 有了搜索树的知识,你才能真正理解为什么要用数据库的索引,你才能明白 like "abc%"会不会使用索引的问题,而不是人云亦云。

再举个例子,你有个链表,你想用快速排序,怎么办?有想过吗?网上有现成的答案,实现和使用数组的版本比有很多的不同。为什么会这样?这时候你有没有想过用MergeSort或许更容易些?或者把链表里的数据放到数组中再进行快速排序?这些办法到底哪个好呢?

可以看到java8 Arrays.sort用的quicksort,Collections.sort是改良过的mergesort,这里有很多讨论,大家可以自己搜搜,其实就是各种权衡。但怎么权衡的呢,用上面提到的时间和空间复杂度分析。

还有一个常用例子,java中override equals之后一定要override hashcode,这是为什么?这不懂hash table的话,打破头也想不明白吧,就只能死记硬背了。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP