说说个⼈对算法的理解(⽼物)
  我认为,我不是⼀个合格的软件⼯程学⽣。
  可我觉得,我是⼀名合格的软件开发⼈员。
  因为在中国的这样的教育⼤环境,能学会⾃主思考和独⽴解决问题是⼀件很困难的事情。
  ⼯科学习更是如此。
  我们中国的软件⼯程忽略了⼀件软件开发最核⼼的⼊门学习,有多少⼈知道何谓复杂度?⽐如时间、空间、系统复杂度。
  绝⼤部分是不清楚这些的,因为都没有坐下来好好看过有关算法理论的思考和分析。
  我们不见得要重理论轻实践,倒不如说,我更倾向于,先实践再理论后实践,依次轮回,这样我们才能彼此不落下,理论和实践是精密联系的,因为实践可以导出理论,理论可以教会实践去复⽤,知识亦如此。
  但,做得到这样的⼈,寥寥⽆⼏。这个年代的年轻⼈,被快餐和简单屏蔽了双眼,要静下⼼啃知识已经很难了。
  ⽽算法这件事,如果不静下⼼来学习和思考,是理解不到何谓算法的。
  ⼤多数⾛在前⾯的⼈都会说算法是内功,计算机专业很重要的知识。
  但这些⼈,也没讲,什么是算法,应该怎么学,为什么重要这些解释,都未曾提及。
  我想⼈主要原因在于,⼈都是⾃私的吧,毕竟⾃⼰⾟苦学来的武功,怎会轻易教会别⼈呢?
  就算是我也不例外,所以我不会讲怎么学,但我会讲,什么是算法,算法的意义,⾄少留下⼀点,让后⼈可以寻迹的脚印。
教师节送男教师什么礼物好  那就进⼊正题吧。
  算法,常定义为:算法(Algorithm)是指解题⽅案的准确⽽完整的描述,是⼀系列解决问题的清晰指令,算法代表着⽤系统的⽅法描述解决问题的策略机制。
  翻译成常⼈理解的话就是指 做事的流程
徐佳颖图片  算法其实并没有什么⾼深的,倒不如说,算法是存在于⽇常⽣活,但不会引起⼈们注意的⼀种知识。
  为何这么说呢?
  因为,算法就是描述⼀个流程的⼯具。
  何谓流程?
  万物运作都存有流程,⽽我们把这些流程统⼀起来,并赋予名词,便是算法。
  如果说,我作为⼀个物体,从A处移动到B处,该事情之间即存在着移动的这个流程,那么,我在A处,移动,B处,就可以形成⼀个流程,⽽这个流程的描述,即为算法。
  任何满⾜两件事物交互的流程,都可以被称为算法,但仅仅这样去学习算法是远远不够的。
  回想我们掌握数学知识的时候,⼀定会认识数字的最⼩单位,⼈为定义的整数 0,如果我们没有学习这件事情,便不会出现后来的123甚⾄是其他数域。
  算法亦如此,我们先明⽩最⼩流程单位,然后开始,研究对流程单位的运算和分析。
  我希望看到这⾥的你,学会使⽤联想能⼒。姜妍个人资料
  学问之间是想通的,是我⽼师说的话,当然我⼼⾥也清楚这个道理,但从我⼝中说出来这话显然没
有信服⼒,有时候年龄还真的会决定⼀件事的正确性,尽管它不⼀定正确,因为正确这件事情,也是受到时间控制的,也是存在⽣命的,或者称为时效性(例如:新闻)。
  流程便是算法的核⼼体现,与其让我解释什么是流程,倒不如我多举⼏个例⼦给你来的实在吧?
  我们习惯于经验主义,所以往往会忽略对⼀个流程的思考,但经验这件事,即是流程的⼀种形式。
  所以,研究算法,就是在把各种经验统计出各种流程应⽤场景。
  如何买⼀个东西这件事,从⾯对⾯易物,到今天⽹购,本质都是购买物品这个事情,但流程是完全不同的,我们⽆法说哪个流程更好,也⽆法说,谁可以替代谁,只能说,根据场景,我们有不⼀样的选择。
  我就以此为例深⼊讲算法吧,反正对于现在的我,讲这些事情已然轻⽽易举,张⼝就来。
  算法主要有三个指标,空间、时间、系统。
  在软件上我们最希望的事情,就是,空间最少、时间最少、系统最⼩,这⼏件事。
  但事实上,这是不可能的,事情⼀定存在⼀个总量,我们仅是尽量去保持这样的标准去优化算法。
