We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
笼统来说,在日常业务处理中,数据结构是指我们用什么东西(可以是普通的值、数组、链表、对象、集合、树、图等)来存储处理这个业务问题过程中的数据。算法是指我们是怎么去解决一个业务问题(用什么方式去处理)。
用专业术语描述的话,数据结构是指数据之间的结构关系,或者理解成数据元素相互之间存在的一种或多种特定关系的集合。算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
好吧,听起来都可能比较抽象,举个更直观的例子:我现在想去北京旅游,那么我可以自驾、可以坐火车、可以坐高铁、也可以坐飞机等等,这里提到的交通工具本身(火车、飞机等)叫数据结构,而坐什么交通工具(出行方式)的这个描述,叫做算法。所以,我们可以看出,不同的算法(出行方式),性能(速度)是不一样,有快慢之分;不同的数据结构(交通工具),存储形式(站票、软卧等)也是不一样。
你看,这样类比的话,你可以发现生活中充满着类似”算法和数据结构“关系形式的事物存在,这也是为什么提到算法,一般会附带上数据结构;一提到数据结构,算法也随之带上,它们的关系就如"飞机和坐飞机"的关系。其实,很多计算机概念都是源于生活启发,源于数学理论的。
这个问题,很多师弟师妹、其他小伙伴、以及很多面试官都曾问过我,我觉得我一直都没答好这个问题,但我也相信,很少人能回答好这个问题。与其说不能回答好这个问题,还不如说,基本上很少人去真正去思考过这个问题,究竟数据结构和算法,在程序设计中,是以怎样具象的东西存在,能让我们实实在在的感受到它存在的威力。
我为什么突出”具象“这个词呢,因为在学校里面,老师在教科书上,或者在线教学视频中的授课,都不能让学生,能有一种”质感“形式去体会到编程中数据结构和算法的存在,大多都停留在枯燥的概念,和生搬硬套的练习。
我身边有这么一位可爱女生,她为了”数据结构和算法“这门课能通过,把老师课上画出来的考试重点的题目中用到的代码都背下来了,最后还考了不错的成绩。当时我听到后,都惊呆了,我并不是佩服她这种”骚操作“,而是思考”为什么有这种功夫去硬背代码,却不去折腾怎么让自己理解好每个算法?“。这个时候,往往我得到的解释大多都是:上课听不懂、没认真听讲、不感兴趣等。甚至,有些已经工作好些年的同学,都会觉得"算法和数据结构"是一个很虚的东西,有没有都不影响日常工作,没必要去专门学习,更别提深入理解了。
我承认,日常业务开发中,很多数据结构和算法,都在第三方库或者项目组中的utils工具库封装得很好了,知道怎么去使用,就可以让开发行云流水了。不过,经过我这些年来的观察,有没有经过”数据结构和算法“熏陶的人,写出来的代码是有很大区别的,甚至天壤之别!有没有?有没有同感的!?这种区别我大致归纳为:
我并没有刻意其抬高懂"数据结构和算法"的人,有多牛逼,多么高人一等,编程思维和能力真的有强弱之分,这个就是要学好”数据结构和算法“的原因之一了。就好比会武功的人,懂不懂内功,往往能决定自身功夫能达到的最高境界。就如,我当时给出的回答很多时候是:”XXX 师弟/师妹,你不学好数据结构和算法,在编程的路上是走不远的“。学习“数据结构和算法”,是能锻炼人的编程能力的,而我们大家都知道,能力需要培养的。
实际上,我还发现,有良好的程序设计基础的人,往往更能够适应多变的业务,甚至更轻松做到技术栈跨域这个过程。因为程序设计中充满着归纳、递推、分而治之、动态规划等思想,而业务中也充满着需要举一反三的情景,这个时候是需要程序员经过了良好的计算机科学教育,才能胜任这种变化已成常态的业务需求。所以,学好“数据结构和算法”更能适应多变的业务需求。
计算机科学家尼克劳斯·沃思认为程序 = 数据结构 + 算法,相信很多人都听过或者已经见过这个公式了,但对于很多初学编程者来说,是一条令人毫无触动的公式,因为他们眼里的程序,还没真正面对复杂的计算和业务。而对于已经工作了的同学,往往会觉得程序 = 需求 + 业务更恰当,这或许就是绝大工作环境影响下导致的认知。
程序 = 数据结构 + 算法
程序 = 需求 + 业务
然而,当你业务不再是日常的普通流程、机械重复的工作、模板化的生产,而是要开发一个工具库、或者底层开发、或者数据库内核开发、冷门业务开发等领域,都需要良好的程序设计基础,这条公式,就显得至关重要。一些开拓性、探索性的项目,就更需要良好的程序设计基础。
那么对于像我这样搞Web前端的同学来说,又不是搞什么底层的东西,日常业务又不用接触多复杂的计算,过于关注”数据结构和算法“是不是在装X呢?
不然,因为如果像我这样在实际工作业务(上面提到的冷门业务开发)中,使用了大量的数据结构和算法的同学,必定也深有体会”数据结构和算法”是多么重要的,因为它真的会帮我们解决实实在在的业务问题和技术难题。而且,你可以把“数据结构和算法”当成自己的一种核心竞争力!
其实,在编程中,“数据结构和算法”无处不在,简单的数组就可以当作一种数据结构了,简单的流程控制语句if、for、while就可以当作一种算法了,它们很不起眼,但是,我们很少人会去思考怎么去更好地组织数据结构、运算数据罢了。
我这里有一本电子书:《数据结构和算法JavaScript描述》, 或者关注我后续更新的内容,我会归纳精简一些有意思的内容,来减轻读者的压力!
The text was updated successfully, but these errors were encountered:
No branches or pull requests
什么是数据结构和算法?
笼统来说,在日常业务处理中,数据结构是指我们用什么东西(可以是普通的值、数组、链表、对象、集合、树、图等)来存储处理这个业务问题过程中的数据。算法是指我们是怎么去解决一个业务问题(用什么方式去处理)。
用专业术语描述的话,数据结构是指数据之间的结构关系,或者理解成数据元素相互之间存在的一种或多种特定关系的集合。算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
好吧,听起来都可能比较抽象,举个更直观的例子:我现在想去北京旅游,那么我可以自驾、可以坐火车、可以坐高铁、也可以坐飞机等等,这里提到的交通工具本身(火车、飞机等)叫数据结构,而坐什么交通工具(出行方式)的这个描述,叫做算法。所以,我们可以看出,不同的算法(出行方式),性能(速度)是不一样,有快慢之分;不同的数据结构(交通工具),存储形式(站票、软卧等)也是不一样。
你看,这样类比的话,你可以发现生活中充满着类似”算法和数据结构“关系形式的事物存在,这也是为什么提到算法,一般会附带上数据结构;一提到数据结构,算法也随之带上,它们的关系就如"飞机和坐飞机"的关系。其实,很多计算机概念都是源于生活启发,源于数学理论的。
为什么要学数据结构和算法
这个问题,很多师弟师妹、其他小伙伴、以及很多面试官都曾问过我,我觉得我一直都没答好这个问题,但我也相信,很少人能回答好这个问题。与其说不能回答好这个问题,还不如说,基本上很少人去真正去思考过这个问题,究竟数据结构和算法,在程序设计中,是以怎样具象的东西存在,能让我们实实在在的感受到它存在的威力。
我为什么突出”具象“这个词呢,因为在学校里面,老师在教科书上,或者在线教学视频中的授课,都不能让学生,能有一种”质感“形式去体会到编程中数据结构和算法的存在,大多都停留在枯燥的概念,和生搬硬套的练习。
我身边有这么一位可爱女生,她为了”数据结构和算法“这门课能通过,把老师课上画出来的考试重点的题目中用到的代码都背下来了,最后还考了不错的成绩。当时我听到后,都惊呆了,我并不是佩服她这种”骚操作“,而是思考”为什么有这种功夫去硬背代码,却不去折腾怎么让自己理解好每个算法?“。这个时候,往往我得到的解释大多都是:上课听不懂、没认真听讲、不感兴趣等。甚至,有些已经工作好些年的同学,都会觉得"算法和数据结构"是一个很虚的东西,有没有都不影响日常工作,没必要去专门学习,更别提深入理解了。
我承认,日常业务开发中,很多数据结构和算法,都在第三方库或者项目组中的utils工具库封装得很好了,知道怎么去使用,就可以让开发行云流水了。不过,经过我这些年来的观察,有没有经过”数据结构和算法“熏陶的人,写出来的代码是有很大区别的,甚至天壤之别!有没有?有没有同感的!?这种区别我大致归纳为:
我并没有刻意其抬高懂"数据结构和算法"的人,有多牛逼,多么高人一等,编程思维和能力真的有强弱之分,这个就是要学好”数据结构和算法“的原因之一了。就好比会武功的人,懂不懂内功,往往能决定自身功夫能达到的最高境界。就如,我当时给出的回答很多时候是:”XXX 师弟/师妹,你不学好数据结构和算法,在编程的路上是走不远的“。学习“数据结构和算法”,是能锻炼人的编程能力的,而我们大家都知道,能力需要培养的。
实际上,我还发现,有良好的程序设计基础的人,往往更能够适应多变的业务,甚至更轻松做到技术栈跨域这个过程。因为程序设计中充满着归纳、递推、分而治之、动态规划等思想,而业务中也充满着需要举一反三的情景,这个时候是需要程序员经过了良好的计算机科学教育,才能胜任这种变化已成常态的业务需求。所以,学好“数据结构和算法”更能适应多变的业务需求。
计算机科学家尼克劳斯·沃思认为
程序 = 数据结构 + 算法
,相信很多人都听过或者已经见过这个公式了,但对于很多初学编程者来说,是一条令人毫无触动的公式,因为他们眼里的程序,还没真正面对复杂的计算和业务。而对于已经工作了的同学,往往会觉得程序 = 需求 + 业务
更恰当,这或许就是绝大工作环境影响下导致的认知。然而,当你业务不再是日常的普通流程、机械重复的工作、模板化的生产,而是要开发一个工具库、或者底层开发、或者数据库内核开发、冷门业务开发等领域,都需要良好的程序设计基础,这条公式,就显得至关重要。一些开拓性、探索性的项目,就更需要良好的程序设计基础。
那么对于像我这样搞Web前端的同学来说,又不是搞什么底层的东西,日常业务又不用接触多复杂的计算,过于关注”数据结构和算法“是不是在装X呢?
不然,因为如果像我这样在实际工作业务(上面提到的冷门业务开发)中,使用了大量的数据结构和算法的同学,必定也深有体会”数据结构和算法”是多么重要的,因为它真的会帮我们解决实实在在的业务问题和技术难题。而且,你可以把“数据结构和算法”当成自己的一种核心竞争力!
其实,在编程中,“数据结构和算法”无处不在,简单的数组就可以当作一种数据结构了,简单的流程控制语句if、for、while就可以当作一种算法了,它们很不起眼,但是,我们很少人会去思考怎么去更好地组织数据结构、运算数据罢了。
怎么学习数据结构和算法?
我这里有一本电子书:《数据结构和算法JavaScript描述》, 或者关注我后续更新的内容,我会归纳精简一些有意思的内容,来减轻读者的压力!
The text was updated successfully, but these errors were encountered: