到底需要多少“算法”才能过好这一生

   “算法”是什么?也许对一个没经历过洗脑的人来话,一上来有点懵逼,不知道这是一个什么东东。本着不忽悠与不被忽悠的态度,试着用最简单的语言来告诉你:算法就是你做一些事情的规律!
   别急,一定会有人站出来说我不对。但不打紧,还那句口头禅:让×××飞一会儿!接下来,就用一些实际例子来告诉大家我们的人生要底要用多少“算法”才能过好我们这一生..........

决策树算法
这个算法本质上是解决我们是选A还是选B的问题,我一直是觉得古人是要比现代人聪明的,最先根据大数据辅助决策可追溯到《易经》,从八八六十四卦的相生变化中组合我们实际生活推断出一些出乎人意料的结果与推断,上可挂六国之印,下可断人间疾苦(俗点说就是上可忽悠国家,下可忽悠老百姓)。而在战争史中记载的孙膑根据锅灶数量推断出对方军队数量,做出军事判断从而出击战胜对方。在当时来说,也是一种用数据来辅助决策的方法。而古代的军事家,都是会决策,懂周易之人。
再回过头来说说这个决策树算法,书本上有C4.5,ID3等等的算法。而真实在实际生活中,我们就是用来分类,最常见到的实际应用就是你本来准备买一小瓶麻酱吃涮儿锅,结果买成大瓶的了,回到家后才发现,旁边还美其名说是“买一送一”的加送了一瓶麻油。而你的预算最初只是5块,最终却花了25元。这种场景相信大家都不会陌生。这些是商家的决策树。还有就是我们经常收到的号称“特权”的待遇信息。
而决策树算法中,有一个很重要的概念--熵。书上给的定义是:恒量一组数据的分类标准,使其分类更精确。换成我们能听懂的话就是:更好的分类,是为了能使我们找到我们所需要的那一类别。
而对于人生的这一个大话题,是按照不同的年龄段来划分,而是按着一年,一月,一日来划分。可能这两种划分方法都很好,但从熵的角度来说,就要结合着你分析的目标来计算。如果说人生是一场马拉松,你就可以按不同的年龄段来划分,这样的好处就是每一个年龄段都会有一个小的目标感。而如果说人生是一场奋斗,一万年太久,只争朝夕的话,就要按一年,一月,一日这种情况来划分。因为这样,才能更好的把你奋斗的目标也实际的点点滴滴联系起来。

神经网络算法
本来就是复杂的事情,也许我们简单的言语很是苍白,根本就说不清楚。一如给年轻人讲人生大道理,根本没用,生活是要经历的。就像神经网络算法一样,本来轴突跟突触之间的传递是完成了一个神经元的传达。但当这种串行方式成千上万的时候,我们就不能够用简单的逻辑语言来表达了。
一如人生,一个人成功的背后有许多的因素,而我们经常地简单地说他是靠着某某人的关系上来的,或是说他运气较好,或是说他完全凭自己的努力。我们把本来并联的事物以单一串联的方式来解读,导致了我们只是一元一次函数,忽略了这个世界本来就是一个多元多次的相关深度神经网络........
这个算法,我一直觉得应该是一位医生最先发明出来的。当发现生活中很多的事情不再是加减乘除所能够解决的时候,就用神经网络的概念来给这个算法起名,并加以应用。现在行业里,叫嚷最多的AI就是以深度神经网络为基础模拟出人脑的思维模式,就像阿尔法狗战胜围棋冠军的事,从一个细节来说,机器能把你每一步的走法以神经元的形式储存起来,当有大量这样的神经元的时候,再根据人脑的灰质,暗质的先后,左右脑对不同神经元的调用。通过一些规律实现了这些的计算,就精确的算出了打败对方的模式。这就是神经网络算法。

支持向量机算法
一般唬人的时候,会说这个算法是叫SVM算法。实际上,在真实的生活中,用的非常多。比如说在忽悠人,说你在搞大数据的时候,会提到说我们要使用多维建模,那什么是多维建模?用生活中的例子回答就是:你有一个六维魔方,但现在你要先把它整成三维的魔方,然后用你熟悉的公式 来将其还原。
在支持向量机的算法中,是把我们日常知道的数据投射到一个坐标系中,然后去分析,预测。比如你在浏览网站,你在某个页面的停留时间,点击数据都可能组成一个维度,你浏览过的商品信息也可以构成一个维度,你过去购买过的产品信息也可以构成一个维度,你信用卡在该网站的消费记录及频次也可以构成一个维度,以此类推。当用多个维度来构造你的模型时,有一个专业点的说法叫“人物画像”。而当这些维度多达上百与上千里,就需要用到SVM来向简单的三维来投影,结合人物画像,然后做出精准推荐。
从这个角度来说,我们手机里的推荐,我们微信热文下的广告基本上都是通过这个算法来完成的。但现实也都是用SVM加上其他算法来完成。
这个算法充分证明了数学之美,生活中的任何问题都可以通过向量来组合运算,但要找到生活中真正重要的关键决策因素,还需要我们自我对一些变量的舍弃。降维的核心本质也就是筛选出真正重要的变量,而对于人生这一个大魔方来说,如何通过变换,倒置让原来多项决策的变量成为我们熟悉的条件,是我们真实要思考的。

时间复杂度与空间复杂度
先说时间复杂度,实际上它本质上解决的生活问题就是:一个产品一年卖出1万件,现在1天就可以把一年的量给卖完了。通过各种途径,比如说,微信营销,朋友圈F2F,分享减半,积赞免费送........而在IT技术上的实现,基本上都是靠着一些指针优化,哈希,二分,布隆过滤等等这些技术细节。在代码的世界里,如果要关注算法,它是做为首先要关注的,简单一点说就是为什么我的代码运行的速度比你的快。
再来说空间复杂度,一般来说是我们的代码在占用内存空间的大小,用生活中的例子,就是你去菜市场买菜的时候,你会发现,如果菜市场不扩建,原来你经常去买菜的那个摊位他摆放菜的次序会越摞越高。美其名曰是充分利用空间,而在IT代码的世界里,也同样是这样的,你一层摞一层的if....else循环是否也应该考虑向菜市场菜贩那来摆放。从而达到对内存的最小占用,提高可读取的时间。
在人生这个大工程里面,时间复杂度也体现在你对时间的利用,而空间复杂度就取决于你怎么整理你的房间。代码不是写的越多就越好,多去思考内在的逻辑才是提高好我们人生质量的关键。

   代码世界,所有的语言都是一种与机器对话的媒介。Java,Python的底层是C语言,C的底层是汇编,汇编的底层是机器码,机器码的底层是字节码,字节码的底层就是比特流,比特流的核心是0跟1,所以最底层的媒介只有0跟1。而为什么有这么多语言,同时未来还会有更多的语言,就如世界本来就是有许多种语言来沟通一样。
  底层的0与1相当于人生里的对与错,而在慢慢的发展过程中,会发现代码会越来越复杂,会逐步忽略了0跟1 ,并发,集群,共享,云端,数据......当这些新概裹携着“算法”进入我们的生活,会发现,我们的思想是更深刻,还是更肤浅。一如前一段时间,一位老师问的一个问题:这一个时代 ,到低是我们在玩手机,还是手机在玩我们!

猜你喜欢

转载自blog.51cto.com/bingyang/2339264