江映蓉火
赵丽颖取关黄斌  我们不见得,⽹络交易就⼀定可以取代⾯对⾯交易,但会随着时间的流逝,其⽐重将会越来越⼤,产⽣这样的结果的原因,主要有⼏个基本理论去推导。价值最⼩理论,我们对⼀件事物的优化,⼀定会有⼀个价值⽐重,这个价值⽐重取决于当下的需求。
  因为物以稀为贵导出不可再⽣的事物为贵,价值最⾼,所以我们会认为时间和⽣命很重要,因为都没办法逆转才有它的稀有价值。
  所以⾯对⾯易物与⽹络交易彼此间⾯临着就是核⼼成本就是时间,⽽时间成本将会被不同场景体现出来,有交易渠道浪费的时间;有交易谈判浪费的时间;有交易流程浪费的时间;也有获取交易商品信息获取的时间;⽆⼀例外,都可以被折合为时间成本。
  ⽽⽹络交易将节约⼤量不必要的时间成本,从⽽使得最终交易系统成本下降。
  ⽽我说这些⼜和算法什么关系呢?
  事实上,就恰恰是这些现实⽣活的思考和启发才导致出算法的理论和应⽤,在交易这个案例中我们其实可以注意到⼏个要点。
  第⼀,所有的事情,都可以是算法的流程。
  第⼆,算法的事情,都可以被重新调整⽐重。
  第三,没有绝对的事情,学习算法不是为了得到最好的流程,⽽恰恰是为了选择最适合的(⼈⽣亦如此)。
  所以,我们真正掌握算法的时候,就是在让⾃⼰保持独⽴思考,确定⼀个最合适的⽅案,⽽不是所谓的“最好的”。
  如果你看到某个算法⾃称是某某算法中最好的算法,那这算法资料也没有继续看下去的必要了。
  话⼜转回来,我们知道了算法的本质,那么有应该怎样去设计⼀个合适的算法呢?
  遵循⼀个基本原则,付出最少,收获最⼤,这是第⼀阶段,讲究极限。
  算法⼀定有⼀个起始输⼊,在软件中,就是硬件内存输⼊,执⾏指令输⼊,然后我们在输⼊这件事情中得到输出,⽐如执⾏结果,⽐如执⾏时间。
  所以,我们需要评估,当输⼊⼀定的情况下,让输出的价值变⼤。反之,输出最⼩,输出不变。价值评估则根据需求决定,因为我们可能需要时间最短、效果最好、结果最优等不⼀样的结果。
年会开场词  假设输出价值被确定为现阶段最⼤的情况下,我们就需要压低输⼊价值,假设输出价值⼀定,则减少输⼊的需求。换⽽⾔之,就是将输⼊最⼩,输出最⼤极限,让算法保持有利⽅向的最⼩状态。
  然后你以为这样就可以了吗?
  并没有。
  算法设计的第⼆阶段,追求不稳定状态,随机、浮动、变化、熵变,讲究平衡。
  当第⼀阶段达到瓶颈时,我们改追求均衡,折衷状态,这⼀阶段讲究的是,当该算法存在两种状态的价值⽐重,我们需要的不是⼀种绝对的结果,⽽是⼀个随机结果(结果仍然符合预期),⽐如,希望时间可以少⼀点,但⼜希望空间也可以少点,因为我们这⾥,时间和空间冲突了,两者存在负相关,⽽我们此时并不需要极限,⽽是需要⼀个混合状态,即稳定,⽽⼜不稳定的平衡状态,故此时,讲究的即为平衡。
  最后这个阶段没有⼀个准确的定义,不过在我这⾥,就是让算法保持进化。⽐如说输⼊是可以改变的,⽽输出是可以不变的,我们过去某⼀时期定义好的算法,是会随着输⼊的改变,重新改变价值⽐重总量,也就是说,过去的算法,在未来不⼀定是此时的最优,重新退回第⼀阶段的不满⾜状态,需要重新追求极限,再追求平衡,然后停下来,等待下⼀次状态的改变,可能是输⼊总量变化,也可能是输出结果的变化,但归根结底,它还是原来要做那件事的算法。
  甚⾄说,算法这件事情,本来就不局限在计算机领域。
  它在我看来,就是研究是⼈类做事流程的学科,不过是在软件⾥⾯掌握的⽐较系统罢了。
  当我们知道了怎么应⽤算法的理论了的时候,就是最后的话题了。
  算法如何体现其价值。
  我认为,任何做事的流程,都可以被计算和分析,拥有计算能⼒也就⾜以建⽴其价值体系。保持上述抽象原则,计算机即可拥有基本的进化能⼒,也就是⾃我升级来改进其⼯作流程(例如⼈⼯智能)。
  另⼀⽅⾯,程序员的⼯作结果的价值可以被宏观给出,过去我们认为,结果没有变化,也就等于没有做事,但实际上,如我所说的话,其实要做的事情还是很多的,只不过是看不到罢了。
  最后,⽆论你懂不懂算法,会不会这些,其实都不重要,重要的是,你有没有去思考去总结出,⾃⼰⽣活的点滴,将其形成⼀个抽象概念,变成⾃⼰的思考法则,进⽽辐射到其他领域,我认为,这点远远⽐单讲算法这件事情更重要,希望读者保持思考,让⾃⼰变得更值钱。
  本⽂到此结束,望各位读者,新的⼀年⾥,继续努⼒,不为别⼈,为⾃⼰,更好的活在这个世界。
  陈俊欢
  ⼆〇⼀⼋年⼆⽉⼗六⽇