渐入佳境的算法开发,分享一下学习心得【玩转算法】

举报
叶一一 发表于 2023/05/30 09:54:53 2023/05/30
【摘要】 对于算法的摸索也有一段时间了。古人有云"悟以往之不谏,知来者之可追"。是时候进行阶段性的总结,找到适合自己的学习方法。本文分享渐入佳境式的算法学习方法。

一、搞算法,从一瞬间的热爱开始

我爱创意胜过逻辑,喜欢编写代码超过闷头学习。

当我实现自己的第99个创意之后,看着窗外散发着昏黄光晕的夕阳🌇,心里有一丢丢空虚。

于是,我把目光转向了算法,迟早要刷题,不如趁着这股头脑发热的劲头研究一番。

因为不够专业,才想着提升自己。不想只是略懂皮毛,能通晓原理岂不锦上添花。

那么先来了解一下算法是什么吧。

初探算法之门

算法是指对特定问题求解步骤的一种描述。

使用自然语言、程序设计语言描述算法,也可以使用流程图、框图等图形化的方式来描述算法。

算法特性

  • 有穷性:由若干条指令组成的有穷序列组成,总能在执行若干次后结束算法,算法不是永不停止的。
  • 确定性:算法中的每条语句都是有明确的含义。
  • 可行性:可以在当前环境条件下,通过有限次运算实现算法。
  • 输入输出:会有零个或多个输入,会有一个或多个输出。

「好」算法的标准

  • 正确性:能够满足具体问题的需求,在当前环境条件下运行正常,无语法错误。
  • 易读性:遵循标识符命名规则,简洁易懂,注释语句恰当适量,便于阅读。
  • 健壮性:对于非法的数据及操作,有较好的反应和处理能力。
  • 高效性:运行消耗的时间短。
  • 低存储性:运行需要的存储空间低。

二、不急,先来搞定不确定性

了解了算法的基础知识之后,尽管有坚定的态度想要学习算法,或者已经开始学习了,但是学习之旅可能没那么顺利,前路漫漫,总有一些沟沟壑壑。

于是我先扪心自问了几个问题:

  • 为什么对算法有逃避心理?
  • 如何爱上算法?
  • 怎么保持学习的热情和积极性?
  • 如何达成掌握算法的成就?
  • 学到的算法怎么应用到工作中?

先把不确定的因素找到,想办法逐个击破,才能收获想看到的风景。

三、算法之难,难于登泰山

先来会带第一个问题,之所以对算法有逃避心理,是因为看过、用过、接触过、尝试过、努力过,但是算法确实有点难。

再具体一点,算法的难点有以下几个方面:

  • 如何设计算法,使用什么算法策略比较好;
  • 如何确定算法的复杂性;
  • 复杂的算法,怎么学会它,理解它,掌握它;
  • 学习一段时间后,遇到新问题,仍然无从下手;
  • 怎么优化算法。

精通算法,肯定需要一段时间的研究,这个时间可以不是连续的,但是时间周期会比较长。这当中,会因为各种各样的原因,失去最初的学习热情。

四、发现算法之美,化兴趣为动力

都说兴趣是最好的老师。想要爱上算法,兴趣不可或缺。那么问题来了,对算法的兴趣如何培养?

我喜欢听故事,喜欢生活化的事物,这样可以让我更好理解,也更容易坚持学下去。

从日常生活出发

先来看几个生活化的场景。

场景一

假设你有一套空置的房子🏡,你想卖掉它。在咨询了几个房地产中介之后,你将粉刷一新的房子推向市场,然后静待有意者上门。每当一个看房人提出购买意向时,你基本上都要做决定,要么接受,要么拒绝。

但是,拒绝是有代价的,因为在下一个有意购买者上门之前,你需要再支付一周(甚至一个月)的抵押贷款,而且下一个购买者的报价未必更高。

那么什么时候才是卖房子🏡的最佳时机呢?

场景二

假设你今天开车去商场购物,商场的停车位,地上和地下都有,地下需要走的路更多一些,但是你打眼一看,地上停车位已经停了很多辆车,这个时候不确定是否还有车位可以让你停车。

如果选择了开入地上停车位,但是没有车位,需要将车辆从出口开出去重新从入口进入商场,这样一来会花费更多的时间。

那么你准备刚进入的时候选择地上停车位还是地下停车位?

场景三

假设有一个旅团,一共30个人,有男人、女人和孩童。大家参观到中午,选择去当地的特色小馆吃饭。这些人在这家饭馆一共花了500元,每个男人花30元,每个女人花20元,每个孩童花10元。

