大学常思,极少为文,杂念闭胸,不舒不畅。诸君不喜勿扰。
最近很长时间都是在写公开课的笔记,很少有自己的东西,这里继续写一下大学杂念集
======================================================================
“算法之道”是csdn上一个人气很高的博客,当然这不是我想说的主题,还是推荐大家去看一下,这个blog有很多不错的东西,在此只借用它的名字
什么是算法,百度百科上这样说到“算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制”。
在很长一段时间内(高中到大一)我都错误地理解了这个概念。高中一直在做信息学奥赛,所以接触算法这东西可能比很多人要早一些,可惜的是我也先入为主地把算法和“竞赛上的算法”划上了等号。到了大学之后,因为感觉用两年甚至三年的时间换一块ACM的金牌不值得,所以也就没有继续了,尽管如此,我仍然把竞赛的书当作兴趣爱好来看,因为在我潜意识里,竞赛上的算法那是很牛很高端的,我甚至产生了一些小小的挫败感,因为没有在这条路上走下去。
很欣慰的是,我发现我错了:算法并不等于“竞赛上的算法”,至少在现在的我看来,算法是能够用来解决实际问题的东西,ACM可能会给人打下一个很好的基础,但是过程太无聊,你无法否认的是到一定阶段后ACM就是题海战术(我不是来批判acm的,相反我很佩服搞acm的同学,我就不在这纠结了)。
在接触机器学习之前(好像我学了很久似的),总觉得人工智能神秘而不可破,大概是因为看到太多神奇的程序和应用,我就一直在想人工智能的程序是怎么编出来的,于是我就尝试用自己以前理解得算法来解释“人工智能”,后来参加了一个微软的“编程之美AI”比赛,发现好像绝大多数人都是用同样的思路来编程的。
//////这个比赛是一个海战,你可以编写AI控制5艘船来对战和占领小岛,所有我见的程序都是作者自己想出一个策略,然后编程去实现,各种循环来算诸如距离、速度等等,效果我就不多说了,你可以想象,即使我能完美实现我的策略,它的“智能”程度怎么可能超过人呢。这一点,我敢说即使让各位acm大神来做也不过是更好地实现策略,你拿着《算法导论》一个一个对照,很难找到有用的算法,顶天了一个dfs和bfs。即使有,在这样一个小规模问题中从O(n^2)或者O(n^3)到O(nlogn)的算法我也不认为有任何必要。
问题就来了,如果《算法导论》上的东西就是全部的算法,那在特定领域比人还厉害的程序是怎么来的?这是一个简单的逻辑问题,所以“竞赛的算法”并不等于全部算法。虽然这是一个简单的道理,我却用了很久来认识到,而且我敢肯定。对ACM视之如神的人绝大多数都抱有我之前的看法。
那么,算法是什么呢?算法,其实无处不在,任何一个程序,一个问题,解决它的方法都能叫作算法,算法,并没有什么“偏理论”和“偏实际”的分别。解决问题:这就是算法的主要功能。你手机上的APP,你每天打开的搜索网站,每次的登陆,你对siri说的每一句话,你在游戏里看见的每一个AI,都有算法的影子,在这个信息化的社会里,你每时每刻都在和算法打交道。每每想到这里,我总感觉到史诗般的雄壮,人类用了不过百年的时间,构建了如此庞大的虚拟世界,而这个世界的支柱之一就是算法。
算法只是如此吗?不是,这里有一个段子“每次坐电梯程序员总是抱怨这个电梯的算法不够科学”,而且这样的例子并不算少,这里的算法即是策略。生活中我们处理问题的方法也都能看成算法,边吃东西边看电影这叫并行,翻着页码找东西这叫hash,查字典可以二分……虽然有些扯,可是和算法的确能扯上关系
并且,算法可没有高低贵贱之分,能抓到耗子的猫就是好猫,能解决问题的算法就是好算法!