怎么写算法思想( 三 )


算法产生至少一个量作为输出 。人生当中的输出也至少有一个,包括物质的和精神的 。
组成算法的每条指令是清晰的,无歧义的 。组成人生的指令也是清晰的,不过由于硬件具有很大的不稳定性,执行起来会造成误差 。
算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的 。人生中的每条指令当然也如此 。
算法分析的目的在于分析算法的复杂度,从而改进算法,使算法能够使用尽量少的资源(时间、空间)完成算法的计算,得到结果 。每个人的人生都有一定的目的,不管这个目的是高尚的还是庸俗的,也不管这个目的是宏伟的,还是渺小的 。
每个人都为了这个人生目的而奋斗,有的人在奋斗过程中不断分析,寻求更好的方式达到目的,有的人按部就班的前行 。当然不会思考的人获得成功的可能性是很小的,所以相对应于算法分析,这里提出人生分析 。
如同算法分析一样,人生分析的目的在于分析如何目前的现状,使用最少的资源(时间、金钱等)达到自己的目标 。所以说,人生如算法,算法分析也就是人生的分析 。
无论从宏观的角度来看,还是从微观的角度来看,算法中最重要的一个指令是“选择”,人生也如此 。算法寻求结果是通过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年 。人生何其短,有多少时间能让你重复计算? 贪心算法 。