遗传算法:算法人生

[ft=,4,][转]算法人生
算法与人生,看上去没有什么联系,其实不然。 算法是由若干条指令组成的有穷序列。人生是由若干指令(去吃饭、去睡觉、去工作等)组成的有穷序列。
算法有零个或多个由外部提供的量作为算法的输入。人从生下来开始就不断地接收来自于自然界、社会各种信息。
算法产生至少一个量作为输出。人生当中的输出也至少有一个,包括物质的和精神的。
组成算法的每条指令是清晰的,无歧义的。组成人生的指令也是清晰的,不过由于硬件具有很大的不稳定性,执行起来会造成误差。
算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。
人生中的每条指令当然也如此。

算法分析的目的在于分析算法的复杂度,从而改进算法,使算法能够使用尽量少的资源(时间、空间)完成算法的计算,得到结果。每个人的人生都有一定的目的,不管这个目的是高尚的还是庸俗的,也不管这个目的是宏伟的,还是渺小的。每个人都为了这个人生目的而奋斗,有的人在奋斗过程中不断分析,寻求更好的方式达到目的,有的人按部就班的前行。当然不会思考的人获得成功的可能性是很小的,所以相对应于算法分析,这里提出人生分析。如同算法分析一样,人生分析的目的在于分析如何目前的现状,使用最少的资源(时间、金钱等)达到自己的目标。

所以说,人生如算法,算法分析也就是人生的分析。

无论从宏观的角度来看,还是从微观的角度来看,算法中最重要的一个指令是“选择”,人生也如此。算法寻求结果是通过try出来的,人生也是try出来的,说得通俗一点,人生是摸索出来的,说得更科学一点,人生是探索出来的。如果人生的目的是排好序的,那我们没有理由从小到大一点一点去try,如果有共n个目的,那么平均要试n/2次,但以选择二分查找法去寻求自己所追求的那个目的,平均只需要logn次。可惜假设不成立,但是人生中的很多事情是可以通过二分查找法来进行改进的,大家应该知道,人生中很多事情不是只有两种答案,一种是0,还有一个是1,正确的答案往往在0和1中,而且根据不同的外部输入,答案也不同,换句话说,只有把握好了一个度,才能处理好。这样的例子人生中太多。
人生是复杂的,复杂得我不知道人生是否属于NPC,或者说这里用“属于”这个词是否正确我都不能明确。但有一点可以确信,人生中应用了各种算法。

分治算法。这是用得最多的,而且也是最直观的。社会的进步,造成了社会的复杂,复杂得依靠个人能力已经不能去解决,那么此时,我们通常采用的方法就是,大事化小,小事化了(呵呵,后半句不要)。为什么化小啊,为了小到能够让个人能够去完成啊,是不是只要化小就可以了呢?当然不是,划分时还得注意划分的规模,如果一件事情需要10天完成,你分给A、B两个人,A,70%, B,30%,那么最终需要7天才能完成,如果A,50%, B,50%,那么5天就能完成。还有一点要注意,A和B的工作完成后要能够准确的接上。呵呵,这是管理学中的方法,其实这就是分治了。分而治之,治而合之。

动态规划。货郎担问题够通俗话了吧。什么,你没有用到,呵呵,其实每个人在无形中都用到了该算法(计算得准不准确另当别论)。比如有时候想上街去买东西,要去一个地方买鞋子,还要去另外一个地方买衣服,再去另一个地方买点吃的,最后回家,出门前你都会盘算一下应该先去哪里,再去哪里,怎样走线路会更近一点,会节约更多的时间。这个时候你就用到了动态规划。忘了说非常非常重要的一点,动态规划在计算过程中一定要保留已经计算过的数据,避免重复计算。没有这一点,就是穷举算法,有了这一点就是动态规划算法,没有这一点,你也能成功,但是你的花100年,有了这一点,你可能只需花10年。人生何其短,有多少时间能让你重复计算?

贪心算法。拥有贪心算法思想的人肯定不是一个战略家,因为他只注重当前利益。不过拥有贪心算法思想的人肯定是一个最开心的人,因为他得到的总是当前最好的。在这个世界上,我想大多数人和我一样贪心。

回溯法和分支界定法。这两个算法是体现try思想最明显的了。不就是解决问题吗,我去先去按这条路走一走,走不通,再试一试走另一条路,呵呵,走通了,这个方法是最好的方法吗,还有没有更好的,在去试,试,试,呵呵,找到一个更好的方法,难道人生不是这样的吗?不过有一点要注意,不要盲目的试,要学会在试之前对这种方法进行判断,如果明显不行,就没有必要再试了,以免浪费时间。

虽然人生如算法,可是千万别严格的按照算法去生活,当你每天一成不变的按照你计算的从家到公司最近的线路来来回回的时候,不妨偶尔绕绕路,你会发现不同的风景,毕竟,我们是在生活,不是在做算法考试,不会因为没有达到最优而扣你的分:)
Tags:  算法导论 加密算法 遗传算法

延伸阅读

最新评论

发表评论