算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算法的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~
算法在我们的生活当中,可以说随处可见。
比如华罗庚先生曾经写的一篇中学课文《统筹方法平话》中最出名的例子,莫过于“烧水泡茶”:烧水泡茶有五道工序:一、烧开水,二、洗茶壶,三、洗茶杯,四、拿茶叶,五、泡茶。假设各道工序所需的时间如下:烧开水15分钟,洗茶壶2分钟,洗茶杯1分钟,拿茶叶1分钟,泡茶1分钟。而泡茶的方法有两种。一种是先烧水,水烧开后洗刷茶具,拿茶叶,再沏茶;另一种是先烧水,烧水过程中洗刷茶具,拿茶叶,水烧开后沏茶。
如何选择最优的方案,即是我们算法需要解决的问题。
例子当中,我们需要比较的是,哪种泡茶方案用时最短?
首先我们需要列出所有可能的算法:
大致有三种方案:
方案一:先烧水,水烧开后再洗茶壶、洗茶杯,拿出茶叶来泡茶;
方案二:烧水,在烧水的过程当中,洗茶壶、洗茶杯,拿出茶叶,坐等水开,泡茶;
方案三:洗茶壶、洗茶杯,拿出茶叶,再去烧水,坐等水开,泡茶。
方案一、方案三相当于是单线程串行执行,显然不太经济,耗时较长,资源利用效率低;
方案二在烧水的同时,去做其他事情,相当于在烧水线程执行的同时,又开了一个线程去执行其他操作,提高了资源利用率,缩短了任务总的执行时间,算法更优。
但是这个算法也并不是固定的,倘若我们在整个任务中,增加了人手,比如拿茶叶这项任务可以交由孩子去做,那么以上方案就需要重新做出调整了,事易而备变。
再比如随着时代的发展,过去烧开一壶水需要15分钟,现在可以只需要3分钟甚至更短的时间,原先最优的算法,也许到了某一时间,不再是我们的最优选择。比如长途旅行,过去肯定会选择坐飞机,随着我们国家高铁的不断发展,长途旅行中,更多的人愿意选择高铁出行就是最好的例子。
学习算法的好处,套用原文章的说法:妙不可言。
掌握了优秀的算法,可以让我们的工作事半功倍,提高资源利用率,从时间复杂度和空间复杂度两个维度,对算法进行优化。
同时也要求我们不断的学习和深入的思考:
学习新的算法思路;思考算法为什么要这么设计,思考还有没有更好的替代方案?
在算法精进的道路上,道阻且长!
加油吧,技术ers!
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:/developer/support-plan?invite_code=ceug2sn32fvt