Home >Backend Development >Python Tutorial >学习数据结构有什么用?

学习数据结构有什么用?

WBOY
WBOYOriginal
2016-06-06 16:21:562727browse

1.学习数据结构有什么用?
2.学习算法有必要吗?

回复内容:

个人认为数据结构是编程最重要的基本功没有之一!

学了顺序表和链表,你就知道,在查询操作更多的程序中,你应该用顺序表;而修改操作更多的程序中,你要使用链表;而单向链表不方便怎么办,每次都从头到尾好麻烦啊,怎么办?你这时就会想到双向链表or循环链表。

学了栈之后,你就知道,很多涉及后入先出的问题,例如函数递归就是个栈模型、Android的屏幕跳转就用到栈,很多类似的东西,你就会第一时间想到:我会用这东西来去写算法实现这个功能。

学了队列之后,你就知道,对于先入先出要排队的问题,你就要用到队列,例如多个网络下载任务,我该怎么去调度它们去获得网络资源呢?再例如操作系统的进程(or线程)调度,我该怎么去分配资源(像CPU)给多个任务呢?肯定不能全部一起拥有的,资源只有一个,那就要排队!那么怎么排队呢?用普通的队列?但是对于那些优先级高的线程怎么办?那也太共产主义了吧,这时,你就会想到了优先队列,优先队列怎么实现?用堆,然后你就有疑问了,堆是啥玩意?自己查吧,敲累了。

总之好好学数据结构就对了。我觉得数据结构就相当于:我塞牙了,那么就要用到牙签这“数据结构”,当然你用指甲也行,只不过“性能”没那么好;我要拧螺母,肯定用扳手这个“数据结构”,当然你用钳子也行,只不过也没那么好用。学习数据结构,就是为了了解以后在IT行业里搬砖需要用到什么工具,这些工具有什么利弊,应用于什么场景。以后用的过程中,你会发现这些基础的“工具”也存在着一些缺陷,你不满足于此工具,此时,你就开始自己在这些数据结构的基础上加以改造,这就叫做自定义数据结构。而且,你以后还会造出很多其他应用于实际场景的数据结构。。你用这些数据结构去造轮子,不知不觉,你成了又一个轮子哥。 简单的说,你去学Python了,到工作中,一个负载稍高一点的Python网站,你不懂数据结构,你都不知道 List 和 Dictionary 的性能曲线大概会怎么变,需要深度优化的时候怎么下手。

你才大一,不要被那些浮躁的言论骗了。好好读书,基础打好。 数据结构和算法是一部发展史,发明他们就是为了“做出东西”,学习他们是为了不重复发明轮子,当你在“做东西”时遇到运行效率上的瓶颈,就可以参考这些前人的方案,当学完后,就能评估出一个“东西”以现在的技术是否可能做出来
有人罗列xx结构、xx算法能干嘛干嘛全是屁话,书上都有。说白了这东西就是前人的公式,学习就是为了套公式解决问题的,解决世界难题就要发明新公式(算法/结构)

能否做出来包括两点:效率是否能承受,功能是否能实现
一些语言包装了大量基础算法,用于快速实现功能,一般效率也是可以接受的
当效率不能接受,就需要调整算法和结构,c甚至汇编
题主应该是想做看得见摸得着的东西,所以应该选择抽象级别高的语言。先定这“东西”干嘛用的,拆分所有要实现的细节,逐个完成,当它运作起来并快如预期,就做完了
是否有必要深入学,和你在实现过程中的效率需求有关 TokuMX™ | TokuDB® 就是“数据结构学得好”的致富榜样。 就我来说吧…我觉得大一这一年知道的最有用的一件事是:

想做自己的东西,想做自己的应用,就不要想着它眼前的用途。

就那数据结构来说,你开始可能认为这个东西看了半天写不了任何应用,没什么实际价值。可事实上,它的价值远超你任何一门程序设计语言的语法。

