随着人工智能(AI)的火热发展,它背后的技术——「算法」也慢慢走近普通人的生活,类似于智能客服之类的应用也会越来越多。不靠编程技术挣钱吃饭的童鞋可以不懂什么是算法,但从事软件开发工作的小伙伴就有必要知道一些了。
在搞定了计算机编程语言之后,科学家们很快发现,由于需要计算机处理的任务越来越多,因此不可避免地,要搜集和存放的资料、结果也越来越多,对这些内容的管理就变得愈发困难。怎么更好地处理它们,以便于查找和使用,就成了无法回避的问题。这种解决查找、存放(包括排序)问题的方式,在计算中,就叫做「算法」。
和算法相伴相生的另一个计算机学科分支,叫数据结构。数据结构是关于数据的组织形式,例如大家一起排队做核酸,就是一种最典型的数据结构(这叫先进先出队列,FIFO,FirstInFirstOut),就像下面这样:
而算法(这里可以理解为让大家快点做完核酸),研究的就是怎么让过程更有效率,怎么能够更快更好地完成任务。
还是拿做核酸来举例,此时人越来越多,太阳又大,等在后面的人要好久才能轮到自己,所以很多人开始不满了。为了满足大家的要求,社区只好又安排了几位护士一起做核酸,这样一下子就加快了做核酸的速度,就像这样:
原来要30分钟才能做完的,现在只要十分钟就能全部做完了。这种类似多队列的例子,还有很多,例如地铁、高铁站进出口的闸机(不是炸鸡腿的炸鸡)就是典型的多队列:
这种用多个队列解决单个队列排队问题的办法,在算法中有一种专门的名称,叫「分治」。它能大大提高效率,属于典型的「以空间换时间」的问题解决方式。
用计算机算法来解决实际生活问题的例子还有很多很多很多很多很多很多,随便说几个:用计算机切割纸板制造纸箱的算法、用计算机来调度整个武昌机务段所有高铁车辆的算法、用计算机解决大家到买票的算法、用计算机解决高德导航路线问题的算法......可以说,没有这些算法(办法),我们的生活将会非常不方便。
最后,为了让大家分清各种算法,奉上思维导图一张(个人总结,如有疏漏,欢迎指出):