那么请问男人、女人和孩童各有几人?

算法之美

上面三个场景,多少都和日常生活有所关联。单纯靠猜,蒙对的几率很小。如果列个式子去解未知数,那么等式该怎么列呢?是不是兴趣上来了。

总结一下,我发现的算法之美。

化繁为简

日常无论是工作还是生活,有些场景可以借助算法,将复杂问题简单化。

比如买东西时怎么挑性价比高的商品、怎么用优惠组合可以让价格更低、出行时哪条路线更便捷等。

复杂一些的比如估算某件事的成本、某个规律性事件的数量、还有一些事件发生的概率以及什么概率下做决定比较多。

这些事,单纯靠想象,是比较难处理的,如果代入一些公式进行计算得到结果,怎么做选择就一目了然了。

降本提效

经过数学家欧拉的实验,以37%作为分界点,前面的时间用来观察,后面的时间用来作决策的一种方法。

这样一来卖房子和停车的问题,是不是就有解决思路了。

有规划成方圆

  • 在搜索省份和城市数据的时候,希望按照首字母进行分类展示。
  • 打开外卖APP,查看美食商家,可以按照距离筛选,也可以按照好评筛选。
  • 整理好装有100本书的书架和两个各有50本书的书架,哪个更费时?

这些问题,如果没有建立排序,想想数据量,就令人头皮发麻。

合理利用算法,可以为我们解决大数据量问题,也可以通过结果了解社会的本质。

所谓社会,就是我们维持的另外一种更重要、规模更大的秩序。

保持阶段性收获

我一般会保持下面这张图中的良性循环

学习中分阶段取得收获,每个阶段的收获可以鼓舞自己继续学习下去。

五、从热爱出发,贵在坚持

对事物保持长久的热爱,是一件比较困难的事。热情褪去,剩下的路该如何走?半途而废?差不多得了?

所以除了热爱,保持热情,坚持才能实现最初的目标。

如何做到坚持?

提高效率,缩短学习周期

周期太长,会因遗忘曲线,学习到后面的时候,已经忘记了前面的知识点。

避免拖拖拉拉的心态,以及拖延心理,缩短学习周期,有利于有始有终。

且提高学习效率,会有成就感,帮助提升学习积极性。

制定合理的目标规划

我一般是月度规划。因为平时要上班,可投入到学习中的时间,大部分是碎片化的时间。

所以一个新技术,用一个月的时间,完成从掌握到精通。学习周期不会因为过短导致学不到点子上,也不会因为过长导致有始无终。

我基本每隔两个月,会复盘一下之前计划的进度,做出适当的调整。

这个习惯已经坚持了三年多了,挺有收获的。(我之前也是拖拉的性子)

直面困难,迎难而上

回避是以不面对的方式来面对问题,它是一种消极的解决问题的方式。

像升级打怪,积累经验之后,相同的问题便不再是困难。

遇到新问题的时候,是会有些痛,但是这种痛是暂时的。「长痛不如短痛」,与其心怀忧虑,不如迎难而上。

所以,我在罗列出算法的难点之后,心里已经有了大致的学习规划,已经不是那个轻易被困难吓到的自己,除非这个困难不是一般的难。法子总比困难多。

养成记笔记的好习惯📒

「好记性不如烂笔头」。但是做笔记也有讲究,不要囫囵吞枣把所有的内容都记下来,这样效果不佳。

分享几个我日常写笔记的习惯。

新知识点

除了记录它是什么、能做什么、怎么用。最好把不理解的地方打上一些标记,回头翻阅笔记的时候,遇到记号就能产生学习联想。

解决方案

很多优秀的博主会分享知识点总结、解决方案。如果再看文章的过程中,遇到比较好的想法,要及时记录下来📝,后面如果实际开发中,遇到相同的问题,即便回忆不出具体的内容,但是最起码有模糊的记忆,可以找到当时记录的笔记。

此刻的叶一一十分感谢当初记笔记📒的叶一一

创意想法

创意灵感往往一闪而过,如果当时无法立刻实现,可以先把想法做一个简单的记录。有时间了,可以尝试实现它。

且创意想的多了,再需要的时候可以十分敏捷的想到实现方案。

阶段总结,为未来铺路

木桶定律,补短板

木桶定律:只木桶盛水的多少,并不取决于桶壁上最高的那块木块,而恰恰取决于桶壁上最短的那块。

有些短板是需要补长的,短板太明显,不利于个人成长。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。