你可以精通10门语言,了解各种设计模式,各种框架,但是少了数据结构,你就永远走不远,像一个握有几百种民房设计图纸的建筑设计师一样,你也不可能能设计的出迪拜塔。

很多人以为本科生做两个小项目,接几个外包,做几个App,搞搞自己的博客就很厉害,其实,如果你就被这点东西迷惑,那么,你的水平也就到这里了。

工程师不是随便动动手就能当的,本科不是培训学校。 你查东西只会遍历么 学好数据结构,可以让程序跑得快一点呗。

最近和Telerik斗争良久,各种优化,各种修改它的代码,把它内部的实现开个口子,好接管其数据结构,然后提供自己的实现,那性能都蹭蹭蹭地提高。

在此还得感谢Telerik提供的劣质代码,可以有充分的空间发挥自身价值,博取老板欢心。 我认为数据结构是程序设计中的第二层。
第一层是抽象,把你想要描述的东西用程序语言抽象出来。比如说一个人,你应该用怎样的类去储存,这是第一层抽象。
数据结构的作用是,如何将数据组织起来。
为什么要将数据组织起来?因为计算机无法理解你的抽象,它不知道这个人的爸爸是他,兄弟是他,得由你程序猿来告诉它。为什么不知道,因为计算机中只有0和1,数据都是0和1,这个节点和那个节点的关系,二者如何互相得到,这是程序员要做的,数据结构教的。因为计算机不知道怎么做。
算法是什么,算法就是如何在节点与节点之间,状态与状态之间相互转移。 首先回答,学习数据结构非常有用,它是计算机从业人员一项重要的基本功。
每年计算机系毕业生那么多,如何区分精英和普通码农的一个很重要的衡量指标就是专业基本功够不够扎实。

下面对数据结构在专业上的作用,我说一下我的看法。
在某些特定的情况下,语言提供的基本数据结构(例如int,char,string …)不能满足你的使用需求,这个时候你就需要更高级的数据结构来应付这些情况。就像武功招式,你用惯了基础招式,就需要学习杀伤力更强用途更广的招式。
相当于基础武功之上的二级招式。

当你了解了这些招式,像链表,堆栈,二叉树,图等等,你就可以用更深厚的底气来面对计算机的世界,你可以知道网络里面节点的互相连接就是图的具体实例,你可以用图的最短路径算法求出实际网络上一个节点到另一个节点的最短路径,你可以知道操作系统里面海量的文件可以由B+/B-树来组织,你可以知道进程管理里面可以用优先队列(堆)调度带优先级的进程,你可以知道函数的调用就是对系统栈的操作。
简单来说,你可以加深对计算机世界的理解。

另一方面,某些数据结构在特定的环境下可以提高使用者的效率。
例如用二叉树来查找,树形结构在查找中很大的一个好处就是减免了很多不必要的查找。当你按左小右大(左半边的所有数都小于中间的数,右半边所有数都大于中间的数)的方式组织好一个数列的二叉树,你可以每次只和中间的数比较,不断缩小范围就可以找到你要找的数。如此显然比顺序查找要快的多。

当你学完数据结构,你也会顺带着对算法有了一些了解,因为数据结构和算法往往是不分家的,算法常常需要特定的数据结构支持。
例如图论的算法几乎都要图的数据结构支持。

如果说数据结构是二级招式,还是基础内功的范围,是辅助性的,那么算法就是赤裸裸的大杀器,它可以用来纯粹的提高程序的效率(这里是狭义的算法)。
当你匹配字符串的时候,把算法换成kmp,时间复杂度立刻从O(n^2)爆增到线性的O(n),那酸爽,和操作着笨重的顺序匹配,不可同日而语。

说了这么多,你也大概明白了数据结构和算法的重要性,所以我的建议是,先打好基础,一步一步慢慢来,打好下层建筑,才能垒起万丈高楼,君不见豆腐渣工程是多么害人害己。 数据结构可以帮助你在分析业务时,快速定义对象和实现算法!
别人业务给你讲清楚,你就知道能不能实现了,编码是另外的事情了!
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn