欢迎点击「算法与编程之美」关注我们!
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
这学期,我们加入了一门新课程:数据结构与算法。在此之前许多同学都听过这门课,但是能够深入了解的并不多。首先,我们在学习数据结构与算法之前要知道什么是数据结构与算法,为什么要学习它?
我们可以先将其分别拆开来看,再来分别解释。那什么是数据呢?客观事物的符号表示,是所有能输入到计算机中并能被计算机程序处理的符号的总称。如:数学计算中用到的整数和实数;文本编辑中用到的字符串;多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。
我们可以用一张图来表示结构。结构又分为集合、线性、树、图,这些结构在我们生活中的例子特别多,比如说像右边的图就是一种树形结构。说完了数据与结构,我们再来谈谈算法。算法在程序中起到了很大的作用,可以说程序就是一种算法。算法的定义是一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列。算法的描述包括了自然语言、流程图、程序设计语言、伪码。这些描述语言在对问题的描述能力方面存在着一定的差异,但是描述的结果必须满足算法的五个特征:
输入:一个算法必须有零个或以上输入量。
输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。
明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地符合要求或期望,通常要求实际运行结果是确定的。
有限性:依据图灵的定义,一个算法是能够被任何图灵完备系统模拟的一串运算,而图灵机器只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。
有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
现在理解算法的意义了,那么怎么去评价一个算法的优劣呢?首先设计一个算法的目的就是为了能够输出结果,所以最重要的一点就是正确性。其次,设计算法肯定不是给自己一个人看的,所描述的算法必须要让别人能够理解。在考虑到这两点后,就要为用户想想,有些时候用户可能因为某些不当操作输入的指令是非法的,我们也要让算法能适当的做出反应或处理,而不会产生一些莫名其妙的输出结果。在以上的问题都考虑到以后,就要在代码上进行改进,能够提高效率和降低储存量。
如果说各种编程语言是程序员的招式,那么数据结构与算法就相当于程序员的内功,想要写出精炼、优秀的代码,不通过不断地锤炼,是很难能做到的。
领取专属 10元无门槛券
私享最新 技术干货