为什么要使用循环队列「算法基础篇01我知道要用循环但是为什么要用循环靠背」

在《概念梳理篇》中,严Sir用7篇文章与大家一起讨论了程序设计当中的一些基本概念(主要是围绕C语言开展),这些概念是基础,需要扎实掌握。

接下来是《算法基础篇》,严Sir会用一系列文章与大家讨论程序设计的灵魂。同时,个人一直认为在算法分析的过程中,对于人的思维模式会有一定的培养,会让人在分析问题、提出方案、尝试解决、不断修正、解决问题的思维闭环中提到提升。

这是算法基础的第01篇文章,适合程序初学者阅读。

01 没有为什么,算法难道是靠背的吗?

接下来,我们看一道程序基础中当中的经典问题,相信很多小伙伴在学习的过程当中都曾经遇到过。

例:求s=1 2 3 ... 100

路人甲:天呀,这个题这样简单,还需要讲吗?不就是用一个循环就可以解决了吗?

严Sir:是的,用一个循环就可以解决了。可是为什么要用循环呢?

路人甲:当时学习的时候,遇到这类的问题就用循环,没有为什么。

严Sir:难道靠背吗?

02 到底什么是算法?弄清算法实质很重要!

上面的问题,其实很多小伙伴都遇到过,也有部分伙伴还就这个问题请教过其他人,得到最多的回复就是:没有为什么,你记住,这种问题就用这种方法去做就行了。

首先,我们要弄清楚算法的实质。

什么是算法?老规矩,严Sir只讲自己的理解。

严Sir认为:算法就是解决一个问题有先后顺序的解决办法。

如生活当中的例子:下面条吃。

我们一般的解决办法是这样的:

1.烧开水;2.下面条;3.弄调料;4.起面条;5.吃面条

这就是解决“下面条吃”这一个问题的步骤,而且这些步骤是有先后顺序,它就是算法。

请大家思考一个问题,如果将第二步和第一步交换,会得到什么样的结果呢?真是那样做的话,吃的就不是面条而是面糊了。

在程序当中,对于算法的书面表达是:算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

03 采取什么样的算法是有思维过程的,绝对不是靠背的!

解决一个问题应该采取什么样的算法呢?

其实算法选择与确定是有思维过程的,绝对不是靠背的。

我们暂时不管数据结构的方式,我们来看看前面所提问题的算法选择与确定的思维过程。

问题:求s=1 2 3 ... 100

算法分析:

1.变量分析题目让我们求一个和的结果,这个结果需要用一个变量来存储,于是我们定义一个整型变量s来实现,最开始它里面是没有结果的。于是,在脑海里面有了下面这条语句:int s=0;还需要其它变量吗?现在看是不需要了。2.求和思考怎样求和呢?刚开始接触编程的同学,由于代码量积累不够,经验不足等原因,不能快速构建算法,于是就特别有思维的过程。第一步:基础思考一堆整数来求和做不来的话,就需要转变思维方式,问自己:生活当中是如何做的呢?摸出一个计算器,怎样来求和?是不是一个一个加进去?第一个数加几?加1。加到哪里面去?在s原来基础上,加到s里面去。于是可以写成这样: s=s 1第二个数加几?加2。加到哪里面去?在s原来基础上,加到s里面去。于是可以写成这样: s=s 2第三个数加几?加3。加到哪里面去?在s原来基础上,加到s里面去。于是可以写成这样: s=s 3这样一直加下去,一直加到100。s=s 100于是上面这些步骤集中起来写,就写了如下的100步:s=s 1s=s 2s=s 3s=s 4......s=s 100第二步:思考升级如果真的是这样的来写代码的,问题肯定能解决,但是定起来很累的,一共要写100步,如果是让我们求1~10000和,我们就需要写10000步,这也太LOW了。观察:请问下面的步骤哪里不一样?s=s 1s=s 2s=s 3s=s 4......s=s 100通过观察发现,这些步骤在形式上都很相似,只有加号后面的那个数不一样,是在变化的,这个变化是从1开始,到100结束,变化是遵循每次多1的规律的。好吧,加号后面的数是变化,既然你要变,你就用一个变量i来满足你,于是上面100步不相同的步骤,就可以抽象成完成相同的1步:s=s i抽象出来的这一步,会随着i的变化反复执行,在我们学习的顺序、选择和循环结构当中,哪一种是用来解决反复性问题呢?当然是循环,于是到此,我们确定了要用循环结果。i的初值从1开始,终值到100,每次在原来的基础加1,循环结构的基本框架浮现出来。for(i=1;i算法确定了,如何进行算法表达呢?如何让更多的人来理解你的算法呢?

这时就需要流程图上场了。很多初学者不喜欢画流程图,喜欢直接写代码,认为这才是与编程直接相关的事情。其实这是天大的误解。

流程图对于算法梳理、算法表达、算法检验都有着重要的作用,这算是每个程序员的基本功。它能大大地提升代码质量,减少BUG出现。

05 代码是算法的最终表现,是思维的实现

算法确定以后,用流程图来梳理与检测,最后用代码来实现。程序是靠一条一条的指令让计算机去完成相应的工作的。在大型的软件公司,往往复杂的算法是由算法分析师完成的,而代码是靠程序员完成的,实现了构建算法和实现算法的分离。

//C程序的代码实现int main( ){ int s=0,i; for(i=1;i前文所讲的算法对于问题的解决是可以实现的,但是是不是最优的呢?

它确实不是最优的。至少它还可以拓展性、代码复用性上还可以进行优化。在本文当中不作展开。算法的优化是一个学习过程,需要多看别人的代码,思考算法的优化性,同时需要一些理论支撑,只要在不断的学习过程中,才能明白算法设计的精妙之处。

07 总结与思考

本文围绕一个经典问题展开,对于算法的思维过程进行了基本讲解,提出了一些算法分析的方法。

请各位小伙伴思考一个问题:如何来确定问题的算法呢?它的思维过程是怎样的呢?

然后大家可尝试对下面的问题进行算法分析。

问题:输入一个10进制整数,然后将其转成二制输出。

各位小伙伴可以将分析过程以图片的形式在留言区进行讨论和交流。欢迎小伙伴们点赞、转发与评价。

为什么要使用循环队列「算法基础篇01我知道要用循环但是为什么要用循环靠背」

为什么,哪些问题适合采用循环结构算法

如果程雹唤序中存在需要连续反复执行多次的操作,就可以采用。 另外针对操作次数已经,建议使用计数循环方式。 如果操作次数未知,要求达到指定目标才停止,就采卜巧用条件循环。型肆键

为什么要使用循环队列「算法基础篇01我知道要用循环但是为什么要用循环靠背」

C语言 for循环的重要性,什么时候用for循环

for循环就是为了让你的程序更简单 写起来更容易 更有条理性
简单说 你用for循环能完成的事 用case也能完成绝大部分 但是问题是用case就会非常谨稿的麻烦 需要人核晌裂一条一条的写 而for就不用 只需要你在for循环里定义算法(逻辑)即可
例如 1-100的累加 或者C平方=A平方 B平方之类的
综上 当你的程序按照一个特定的规律运行(循环)的时候就能用for循环
(你提出这种问题一看就是刚学C一个月都不到的 多写多看就知道改闭什么时候用了 )

上一篇: 女销售原来靠这样卖房(楼盘置业顾问提成大概多少)
下一篇: 买真钢还是电钢「还在犹豫买真钢和电钢吗」