第二章
什么是算法
作者:TARS
在我们编程的过程中,通常都会涉及到算法,那到底什么是算法呢?
![22fff1dfdf3686f61a45f740c7e20cfd.png](https://i-blog.csdnimg.cn/blog_migrate/a669467a19faa749e2f03bfc9d7cf7ec.jpeg)
算法的定义
算法是1+1=2吗?还是加减乘除呢?其实都不是,算法,在我的理解中,它是解决问题的方法,我们的程序是由数据结构+算法来实现的。数据结构对我们来说可能太抽象了,其实可以理解为数据与数据之间的特定的关系。
![099b8d9b72dfa3fa39559cc2e297e1da.png](https://i-blog.csdnimg.cn/blog_migrate/da0cde732ed44efdb5ee217280ddc5d8.png)
算法的特征
一个好的算法,能帮助我们更好的解决我们的问题,而一个算法必备的5个特征是什么呢? 分别是:有穷性,确定性,有0个输入或多个输入,有1个或多个输出以及有效性。 那我们怎么去理解这五个特征呢? 首先 有穷性指的是一个算法的操作步骤是有限的,不能无限执行,因为我们设计算法是为了求出我们的答案,如果无限执行,怎么得到我们想要的结果呢。 第二个 ,确定性指的是我们的算法中,每一个步骤都应该是确定的,不能含糊不清。 第三第四一起讲 ,输入的话,我们可以没有输入,也可以有多个输入。再来说我们的输出,其实就是我们问题的“解”,所以我们不能没有输出,没有输出的话,这整个程序都是没有意义的。 最后一个 有效性,字面意思就是有效 ,说的是我们算法中每一个步骤都要能有效地去执行,才能得到我们正确的结果。算法的表示
接下来说一下我们应该怎么去表示一种算法呢? 表示算法的常用方法有:自然语言、传统流程图、N-S流程图、伪代码和计算机语言。 自然语言就是人们日常所用的语言,特点是通俗易懂,但文字太多,容易产生歧义。 传统流程图和N-S流程图就是运用一些图框来表示一些操作,比如输入输出框、判断框和处理框等等,直观形象,容易理解。![20cb98225c5f5c07ab3b50ca36c8a298.png](https://i-blog.csdnimg.cn/blog_migrate/d2c73267c9ae7b905329dbcdb4aae8ad.png)
(判断结构和循环结构后面会讲到)
伪代码是一种运用介于自然语言和计算机语言之间的文字和符号的算法表示方法,不需要用到图形,书写方便、格式紧凑,好懂,便于向计算机语言算法过渡。
学习算法的原因
计算机语言即常见的C语言、C++和Java等编程语言,用计算机语言表示算法,其实就是编写程序,在编写程序过程中,需严格遵循所用语言的语法规则。
看到这里可能就有人会问了:使用最简单的算法也能解决问题,干嘛还要花费时间去学习别的算法?![58b59da9d665085432a6a2de33bdf620.png](https://i-blog.csdnimg.cn/blog_migrate/0b2a2f285c0e181cd99b0c06f4887101.png)
这种想法肯定是不对的啦,算法之所以是程序的灵魂就是因为它能决定程序运行效率,我在这里简单地举一个例子,如排序问题。
假设现在有几个数字,{5,4,2,8,1}让你来排序,你是不是会想,我可以让数字两两进行比较,小的数字就换到前面去,确实,这样做可以排序成功,也挺快的。但是你要注意,这里只有5个数字,设想一下我们将数量扩大到10W个呢,一直两两比较,你觉得现在要花费多少时间呢。
如果你学会了快速排序法,10W个数字其实一眨眼的功夫它就排好了,不得不说设计出这些算法的人真的是太聪明了,我在想如果我没学习算法,我可能一辈子都不会想到居然还可以这么进行排序。
而且我们在后面会学习很多种排序算法,有枚举、冒泡、归并、快排......
![29f2261503225a62e50326314a7ed41c.png](https://i-blog.csdnimg.cn/blog_migrate/a242a7a182da6780f49a2b303092af3c.jpeg)
算法不止是排序,它也可以设计出各种问题的解决方法,等我们学习了各种算法之后,就会发现算法真的是能帮我们节省很多时间。当然我们也可以自己设计算法,来帮助我们更好的解决问题。
好了,这一章是为大家简单的介绍什么是算法,通过上面的讲解大家应该对算法有一个基本的概念了,后续会单独开一个专门讲算法的系列,为大家介绍各种算法。感谢阅读,如有错误,可私信指出。
—EasyProgram公众号平台—
文章:李冠章
初审:李冠章
复审:WarneraOp
编辑:曾煜
图片:网络